自己寫了一個比較隨意的一個類似于一個示波器的項目 也有許多不對的地方請各位大佬進行點評 和指正 也請大家不要用于商業(yè)用途 僅供討論和交流 遵守
GPL3的開源協(xié)議 內含原理圖等信息
制作出來的實物圖如下:
IMG_20201023_171929.jpg (2.83 MB, 下載次數(shù): 44)
下載附件
2020-10-23 18:25 上傳
IMG_20201023_171920.jpg (3.16 MB, 下載次數(shù): 63)
下載附件
2020-10-23 18:25 上傳
所有資料51hei提供下載:
PWM測量ADC讀取.7z
(455.08 KB, 下載次數(shù): 24)
2020-10-23 23:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- #include "stm32f10x.h"
- #include "delay.h"
- #include "usart.h"
- #include "bsp_usart.h"
- #include "bsp_dma_mtm.h"
- #include "bsp_dma_mtp.h"
- #include "bsp_adc.h"
- #include "bsp_tim2.h"
- #include "LCD12864.h"
- #include "keypad.h"
- #include "BUZZER.h"
- #include "bsp_basic_tim.h"
- #include "bsp_AdvanceTim.h"
- #include "timer.h"
- #include "pingfan.h"
- extern const uint32_t aSRC_Const_Buffer[BUFFER_SIZE];
- extern uint32_t aDST_Buffer[BUFFER_SIZE];
- extern uint8_t DMA_USART_SendBuff[SENDBUFF_SIZE];
- // 局部變量,用于保存轉換計算后的電壓值
- float ADC_ConvertedValueLocal[NOFCHANEL];
- //uint8_t ADC_Value_bai,ADC_Value_shi,ADC_Value_ge;
- /////////////////////標志位///////////////////////////////////////////////
- unsigned char con_flag=0; //頁面標志
- unsigned int shan=0; //PRESS ENTER 閃爍
- unsigned int shan0=0;
- unsigned int shan1=0;
- unsigned int shan2=0;
- unsigned int shan3=0;
- unsigned int shan4=0;
- unsigned int shan5=0;
- unsigned int shan6=0;
- int move=0;
- /////////////////////設定值/////////////////////////////////////////////
- uint16_t year_set[4]={0};
- uint8_t month_set[2]={0};
- uint8_t day_set[2]={0};
- uint8_t hour_set[2]={0};
- uint8_t minute_set[2]={0};
- uint8_t second_set[2]={0};
- uint8_t rate_set[3]={0};
- /////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- char sz[]={"0123456789."}; //顯示數(shù)字數(shù)組
- ////////////////////////////////////////////////////////////////////
- u16 cout;
- unsigned char jm1_flag=0,jm2_flag=0,JG_1=2,JG_2=2,flag_1=0;
- // ADC1轉換的電壓值通過MDA方式傳到SRAM
- //extern __IO uint32_t ADC_ConvertedValue[NOFCHANEL];
- int zhongliang=234;
- // 局部變量,用于保存轉換計算后的電壓值
- //uint32_t ADC_ConvertedValueLocal[NOFCHANEL*2];
- //float ADC_ConvertedValueLocal[NOFCHANEL*2];
- extern unsigned char key_val;
- //////////////////////////////////////ADC1的電壓的全局變量 ////////////////////////////////////////
- // ADC累加求平均數(shù)
- float ADC_average_value=0;
- //float ADC_average_value_1=0;
- // ADC測得的峰峰值
- float ADC_VVP_Date=0;
- //峰峰值擴大1000倍存儲變量
- uint32_t ADC_VVP_Date1=0;
- //峰峰值數(shù)據(jù)拆分變量
- uint8_t ADC_VVP_Date2[9]={0};
- //ADC累加平均數(shù)擴大1000倍存儲變量
- uint32_t ADC_average_value1=0;
- //ADC累加平均數(shù)拆分變量
- uint8_t ADC_average_value2[9]={0};
- //ADC有效值
- float ADC_VPP_Valid=0;
- //ADC有效值的中間累加用的數(shù)組變量 累加計數(shù)用的變量
- float ADC_VPP_Valid_1[20]={0}; uint8_t ADC_i=0;
- ////ADC有效值放大1000倍變量
- uint32_t ADC_VPP_Valid1=0;
- ////ADC有效值放大1000倍變量
- uint8_t ADC_VPP_Valid2[9]={0};
- ///////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////ADC3的電壓的全局變量//////////////////////////////////////////////////
- //ADC3的CH11的浮點值
- float ADC_3_CH11_Value_Date=0;
- //ADC3的CH12的浮點值
- float ADC_3_CH12_Value_Date=0;
- //ADC3的CH11的浮點放大1000倍接收值
- uint32_t ADC_3_CH11_Value_Date1=0;
- //ADC3的CH11的放大值拆分數(shù)組
- uint8_t ADC_3_CH11_Value_Date2[9]={0};
- //ADC3的CH12的浮點放大1000倍接收值
- uint32_t ADC_3_CH12_Value_Date1=0;
- //ADC3的CH12的放大值拆分數(shù)組
- uint8_t ADC_3_CH12_Value_Date2[9]={0};
- /////////////////////////////////////////////////////////////////////////////////////////////
- //////////////////////頻率數(shù)值拆分變量/包含顯示符號/////////////////////////
- uint8_t TIM2_Capture_Freq_Date[9]={0}; //TIM2頻率拆分
- uint8_t TIM2_Capture_Cycle1_Date[9]={0}; //TIM2周期拆分
- uint8_t TIM5_Capture_Pulse_Date[9]={0}; //TIM5脈寬時間
- float TIM5_TIM2_Duty_Date=0; //TIM5采集的脈寬時間和TIM2測得的周期時間的比值的占空比存儲變量
- uint32_t TIM5_TIM2_Duty_Date1=0; //TIM5采集的脈寬時間和TIM2測得的周期時間的比值的占空比存儲變量擴大后的存儲變量
- uint8_t TIM5_TIM2_Duty_Date2[9]={0}; //占空比的數(shù)據(jù)拆分變量
- /////////////////////////////////////////////////////////////
- ////////////////////////////////////ADC求平均值函數(shù)////////////////////////////////////////////////
- void ADC_average(void)
- {
- uint16_t i;
- float ADC_average_sum=0;
- for(i=0;i<200;i++)
- {
- ADC_average_sum=ADC_average_sum+((float)ADC_ConvertedValue[i]/4096*3.3);
- }
- ADC_average_value=ADC_average_sum/200;
- }
- //////////////////////////////冒泡排序法選出最大的ADC電壓值函數(shù)//////////////////////////////////////////
- float ADC_average_Max(void)
- {
- // int sort[6]={1,2,3,2,3,4};
- //lenth改變數(shù)組的參考長度 排序代碼反復利用
- uint16_t lenth=200;
- uint16_t sort[200];
- uint16_t sun;
- for(sun=0;sun<lenth;sun++)
- {
- //sort[sun]=((float)ADC_ConvertedValue[sun]/4096*3.3);
- sort[sun]=ADC_ConvertedValue[sun];
- }
- uint16_t temp, i, j;//i是數(shù)組下標,j是比較次數(shù)
- //printf("請輸入6個數(shù)字:\n");
- // for (i = 0; i < 6; i++)
- // {
- // scanf("%d", &sort[i]);
- // }
- //printf("\n");
- for (j = 0; j < (lenth-1); j++)//6個數(shù)字總共排5趟 200個數(shù)字總共排199趟
- {
- for (i = 0; i < (lenth-1) - j; i++)//每一趟交換5-j次
- if (sort[i] > sort[i + 1])
- {
- temp = sort[i];
- sort[i] = sort[i + 1];
- sort[i + 1] = temp;//找出兩個數(shù)中最小的的交換
- }
- }
- //printf("排序之后的:\n");
- //for (i = 0; i < lenth; i++)
- //printf("%f \r\n", sort[i]);
- //printf("pause");
- // return sort[199];
-
- //ADC的VPP峰值賦值
- ADC_VVP_Date=((float)sort[199]/4096*3.3);
- //ADC的有效值中間變量數(shù)組賦值
- if(ADC_i<15)
- {
- ADC_VPP_Valid_1[ADC_i]=ADC_VVP_Date;
- ADC_i++;
- }
- else{ ADC_i=0;};//清0
-
- return ADC_VVP_Date;
- }
- ///////////////////////////////////累加20次峰峰值求平均穩(wěn)定的有效值計算函數(shù)////////////////////////////////////////
- void ADC_VPP_Valid_Date(void)
- {
- uint16_t i;
- for(i=0;i<15;i++)
- {
- // ADC_average_Max();
-
- ADC_VPP_Valid+=ADC_VPP_Valid_1[i];
- }
-
- // ADC_VPP_Valid=ADC_VPP_Valid/20/1.414;
- ADC_VPP_Valid=ADC_VPP_Valid/15/1.414;
- }
- ////////////////////////////////////////頻率數(shù)值拆分處理函數(shù)/////////////////////////////////////////////////
- void TIM2_Capture_Freq_Date_Manage(void)
- {
- //頻率TIM2_Capture_Freq數(shù)據(jù)拆分
- TIM2_Capture_Freq_Date[0]=TIM2_Capture_Freq/100000%10; //100KHz
- TIM2_Capture_Freq_Date[1]=TIM2_Capture_Freq/10000%10; //10KHz
- TIM2_Capture_Freq_Date[2]=TIM2_Capture_Freq/1000%10; //1KHz
- TIM2_Capture_Freq_Date[3]=TIM2_Capture_Freq/100%10; //100Hz
- TIM2_Capture_Freq_Date[4]=TIM2_Capture_Freq/10%10; //10Hz
- TIM2_Capture_Freq_Date[5]=TIM2_Capture_Freq%10; //10Hz
-
- // TIM2_Capture_Freq_Date[6]='H';
- // TIM2_Capture_Freq_Date[7]='z';
-
- //周期TIM2_Capture_Cycle1拆分
- TIM2_Capture_Cycle1_Date[0]=TIM2_Capture_Cycle1/1000000%10; //1000000us
- TIM2_Capture_Cycle1_Date[1]=TIM2_Capture_Cycle1/100000%10; //100000us
- TIM2_Capture_Cycle1_Date[2]=TIM2_Capture_Cycle1/10000%10; //10000us
- TIM2_Capture_Cycle1_Date[3]=TIM2_Capture_Cycle1/1000%10; //1000us
- TIM2_Capture_Cycle1_Date[4]=TIM2_Capture_Cycle1/100%10; //100us
- TIM2_Capture_Cycle1_Date[5]=TIM2_Capture_Cycle1/10%10; //10us
- TIM2_Capture_Cycle1_Date[6]=TIM2_Capture_Cycle1%10; //1us
-
- //TIM5脈寬時間temp拆分
- TIM5_Capture_Pulse_Date[0]=temp/1000000%10; //1000000us
- TIM5_Capture_Pulse_Date[1]=temp/100000%10; //100000us
- TIM5_Capture_Pulse_Date[2]=temp/10000%10; //10000us
- TIM5_Capture_Pulse_Date[3]=temp/1000%10; //1000us
- TIM5_Capture_Pulse_Date[4]=temp/100%10; //100us
- TIM5_Capture_Pulse_Date[5]=temp/10%10; //10us
- TIM5_Capture_Pulse_Date[6]=temp%10; //1us
-
- //TIM5采集的脈寬時間和TIM2測得的周期時間的數(shù)據(jù)拆分
- TIM5_TIM2_Duty_Date=(temp*100.0/TIM2_Capture_Cycle1)*10; //小數(shù)擴大100倍要整數(shù) 再取擴大10倍要小數(shù)點的后一位
- TIM5_TIM2_Duty_Date1=(uint32_t)TIM5_TIM2_Duty_Date/1;
-
- //TIM2和TIM5的占空比的數(shù)據(jù)拆分
- TIM5_TIM2_Duty_Date2[0]=TIM5_TIM2_Duty_Date1/1000000%10; //1000000us
- TIM5_TIM2_Duty_Date2[1]=TIM5_TIM2_Duty_Date1/100000%10; //100000us
- TIM5_TIM2_Duty_Date2[2]=TIM5_TIM2_Duty_Date1/10000%10; //10000us
- TIM5_TIM2_Duty_Date2[3]=TIM5_TIM2_Duty_Date1/1000%10; //1000us
- TIM5_TIM2_Duty_Date2[4]=TIM5_TIM2_Duty_Date1/100%10; //100us
- TIM5_TIM2_Duty_Date2[5]=TIM5_TIM2_Duty_Date1/10%10; //10us
- TIM5_TIM2_Duty_Date2[6]=TIM5_TIM2_Duty_Date1%10; //1us
-
- //ADC的峰峰值拆分
- // ADC_VVP_Date1=(uint32_t)((ADC_VVP_Date/1)*1000);
- // ADC_VVP_Date1=(uint32_t)ADC_VVP_Date*1000;//只是用了前面的整數(shù)進行擴大忽略了小數(shù)部分
- ADC_VVP_Date1=(uint32_t)(ADC_VVP_Date*1000); //先是擴大了1000小數(shù)沒有丟掉
- ADC_VVP_Date2[0]=ADC_VVP_Date1/100000%10; //100000mV
- ADC_VVP_Date2[1]=ADC_VVP_Date1/10000%10; //10000mV
- ADC_VVP_Date2[2]=ADC_VVP_Date1/1000%10; //1000mV
- ADC_VVP_Date2[3]=ADC_VVP_Date1/100%10; //100mV
- ADC_VVP_Date2[4]=ADC_VVP_Date1/10%10; //10mV
- ADC_VVP_Date2[5]=ADC_VVP_Date1%10; //1mV
-
-
- //ADC的累加平均值的數(shù)據(jù)拆分
- ADC_average_value1=(uint32_t)( ADC_average_value*1000);
- ADC_average_value2[0]=ADC_average_value1/1000%10; //1000mV
- ADC_average_value2[1]=ADC_average_value1/100%10; //100mV
- ADC_average_value2[2]=ADC_average_value1/10%10; //10mV
- ADC_average_value2[3]=ADC_average_value1%10; //1mV
-
- //ADC的有效值放大1000倍
- ADC_VPP_Valid1=(uint32_t)(ADC_VPP_Valid/1*1000);
- //ADC的有效值放大1000倍數(shù)據(jù)拆分
- ADC_VPP_Valid2[0]=ADC_VPP_Valid1/1000%10; //1000mV
- ADC_VPP_Valid2[1]=ADC_VPP_Valid1/100%10; //100mV
- ADC_VPP_Valid2[2]=ADC_VPP_Valid1/10%10; //10mV
- ADC_VPP_Valid2[3]=ADC_VPP_Valid1%10; //1mV
-
- //ADC3的CH11浮點擴大1000倍
- ADC_3_CH11_Value_Date1=(uint32_t)(ADC_3_CH11_Value_Date*1000);
- //ADC3的CH11浮點值放大1000倍數(shù)據(jù)拆分
- ADC_3_CH11_Value_Date2[0]=ADC_3_CH11_Value_Date1/1000%10; //1000 mV
- ADC_3_CH11_Value_Date2[1]=ADC_3_CH11_Value_Date1/100%10; //100 mV
- ADC_3_CH11_Value_Date2[2]=ADC_3_CH11_Value_Date1/10%10; //10 mV
- ADC_3_CH11_Value_Date2[3]=ADC_3_CH11_Value_Date1%10; //1 mV
-
- //ADC3的CH12浮點擴大1000倍
- ADC_3_CH12_Value_Date1=(uint32_t)(ADC_3_CH12_Value_Date*1000);
- //ADC3的CH12浮點值放大1000倍數(shù)據(jù)拆分
- ADC_3_CH12_Value_Date2[0]=ADC_3_CH12_Value_Date1/1000%10; //1000 mA
- ADC_3_CH12_Value_Date2[1]=ADC_3_CH12_Value_Date1/100%10; //100 mA
- ADC_3_CH12_Value_Date2[2]=ADC_3_CH12_Value_Date1/10%10; //10 mA
- ADC_3_CH12_Value_Date2[3]=ADC_3_CH12_Value_Date1%10; //1 mA
-
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////
- void key_por1()
- {
- //四個獨立按鍵的處理
- if(press_flag3==1) //確定鍵
- {
- if(press_flag3==1&&con_flag==0)
- LCD_Clear_Screen();
- con_flag=1;
-
- }
- else if(press_flag4==1) //返回鍵
- {
- if(press_flag4==1&&(con_flag==2||con_flag==3||con_flag==4||con_flag==5))
- {
- LCD_Clear_Screen();
- con_flag=1;
- printf("返回");
- }
-
- }
-
- else if(press_flag2==1) //右移鍵
- {
- //delay_ms(10);
- if(press_flag2==1&&con_flag==2)
- move++;
- if(move>6)move=0;
-
- printf("mover=%d",move);
- }
- else if(press_flag1==1) //左移鍵
- {
- if(press_flag1==1&&con_flag==2)
- move--;
- if(move<0)move=6;
-
- printf("movel=%d",move);
- }
-
- // 矩陣鍵盤中1 2 3 4 號鍵的處理
- if(key_val==1&&con_flag==1)
- {
- key_val=255;
- con_flag=2;
- LCD_Clear_Screen();
- }
- else if(key_val==2&&con_flag==1)
- {
- key_val=255;
- con_flag=3;
- LCD_Clear_Screen();
- }
- else if(key_val==3&&con_flag==1)
- {
- key_val=255;
- con_flag=4;
- LCD_Clear_Screen();
- }
- else if(key_val==4&&con_flag==1)
- {
- key_val=255;
- con_flag=5;
- LCD_Clear_Screen();
- }
- }
- /*
- void JM1(void)
- {
- //printf("jiemian");
- if(con_flag==0) //界面1:歡迎界面
- {
- if(shan==0)
- {
- put_char(2,1,"2021技能大賽");
- put_char(3,1,"Press Enter");
- // printf("啟動成功");
- }
- else if(shan==1)
- {
- put_char(2,1,"2021技能大賽");
- put_char(3,1," ");
- // printf("閃爍界面");
- }
- }
- else if(con_flag==1) //界面2:模式選擇界面
- {
- put_char(1,1,"1.系統(tǒng)設置");
- put_char(2,1,"2.手動模式");
- put_char(3,1,"3.自動模式");
- put_char(4,1,"4.數(shù)據(jù)回看");
- }
- else if(con_flag==2) //界面3:系統(tǒng)設置
- {
- put_char(1,2,"系統(tǒng)設置");
-
- put_char(2,0,"日期:");
- LCD_WriteData(' ');
-
- if(shan0==1) //年調整時閃爍
- {
- LCD_WriteData(sz[year_set[0]]);
- LCD_WriteData(sz[year_set[1]]);
- LCD_WriteData(sz[year_set[2]]);
- LCD_WriteData(sz[year_set[3]]);
- }
- else if(shan0==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
- LCD_WriteData('/');
-
- if(shan1==1) //月調整時閃爍
- {
- LCD_WriteData(sz[month_set[0]]);
- LCD_WriteData(sz[month_set[1]]);
- }
- else if(shan1==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
- LCD_WriteData('/');
-
- if(shan2==1) //日調整時閃爍
- {
- LCD_WriteData(sz[day_set[0]]);
- LCD_WriteData(sz[day_set[1]]);
- }
- else if(shan2==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
-
- put_char(3,0,"時間:");
- LCD_WriteData(' ');
- if(shan3==1)
- {
- LCD_WriteData(sz[hour_set[0]]);
- LCD_WriteData(sz[hour_set[1]]);
- }
- else if(shan3==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
-
- LCD_WriteData(':');
- if(shan4==1)
- {
- LCD_WriteData(sz[minute_set[0]]);
- LCD_WriteData(sz[minute_set[1]]);
- }
- else if(shan4==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
- LCD_WriteData(':');
- if(shan5==1)
- {
- LCD_WriteData(sz[second_set[0]]);
- LCD_WriteData(sz[second_set[1]]);
- }
- else if(shan5==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
- put_char(4,0,"費率:");
- LCD_WriteData(' ');
-
- if(shan6==1)
- {
- LCD_WriteData('0');
- LCD_WriteData('0');
- LCD_WriteData('0');
- }
- else if(shan6==0)
- {
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- LCD_WriteData(' ');
- }
- put_char(4,5,"元");
- LCD_WriteData('/');
- LCD_WriteData('g');
-
- }
- else if(con_flag==3) //界面4:手動模式
- {
- put_char(1,0,"手動");
- put_char(3,0,"重量");
- put_char(4,0,"收費");
- }
- else if(con_flag==4) //界面5:自動模式
- {
- put_char(1,0,"自動: ");
- put_char(3,0,"重量: ");
- put_char(4,0,"收費: ");
- }
- else if(con_flag==5) //界面6:數(shù)據(jù)回看
- {
- put_char(1,0,"回看: ");
- put_char(3,0,"重量: ");
- put_char(4,0,"費用: ");
- }
-
-
- }
- */
- void JM1(void)
- {
- //printf("jiemian");
- if(con_flag==0) //界面1:歡迎界面
- {
- if(shan==0)
- {
- put_char(2,1,"2021技能大賽");
- put_char(3,1,"Press Enter");
- // printf("啟動成功");
- }
- else if(shan==1)
- {
- put_char(2,1,"2021技能大賽");
- put_char(3,1," ");
- // printf("閃爍界面");
- }
- }
- else if(con_flag==1) //界面2:模式選擇界面
- {
- put_char(1,0,"1.時間測量 ");
- put_char(2,0,"2.電壓測量 ");
- put_char(3,0,"3.其他測量項 ");
- put_char(4,0,"4.其他參考項 ");
- }
- else if(con_flag==2) //界面3:系統(tǒng)設置
- {
- //顯示第一行的頻率數(shù)值
- put_char(1,0,"頻率: ");
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[0]]);
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[1]]);
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[2]]);
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[3]]);
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[4]]);
- LCD_WriteData(sz[TIM2_Capture_Freq_Date[5]]);
- LCD_WriteData('H');
- LCD_WriteData('z');
- // LCD_WriteData(sz[TIM2_Capture_Freq_Date[9]]);
- put_char(2,0,"周期:");
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[0]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[1]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[2]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[3]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[4]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[5]]);
- LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[6]]);
- LCD_WriteData('u');
- LCD_WriteData('s');
- put_char(3,0,"脈寬:");
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[0]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[1]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[2]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[3]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[4]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[5]]);
- LCD_WriteData(sz[TIM5_Capture_Pulse_Date[6]]);
- LCD_WriteData('u');
- LCD_WriteData('s');
- put_char(4,0,"占空比:");
- // LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[0]]);
- // LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[1]]);
- // LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[2]]);
- LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[3]]);
- LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[4]]);
- LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[5]]);
- //LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[6]]);
- LCD_WriteData('%');
- LCD_WriteData(' ');
-
-
-
-
- }
- else if(con_flag==3) //界面4:手動模式
- {
- put_char(1,0,"峰峰值:");
- // LCD_WriteData(sz[ADC_VVP_Date2[0]]);
- // LCD_WriteData(sz[ADC_VVP_Date2[1]]);
- LCD_WriteData(sz[ADC_VVP_Date2[2]]);
- LCD_WriteData('.');
- LCD_WriteData(sz[ADC_VVP_Date2[3]]);
- LCD_WriteData(sz[ADC_VVP_Date2[4]]);
- LCD_WriteData(sz[ADC_VVP_Date2[5]]);
- // LCD_WriteData('m');
- LCD_WriteData('V');
-
- put_char(2,0,"平均電壓:");
- LCD_WriteData(sz[ADC_average_value2[0]]);
- LCD_WriteData('.');
- LCD_WriteData(sz[ADC_average_value2[1]]);
- LCD_WriteData(sz[ADC_average_value2[2]]);
- LCD_WriteData(sz[ADC_average_value2[3]]);
- // LCD_WriteData('m');
- LCD_WriteData('V');
-
- put_char(3,0,"有效值:");
- LCD_WriteData(sz[ADC_VPP_Valid2[0]]);
- LCD_WriteData('.');
- LCD_WriteData(sz[ADC_VPP_Valid2[1]]);
- LCD_WriteData(sz[ADC_VPP_Valid2[2]]);
- LCD_WriteData(sz[ADC_VPP_Valid2[3]]);
- // LCD_WriteData('m');
- LCD_WriteData('V');
-
- put_char(4,0," ");
-
- // put_char(1,0,"手動");
- // put_char(2,0,"重量");
- // put_char(3,0,"收費");
- // put_char(4,0,"收費");
-
- }
- else if(con_flag==4) //界面5:自動模式
- {
- put_char(1,0,"電壓測量");
-
- put_char(2,0,"CH1:");
- LCD_WriteData(sz[ADC_3_CH11_Value_Date2[0]]);
- LCD_WriteData('.');
- LCD_WriteData(sz[ADC_3_CH11_Value_Date2[1]]);
- LCD_WriteData(sz[ADC_3_CH11_Value_Date2[2]]);
- LCD_WriteData(sz[ADC_3_CH11_Value_Date2[3]]);
- // LCD_WriteData('m');
- LCD_WriteData('V');
-
- put_char(3,0,"CH2:");
- LCD_WriteData(sz[ADC_3_CH12_Value_Date2[0]]);
- LCD_WriteData('.');
- LCD_WriteData(sz[ADC_3_CH12_Value_Date2[1]]);
- LCD_WriteData(sz[ADC_3_CH12_Value_Date2[2]]);
- LCD_WriteData(sz[ADC_3_CH12_Value_Date2[3]]);
- // LCD_WriteData('m');
- LCD_WriteData('V');
-
-
-
-
- // put_char(1,0,"自動: ");
- // put_char(3,0,"重量: ");
- // put_char(4,0,"收費: ");
- }
- else if(con_flag==5) //界面6:數(shù)據(jù)回看
- {
- put_char(1,0,"回看: ");
- put_char(3,0,"重量: ");
- put_char(4,0,"費用: ");
- }
- }
- int main(void)
- {
- delay_init();
- //ADC1初始化
- ADCx_Init();
- //ADC3初始化
- ADCx_3_Init();
- //串口初始化
- USART_Config();
- //TIM2初始化 捕獲PWM波
- TIM2_Cap_Init();
- //基本定時器初始化
- BASIC_TIM_Init();
- //按鍵初始化
- key_gpio();
- //LCD12864初始化
- gpio_12864_initout();
- LCD_Init();
- //高級定時器TIM1初始化 PWM捕獲
- ADVANCE_TIM_Init();
- //通用定時器5高電平脈寬捕獲
- TIM5_Cap_Signal_Init();
-
- while(1)
- {
- // ADC_Value_Classify();
- if(time6>=999)
- {
- time6=0;
- }
- if(time7>=500)
- {
- time7=0;
- }
- // TIM5_Cap_Signal_Manage();
- TIM2_Capture_Signal_Date();
- ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*3.3;
- // ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
- // ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*3.3;
- // ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*3.3;
- // ADC_ConvertedValueLocal[4] =(float) ADC_ConvertedValue[4]/4096*3.3;
- // ADC_ConvertedValueLocal[5] =(float) ADC_ConvertedValue[5]/4096*3.3;
- ADC_3_CH11_Value_Date=(float) ADC_3_ConvertedValue[0]/4096*3.3;
- ADC_3_CH12_Value_Date=(float) ADC_3_ConvertedValue[1]/4096*3.3;
-
- printf(" CH0 value = %f V \r\n",ADC_ConvertedValueLocal[0]);
- // printf("\r\n CH1 value = %f V \r\n",ADC_ConvertedValueLocal[1]);
- // printf("\r\n CH2 value = %f V \r\n",ADC_ConvertedValueLocal[2]);
- // printf("\r\n CH3 value = %f V \r\n",ADC_ConvertedValueLocal[3]);
- // printf("\r\n CH4 value = %f V \r\n",ADC_ConvertedValueLocal[4]);
- // printf("\r\n CH5 value = %f V \r\n",ADC_ConvertedValueLocal[5]);
-
- ADC_average(); //求電壓平均值
- ADC_average_Max(); //求電壓峰峰值
- ADC_VPP_Valid_Date(); //求電壓有效值
- ADC_average_Max(); //求電壓峰峰值
- printf(" 測得的峰峰值為 = %f V \r\n",ADC_VVP_Date);
- // printf(" 測得的峰峰值1為 = %d V \r\n",ADC_VVP_Date1); 屏幕數(shù)據(jù)值
- printf(" 測得的占空比值為 = %f \r\n",TIM5_TIM2_Duty_Date);
- printf(" 測得的平均值為 = %f V \r\n",ADC_average_value);
- printf(" 測得的有效值為 = %f V \r\n",ADC_VPP_Valid);
- printf(" 測得ADC3的CH12值為 = %f V \r\n",ADC_3_CH11_Value_Date);
- printf(" 測得ADC3的CH13值為 = %f V \r\n",ADC_3_CH12_Value_Date);
- Key_Event();
- key_scan();
- key_por1();
- JM1();
- TIM2_Capture_Freq_Date_Manage();
- TIM5_Cap_Signal_Manage();
- // ADC_Value_Classify();
- }
-
-
- }
復制代碼
|