此作品實現了一個簡易示波器的功能。基于MiNiSTM32開發板的硬件資源制作。通過片內高速A/D轉換器對模擬信號快速采樣,存儲其數字化信號。并對所存儲的數據進行實時快速處理,得到信號的原始波形及其參數。在彩屏上顯示波形和波形的一些參數,可根據顯示要求,對波形進行縮放。模擬輸入電壓值范圍為0V~3.3V。可通過按鍵調節顯示的單位,即每一小格對應的時間和電壓值。
電路原理圖如下:
0.png (176.7 KB, 下載次數: 121)
下載附件
2019-5-5 21:17 上傳
單片機源程序如下:
- #include"stm32f10x.h"
- #include"systick.h"
- #include "lcd.h"
- #include"adc.h"
- #include "stm32f10x_it.h"
- #include"timer.h"
- u16 j = 0;
- float temp;
- float temp1;
- void nvic_init(void);
- void rcc_init(void);
- void gpio_init(void);
- void clear_point(u16 hang)
- {
- u8 index_clear_lie = 0;
- POINT_COLOR = DARKBLUE;
- for(index_clear_lie = 0;index_clear_lie <201;index_clear_lie++)
- {
- lcd_huadian(hang,index_clear_lie);
- }
- POINT_COLOR=RED;
- }
- int main(void)
- {
- SystemInit(); //系統時鐘初始化
- nvic_init(); // 中斷優先級配置
- rcc_init(); //外設時鐘配置
- gpio_init(); //外設io口配置
- set_io0();
-
- key_init();
- systick_init(); //滴答配置,
- adc_init(); //adc配置
- LCD_Init(); //tft液晶初始化
- set_background(); //初始化背景
-
- time_init(); //定時器配置,測頻率用的二個定時器
- time_enable(); //同步開始計數
- get_value();
- vpp = get_vpp();
- while(1)
- {
- for(j=index;j<index+250;j=j+1)
- {
- temp = a[j] * 3300 / 4096 * 25 /vcc_div;
- temp1 = a[j + 1] * 3300 / 4096 * 25 / vcc_div;
- clear_point(j-index);
- if(temp>200)
- {
- temp=200;
- }
- if(temp<0)
- {
- temp=0;
- }
- if(temp1>200)
- {
- temp1=200;
- }
- if(temp1<0)
- {
- temp1=0;
- }
- lcd_huadian(j-index,temp);
- lcd_huaxian(j-index,temp,j-index+1,temp1);
- hua_wang();
- }
-
- LCD_Show2Num(144,224,vpp,5,16,0);
- get_value();
- vpp = get_vpp();
- }
- }
- void nvic_init(void)
- {
- NVIC_InitTypeDef NVIC_InitTypeStruct;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI0_IRQn;
- NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 2;
- NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;
- NVIC_Init(&NVIC_InitTypeStruct);
- NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
- NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 2;
- NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 1;
- NVIC_Init(&NVIC_InitTypeStruct);
- NVIC_InitTypeStruct.NVIC_IRQChannel = TIM2_IRQn; //配置中斷優先級
- NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 2;
- NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitTypeStruct);
- NVIC_InitTypeStruct.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 3;
- NVIC_Init(&NVIC_InitTypeStruct);
- }
- void rcc_init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
- RCC_ADCCLKConfig(RCC_PCLK2_Div6);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
- }
- void gpio_init(void)
- {
- GPIO_InitTypeDef GPIO_InitTypeStruct;
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部時鐘的,用來測頻率的,
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitTypeStruct);
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //adc輸入引腳
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部中斷的io配置
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部中斷的io配置
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_8; //定時器1觸發ad轉換的輸出的那個口
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
- GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S3
- GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
原理圖.zip
(575.43 KB, 下載次數: 107)
2019-5-5 19:22 上傳
點擊文件名下載附件
接線圖 下載積分: 黑幣 -5
OSC.7z
(162.54 KB, 下載次數: 150)
2019-5-5 21:18 上傳
點擊文件名下載附件
源程序 下載積分: 黑幣 -5
|