久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3069|回復: 0
打印 上一主題 下一主題
收起左側

STM32的初步PWM和ADC采集測量方波 示波器源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:640600 發(fā)表于 2020-10-23 18:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
自己寫了一個比較隨意的一個類似于一個示波器的項目  也有許多不對的地方請各位大佬進行點評 和指正 也請大家不要用于商業(yè)用途 僅供討論和交流 遵守
GPL3的開源協(xié)議 內含原理圖等信息

制作出來的實物圖如下:


所有資料51hei提供下載:
PWM測量ADC讀取.7z (455.08 KB, 下載次數(shù): 24)

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "bsp_usart.h"
  5. #include "bsp_dma_mtm.h"
  6. #include "bsp_dma_mtp.h"
  7. #include "bsp_adc.h"
  8. #include "bsp_tim2.h"
  9. #include  "LCD12864.h"
  10. #include  "keypad.h"
  11. #include "BUZZER.h"
  12. #include "bsp_basic_tim.h"
  13. #include "bsp_AdvanceTim.h"
  14. #include "timer.h"
  15. #include "pingfan.h"

  16. extern const uint32_t aSRC_Const_Buffer[BUFFER_SIZE];
  17. extern uint32_t aDST_Buffer[BUFFER_SIZE];
  18. extern uint8_t DMA_USART_SendBuff[SENDBUFF_SIZE];

  19. // 局部變量,用于保存轉換計算后的電壓值         
  20. float ADC_ConvertedValueLocal[NOFCHANEL];  

  21. //uint8_t ADC_Value_bai,ADC_Value_shi,ADC_Value_ge;





  22. /////////////////////標志位///////////////////////////////////////////////
  23. unsigned char con_flag=0; //頁面標志
  24. unsigned int shan=0;                 //PRESS ENTER 閃爍
  25. unsigned int shan0=0;
  26. unsigned int shan1=0;
  27. unsigned int shan2=0;
  28. unsigned int shan3=0;
  29. unsigned int shan4=0;
  30. unsigned int shan5=0;
  31. unsigned int shan6=0;

  32. int move=0;

  33. /////////////////////設定值/////////////////////////////////////////////
  34. uint16_t year_set[4]={0};
  35. uint8_t  month_set[2]={0};
  36. uint8_t  day_set[2]={0};

  37. uint8_t  hour_set[2]={0};
  38. uint8_t  minute_set[2]={0};
  39. uint8_t  second_set[2]={0};

  40. uint8_t  rate_set[3]={0};

  41. /////////////////////////////////////////////////////////////////////


  42. ////////////////////////////////////////////////////////////////////

  43. char sz[]={"0123456789."}; //顯示數(shù)字數(shù)組

  44. ////////////////////////////////////////////////////////////////////

  45. u16 cout;
  46. unsigned char jm1_flag=0,jm2_flag=0,JG_1=2,JG_2=2,flag_1=0;
  47. // ADC1轉換的電壓值通過MDA方式傳到SRAM
  48. //extern __IO uint32_t ADC_ConvertedValue[NOFCHANEL];
  49. int zhongliang=234;
  50. // 局部變量,用于保存轉換計算后的電壓值         
  51. //uint32_t ADC_ConvertedValueLocal[NOFCHANEL*2];   
  52. //float ADC_ConvertedValueLocal[NOFCHANEL*2];   
  53. extern unsigned char        key_val;

  54. //////////////////////////////////////ADC1的電壓的全局變量 ////////////////////////////////////////
  55. //          ADC累加求平均數(shù)                                
  56. float ADC_average_value=0;
  57. //float ADC_average_value_1=0;
  58. //   ADC測得的峰峰值
  59. float ADC_VVP_Date=0;
  60. //峰峰值擴大1000倍存儲變量
  61. uint32_t ADC_VVP_Date1=0;
  62. //峰峰值數(shù)據(jù)拆分變量
  63. uint8_t ADC_VVP_Date2[9]={0};
  64. //ADC累加平均數(shù)擴大1000倍存儲變量
  65. uint32_t ADC_average_value1=0;
  66. //ADC累加平均數(shù)拆分變量
  67. uint8_t ADC_average_value2[9]={0};
  68. //ADC有效值
  69. float ADC_VPP_Valid=0;
  70. //ADC有效值的中間累加用的數(shù)組變量       累加計數(shù)用的變量
  71. float ADC_VPP_Valid_1[20]={0};                  uint8_t ADC_i=0;

  72. ////ADC有效值放大1000倍變量
  73. uint32_t ADC_VPP_Valid1=0;
  74. ////ADC有效值放大1000倍變量
  75. uint8_t ADC_VPP_Valid2[9]={0};

  76. ///////////////////////////////////////////////////////////////////////////////////////////



  77. /////////////////////////////ADC3的電壓的全局變量//////////////////////////////////////////////////
  78. //ADC3的CH11的浮點值
  79. float ADC_3_CH11_Value_Date=0;
  80. //ADC3的CH12的浮點值
  81. float ADC_3_CH12_Value_Date=0;
  82. //ADC3的CH11的浮點放大1000倍接收值
  83. uint32_t ADC_3_CH11_Value_Date1=0;
  84. //ADC3的CH11的放大值拆分數(shù)組
  85. uint8_t ADC_3_CH11_Value_Date2[9]={0};
  86. //ADC3的CH12的浮點放大1000倍接收值
  87. uint32_t ADC_3_CH12_Value_Date1=0;
  88. //ADC3的CH12的放大值拆分數(shù)組
  89. uint8_t ADC_3_CH12_Value_Date2[9]={0};


  90. /////////////////////////////////////////////////////////////////////////////////////////////


  91. //////////////////////頻率數(shù)值拆分變量/包含顯示符號/////////////////////////
  92. uint8_t TIM2_Capture_Freq_Date[9]={0}; //TIM2頻率拆分
  93. uint8_t  TIM2_Capture_Cycle1_Date[9]={0}; //TIM2周期拆分
  94. uint8_t  TIM5_Capture_Pulse_Date[9]={0}; //TIM5脈寬時間
  95. float TIM5_TIM2_Duty_Date=0;                        //TIM5采集的脈寬時間和TIM2測得的周期時間的比值的占空比存儲變量
  96. uint32_t TIM5_TIM2_Duty_Date1=0;                //TIM5采集的脈寬時間和TIM2測得的周期時間的比值的占空比存儲變量擴大后的存儲變量
  97. uint8_t TIM5_TIM2_Duty_Date2[9]={0};        //占空比的數(shù)據(jù)拆分變量


  98. /////////////////////////////////////////////////////////////



  99. ////////////////////////////////////ADC求平均值函數(shù)////////////////////////////////////////////////
  100. void ADC_average(void)
  101. {
  102.         uint16_t i;
  103.         float ADC_average_sum=0;

  104.         for(i=0;i<200;i++)
  105.         {
  106.                 ADC_average_sum=ADC_average_sum+((float)ADC_ConvertedValue[i]/4096*3.3);
  107.         }
  108.         ADC_average_value=ADC_average_sum/200;

  109. }

  110. //////////////////////////////冒泡排序法選出最大的ADC電壓值函數(shù)//////////////////////////////////////////
  111. float ADC_average_Max(void)
  112. {
  113. //    int sort[6]={1,2,3,2,3,4};
  114.         //lenth改變數(shù)組的參考長度 排序代碼反復利用
  115.         uint16_t lenth=200;
  116.         uint16_t sort[200];
  117.         uint16_t sun;
  118.         for(sun=0;sun<lenth;sun++)
  119.         {
  120.                 //sort[sun]=((float)ADC_ConvertedValue[sun]/4096*3.3);
  121.                 sort[sun]=ADC_ConvertedValue[sun];
  122.         }        
  123.     uint16_t temp, i, j;//i是數(shù)組下標,j是比較次數(shù)
  124.     //printf("請輸入6個數(shù)字:\n");

  125. //    for (i = 0; i < 6; i++)
  126. //    {
  127. //        scanf("%d", &sort[i]);
  128. //    }

  129.     //printf("\n");
  130.     for (j = 0; j < (lenth-1); j++)//6個數(shù)字總共排5趟  200個數(shù)字總共排199趟
  131.     {
  132.         for (i = 0; i < (lenth-1) - j; i++)//每一趟交換5-j次
  133.         if (sort[i] > sort[i + 1])
  134.         {
  135.             temp = sort[i];
  136.             sort[i] = sort[i + 1];
  137.             sort[i + 1] = temp;//找出兩個數(shù)中最小的的交換
  138.         }
  139.     }
  140.     //printf("排序之后的:\n");
  141.     //for (i = 0; i < lenth; i++)
  142.         //printf("%f \r\n", sort[i]);
  143.     //printf("pause");
  144. //    return sort[199];        
  145.         
  146.         //ADC的VPP峰值賦值
  147.         ADC_VVP_Date=((float)sort[199]/4096*3.3);        
  148.         //ADC的有效值中間變量數(shù)組賦值
  149.         if(ADC_i<15)
  150.         {
  151.                 ADC_VPP_Valid_1[ADC_i]=ADC_VVP_Date;
  152.                 ADC_i++;
  153.         }
  154.         else{ ADC_i=0;};//清0
  155.         
  156.         return ADC_VVP_Date;
  157. }

  158. ///////////////////////////////////累加20次峰峰值求平均穩(wěn)定的有效值計算函數(shù)////////////////////////////////////////
  159. void ADC_VPP_Valid_Date(void)
  160. {
  161.         uint16_t i;
  162.         for(i=0;i<15;i++)
  163.         {
  164. //                ADC_average_Max();
  165.                
  166.                 ADC_VPP_Valid+=ADC_VPP_Valid_1[i];               
  167.         }
  168.         
  169. //        ADC_VPP_Valid=ADC_VPP_Valid/20/1.414;        
  170.         ADC_VPP_Valid=ADC_VPP_Valid/15/1.414;        
  171. }



  172. ////////////////////////////////////////頻率數(shù)值拆分處理函數(shù)/////////////////////////////////////////////////
  173. void TIM2_Capture_Freq_Date_Manage(void)
  174. {
  175.         //頻率TIM2_Capture_Freq數(shù)據(jù)拆分
  176.         TIM2_Capture_Freq_Date[0]=TIM2_Capture_Freq/100000%10; //100KHz
  177.         TIM2_Capture_Freq_Date[1]=TIM2_Capture_Freq/10000%10; //10KHz
  178.         TIM2_Capture_Freq_Date[2]=TIM2_Capture_Freq/1000%10; //1KHz        
  179.         TIM2_Capture_Freq_Date[3]=TIM2_Capture_Freq/100%10; //100Hz
  180.         TIM2_Capture_Freq_Date[4]=TIM2_Capture_Freq/10%10; //10Hz
  181.         TIM2_Capture_Freq_Date[5]=TIM2_Capture_Freq%10; //10Hz
  182.         
  183. //        TIM2_Capture_Freq_Date[6]='H';
  184. //        TIM2_Capture_Freq_Date[7]='z';
  185.         
  186.         //周期TIM2_Capture_Cycle1拆分
  187.         TIM2_Capture_Cycle1_Date[0]=TIM2_Capture_Cycle1/1000000%10; //1000000us
  188.         TIM2_Capture_Cycle1_Date[1]=TIM2_Capture_Cycle1/100000%10; //100000us
  189.         TIM2_Capture_Cycle1_Date[2]=TIM2_Capture_Cycle1/10000%10; //10000us
  190.         TIM2_Capture_Cycle1_Date[3]=TIM2_Capture_Cycle1/1000%10; //1000us
  191.         TIM2_Capture_Cycle1_Date[4]=TIM2_Capture_Cycle1/100%10; //100us
  192.         TIM2_Capture_Cycle1_Date[5]=TIM2_Capture_Cycle1/10%10; //10us
  193.         TIM2_Capture_Cycle1_Date[6]=TIM2_Capture_Cycle1%10; //1us
  194.         
  195.         //TIM5脈寬時間temp拆分
  196.         TIM5_Capture_Pulse_Date[0]=temp/1000000%10; //1000000us
  197.         TIM5_Capture_Pulse_Date[1]=temp/100000%10; //100000us
  198.         TIM5_Capture_Pulse_Date[2]=temp/10000%10; //10000us
  199.         TIM5_Capture_Pulse_Date[3]=temp/1000%10; //1000us
  200.         TIM5_Capture_Pulse_Date[4]=temp/100%10; //100us
  201.         TIM5_Capture_Pulse_Date[5]=temp/10%10; //10us
  202.         TIM5_Capture_Pulse_Date[6]=temp%10; //1us
  203.         
  204.         //TIM5采集的脈寬時間和TIM2測得的周期時間的數(shù)據(jù)拆分
  205.         TIM5_TIM2_Duty_Date=(temp*100.0/TIM2_Capture_Cycle1)*10; //小數(shù)擴大100倍要整數(shù) 再取擴大10倍要小數(shù)點的后一位
  206.         TIM5_TIM2_Duty_Date1=(uint32_t)TIM5_TIM2_Duty_Date/1;
  207.         
  208.         //TIM2和TIM5的占空比的數(shù)據(jù)拆分
  209.         TIM5_TIM2_Duty_Date2[0]=TIM5_TIM2_Duty_Date1/1000000%10; //1000000us
  210.         TIM5_TIM2_Duty_Date2[1]=TIM5_TIM2_Duty_Date1/100000%10; //100000us
  211.         TIM5_TIM2_Duty_Date2[2]=TIM5_TIM2_Duty_Date1/10000%10; //10000us
  212.         TIM5_TIM2_Duty_Date2[3]=TIM5_TIM2_Duty_Date1/1000%10; //1000us
  213.         TIM5_TIM2_Duty_Date2[4]=TIM5_TIM2_Duty_Date1/100%10; //100us
  214.         TIM5_TIM2_Duty_Date2[5]=TIM5_TIM2_Duty_Date1/10%10; //10us
  215.         TIM5_TIM2_Duty_Date2[6]=TIM5_TIM2_Duty_Date1%10; //1us
  216.                
  217.         //ADC的峰峰值拆分
  218. //        ADC_VVP_Date1=(uint32_t)((ADC_VVP_Date/1)*1000);
  219. //        ADC_VVP_Date1=(uint32_t)ADC_VVP_Date*1000;//只是用了前面的整數(shù)進行擴大忽略了小數(shù)部分
  220.         ADC_VVP_Date1=(uint32_t)(ADC_VVP_Date*1000); //先是擴大了1000小數(shù)沒有丟掉        
  221.         ADC_VVP_Date2[0]=ADC_VVP_Date1/100000%10; //100000mV
  222.         ADC_VVP_Date2[1]=ADC_VVP_Date1/10000%10; //10000mV
  223.         ADC_VVP_Date2[2]=ADC_VVP_Date1/1000%10; //1000mV
  224.         ADC_VVP_Date2[3]=ADC_VVP_Date1/100%10; //100mV
  225.         ADC_VVP_Date2[4]=ADC_VVP_Date1/10%10; //10mV
  226.         ADC_VVP_Date2[5]=ADC_VVP_Date1%10; //1mV
  227.         
  228.         
  229.         //ADC的累加平均值的數(shù)據(jù)拆分
  230.         ADC_average_value1=(uint32_t)( ADC_average_value*1000);
  231.         ADC_average_value2[0]=ADC_average_value1/1000%10; //1000mV
  232.         ADC_average_value2[1]=ADC_average_value1/100%10; //100mV
  233.         ADC_average_value2[2]=ADC_average_value1/10%10; //10mV
  234.         ADC_average_value2[3]=ADC_average_value1%10;   //1mV
  235.         
  236.         //ADC的有效值放大1000倍
  237.         ADC_VPP_Valid1=(uint32_t)(ADC_VPP_Valid/1*1000);
  238.         //ADC的有效值放大1000倍數(shù)據(jù)拆分
  239.         ADC_VPP_Valid2[0]=ADC_VPP_Valid1/1000%10;  //1000mV
  240.         ADC_VPP_Valid2[1]=ADC_VPP_Valid1/100%10;  //100mV
  241.         ADC_VPP_Valid2[2]=ADC_VPP_Valid1/10%10;  //10mV
  242.         ADC_VPP_Valid2[3]=ADC_VPP_Valid1%10;    //1mV
  243.                
  244.         //ADC3的CH11浮點擴大1000倍        
  245.         ADC_3_CH11_Value_Date1=(uint32_t)(ADC_3_CH11_Value_Date*1000);
  246.         //ADC3的CH11浮點值放大1000倍數(shù)據(jù)拆分
  247.         ADC_3_CH11_Value_Date2[0]=ADC_3_CH11_Value_Date1/1000%10; //1000 mV
  248.         ADC_3_CH11_Value_Date2[1]=ADC_3_CH11_Value_Date1/100%10; //100 mV
  249.         ADC_3_CH11_Value_Date2[2]=ADC_3_CH11_Value_Date1/10%10; //10 mV
  250.         ADC_3_CH11_Value_Date2[3]=ADC_3_CH11_Value_Date1%10;         //1 mV
  251.         
  252.         //ADC3的CH12浮點擴大1000倍        
  253.         ADC_3_CH12_Value_Date1=(uint32_t)(ADC_3_CH12_Value_Date*1000);
  254.         //ADC3的CH12浮點值放大1000倍數(shù)據(jù)拆分
  255.         ADC_3_CH12_Value_Date2[0]=ADC_3_CH12_Value_Date1/1000%10; //1000 mA
  256.         ADC_3_CH12_Value_Date2[1]=ADC_3_CH12_Value_Date1/100%10; //100 mA
  257.         ADC_3_CH12_Value_Date2[2]=ADC_3_CH12_Value_Date1/10%10; //10 mA
  258.         ADC_3_CH12_Value_Date2[3]=ADC_3_CH12_Value_Date1%10; //1 mA
  259.         
  260. }



  261. ///////////////////////////////////////////////////////////////////////////////////////////////
  262. void key_por1()
  263. {
  264.                 //四個獨立按鍵的處理
  265.          if(press_flag3==1)                      //確定鍵
  266.                 {
  267.                         if(press_flag3==1&&con_flag==0)
  268.                                 LCD_Clear_Screen();
  269.                                 con_flag=1;
  270.                
  271.                 }
  272.                 else if(press_flag4==1)                   //返回鍵
  273.                 {
  274.                         if(press_flag4==1&&(con_flag==2||con_flag==3||con_flag==4||con_flag==5))
  275.                         {
  276.                                 LCD_Clear_Screen();
  277.                                 con_flag=1;
  278.                                 printf("返回");
  279.                         }
  280.                
  281.                 }
  282.                
  283.                         else if(press_flag2==1)                   //右移鍵
  284.                 {
  285.                         //delay_ms(10);
  286.                         if(press_flag2==1&&con_flag==2)
  287.                                 move++;
  288.                         if(move>6)move=0;
  289.                                 
  290.                         printf("mover=%d",move);
  291.                 }
  292.                         else if(press_flag1==1)                  //左移鍵
  293.                 {
  294.                         if(press_flag1==1&&con_flag==2)
  295.                                 move--;
  296.                         if(move<0)move=6;
  297.                                 
  298.                         printf("movel=%d",move);
  299.                 }
  300.                
  301.                 // 矩陣鍵盤中1 2 3 4 號鍵的處理
  302.                 if(key_val==1&&con_flag==1)
  303.                 {
  304.                          key_val=255;
  305.                    con_flag=2;
  306.                         LCD_Clear_Screen();
  307.                 }
  308.                 else if(key_val==2&&con_flag==1)
  309.                 {
  310.                          key_val=255;
  311.                         con_flag=3;
  312.                         LCD_Clear_Screen();
  313.                 }
  314.                 else if(key_val==3&&con_flag==1)
  315.                 {
  316.                    key_val=255;
  317.                         con_flag=4;
  318.                         LCD_Clear_Screen();
  319.                 }
  320.                 else if(key_val==4&&con_flag==1)
  321.                 {
  322.                    key_val=255;
  323.                         con_flag=5;
  324.                         LCD_Clear_Screen();
  325.                 }
  326. }

  327. /*
  328. void JM1(void)
  329. {
  330.                 //printf("jiemian");
  331.          if(con_flag==0) //界面1:歡迎界面
  332.          {
  333.                         if(shan==0)
  334.                         {
  335.                                 put_char(2,1,"2021技能大賽");
  336.                                 put_char(3,1,"Press Enter");
  337.                         //        printf("啟動成功");
  338.                         }
  339.                         else if(shan==1)
  340.                         {
  341.                                 put_char(2,1,"2021技能大賽");
  342.                                 put_char(3,1,"           ");
  343.                         //        printf("閃爍界面");
  344.                         }
  345.          }
  346.          else if(con_flag==1)  //界面2:模式選擇界面
  347.          {
  348.                         put_char(1,1,"1.系統(tǒng)設置");
  349.                         put_char(2,1,"2.手動模式");
  350.                         put_char(3,1,"3.自動模式");
  351.                         put_char(4,1,"4.數(shù)據(jù)回看");
  352.          }
  353.          else if(con_flag==2)  //界面3:系統(tǒng)設置
  354.          {
  355.                  put_char(1,2,"系統(tǒng)設置");
  356.                  
  357.                  put_char(2,0,"日期:");
  358.                  LCD_WriteData(' ');
  359.                  
  360.                  if(shan0==1)                        //年調整時閃爍
  361.                  {
  362.                  LCD_WriteData(sz[year_set[0]]);
  363.                  LCD_WriteData(sz[year_set[1]]);
  364.                  LCD_WriteData(sz[year_set[2]]);
  365.                  LCD_WriteData(sz[year_set[3]]);
  366.                  }
  367.                 else if(shan0==0)
  368.                  {
  369.                  LCD_WriteData(' ');
  370.                  LCD_WriteData(' ');
  371.                  LCD_WriteData(' ');
  372.                  LCD_WriteData(' ');
  373.                  }
  374.                   LCD_WriteData('/');
  375.                  
  376.                  if(shan1==1)                      //月調整時閃爍
  377.                  {
  378.                  LCD_WriteData(sz[month_set[0]]);
  379.                  LCD_WriteData(sz[month_set[1]]);
  380.                  }
  381.                 else if(shan1==0)
  382.                  {
  383.                  LCD_WriteData(' ');
  384.                  LCD_WriteData(' ');
  385.                  }
  386.                   LCD_WriteData('/');
  387.                  
  388.                  if(shan2==1)                      //日調整時閃爍
  389.                  {
  390.                  LCD_WriteData(sz[day_set[0]]);
  391.                  LCD_WriteData(sz[day_set[1]]);
  392.                  }
  393.                 else if(shan2==0)
  394.                  {
  395.                  LCD_WriteData(' ');
  396.                  LCD_WriteData(' ');
  397.                  }
  398.                  
  399.                  put_char(3,0,"時間:");
  400.                  LCD_WriteData(' ');
  401.                  if(shan3==1)
  402.                  {
  403.                          LCD_WriteData(sz[hour_set[0]]);
  404.                    LCD_WriteData(sz[hour_set[1]]);
  405.                  }
  406.                  else if(shan3==0)
  407.                  {
  408.                  LCD_WriteData(' ');
  409.                  LCD_WriteData(' ');
  410.                  }
  411.                  
  412.                  LCD_WriteData(':');
  413.                  if(shan4==1)
  414.                  {
  415.                          LCD_WriteData(sz[minute_set[0]]);
  416.                    LCD_WriteData(sz[minute_set[1]]);
  417.                  }
  418.                  else if(shan4==0)
  419.                  {
  420.                  LCD_WriteData(' ');
  421.                  LCD_WriteData(' ');
  422.                  }
  423.                  LCD_WriteData(':');
  424.                  if(shan5==1)
  425.                  {
  426.                          LCD_WriteData(sz[second_set[0]]);
  427.                    LCD_WriteData(sz[second_set[1]]);        
  428.                  }
  429.                   else if(shan5==0)
  430.                  {
  431.                         LCD_WriteData(' ');
  432.                         LCD_WriteData(' ');
  433.                  }
  434.                   put_char(4,0,"費率:");
  435.                   LCD_WriteData(' ');
  436.                         
  437.                  if(shan6==1)
  438.                  {
  439.                          LCD_WriteData('0');
  440.                          LCD_WriteData('0');
  441.                          LCD_WriteData('0');
  442.                  }
  443.                  else if(shan6==0)
  444.                  {
  445.                   LCD_WriteData(' ');
  446.                   LCD_WriteData(' ');
  447.                   LCD_WriteData(' ');
  448.                  }
  449.                   put_char(4,5,"元");
  450.                   LCD_WriteData('/');
  451.                   LCD_WriteData('g');
  452.                                  
  453.          }
  454.                  else if(con_flag==3)  //界面4:手動模式
  455.          {
  456.                         put_char(1,0,"手動");
  457.                         put_char(3,0,"重量");
  458.                 put_char(4,0,"收費");
  459.          }
  460.                  else if(con_flag==4)  //界面5:自動模式
  461.          {
  462.                         put_char(1,0,"自動: ");
  463.                         put_char(3,0,"重量: ");
  464.                 put_char(4,0,"收費: ");
  465.          }
  466.                  else if(con_flag==5)        //界面6:數(shù)據(jù)回看
  467.          {
  468.                         put_char(1,0,"回看: ");
  469.                         put_char(3,0,"重量: ");
  470.                         put_char(4,0,"費用: ");
  471.          }


  472.          
  473. }
  474. */

  475. void JM1(void)
  476. {
  477.                 //printf("jiemian");
  478.          if(con_flag==0) //界面1:歡迎界面
  479.          {
  480.                         if(shan==0)
  481.                         {
  482.                                 put_char(2,1,"2021技能大賽");
  483.                                 put_char(3,1,"Press Enter");
  484.                         //        printf("啟動成功");
  485.                         }
  486.                         else if(shan==1)
  487.                         {
  488.                                 put_char(2,1,"2021技能大賽");
  489.                                 put_char(3,1,"           ");
  490.                         //        printf("閃爍界面");
  491.                         }
  492.          }
  493.          else if(con_flag==1)  //界面2:模式選擇界面
  494.          {
  495.                         put_char(1,0,"1.時間測量    ");
  496.                         put_char(2,0,"2.電壓測量    ");
  497.                         put_char(3,0,"3.其他測量項  ");
  498.                         put_char(4,0,"4.其他參考項  ");
  499.          }
  500.          else if(con_flag==2)  //界面3:系統(tǒng)設置
  501.          {
  502.                  //顯示第一行的頻率數(shù)值
  503.                  put_char(1,0,"頻率: ");
  504.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[0]]);
  505.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[1]]);
  506.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[2]]);
  507.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[3]]);
  508.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[4]]);
  509.                          LCD_WriteData(sz[TIM2_Capture_Freq_Date[5]]);
  510.                          LCD_WriteData('H');
  511.                          LCD_WriteData('z');
  512. //                         LCD_WriteData(sz[TIM2_Capture_Freq_Date[9]]);                  
  513.                  put_char(2,0,"周期:");
  514.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[0]]);
  515.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[1]]);
  516.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[2]]);
  517.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[3]]);
  518.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[4]]);
  519.                          LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[5]]);
  520.                           LCD_WriteData(sz[TIM2_Capture_Cycle1_Date[6]]);
  521.                          LCD_WriteData('u');
  522.                          LCD_WriteData('s');
  523.                  put_char(3,0,"脈寬:");        
  524.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[0]]);
  525.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[1]]);
  526.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[2]]);
  527.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[3]]);
  528.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[4]]);
  529.                          LCD_WriteData(sz[TIM5_Capture_Pulse_Date[5]]);
  530.                           LCD_WriteData(sz[TIM5_Capture_Pulse_Date[6]]);
  531.                          LCD_WriteData('u');
  532.                          LCD_WriteData('s');
  533.                  put_char(4,0,"占空比:");                        
  534.                         //                         LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[0]]);
  535.                         //                         LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[1]]);
  536.                         //                         LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[2]]);
  537.                          LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[3]]);
  538.                          LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[4]]);
  539.                          LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[5]]);
  540.                           //LCD_WriteData(sz[TIM5_TIM2_Duty_Date2[6]]);
  541.                          LCD_WriteData('%');
  542.                          LCD_WriteData(' ');
  543.                         
  544.                         
  545.                                                                   

  546.                   
  547.          }
  548.          else if(con_flag==3)  //界面4:手動模式
  549.          {
  550.                         put_char(1,0,"峰峰值:");
  551. //                                 LCD_WriteData(sz[ADC_VVP_Date2[0]]);
  552. //                                 LCD_WriteData(sz[ADC_VVP_Date2[1]]);
  553.                                  LCD_WriteData(sz[ADC_VVP_Date2[2]]);
  554.                                  LCD_WriteData('.');
  555.                                  LCD_WriteData(sz[ADC_VVP_Date2[3]]);
  556.                                  LCD_WriteData(sz[ADC_VVP_Date2[4]]);
  557.                                  LCD_WriteData(sz[ADC_VVP_Date2[5]]);
  558. //                                 LCD_WriteData('m');
  559.                                  LCD_WriteData('V');
  560.                  
  561.                         put_char(2,0,"平均電壓:");
  562.                                  LCD_WriteData(sz[ADC_average_value2[0]]);
  563.                                  LCD_WriteData('.');
  564.                                  LCD_WriteData(sz[ADC_average_value2[1]]);
  565.                                  LCD_WriteData(sz[ADC_average_value2[2]]);
  566.                                  LCD_WriteData(sz[ADC_average_value2[3]]);
  567. //                                 LCD_WriteData('m');
  568.                                  LCD_WriteData('V');
  569.                  
  570.                         put_char(3,0,"有效值:");
  571.                                  LCD_WriteData(sz[ADC_VPP_Valid2[0]]);
  572.                                  LCD_WriteData('.');
  573.                                  LCD_WriteData(sz[ADC_VPP_Valid2[1]]);
  574.                                  LCD_WriteData(sz[ADC_VPP_Valid2[2]]);
  575.                                  LCD_WriteData(sz[ADC_VPP_Valid2[3]]);
  576. //                                 LCD_WriteData('m');
  577.                                  LCD_WriteData('V');
  578.                                                 
  579.                         put_char(4,0," ");
  580.                                  
  581. //                        put_char(1,0,"手動");
  582. //                        put_char(2,0,"重量");
  583. //                        put_char(3,0,"收費");
  584. //                        put_char(4,0,"收費");
  585.                  
  586.          }
  587.                  else if(con_flag==4)  //界面5:自動模式
  588.          {
  589.                         put_char(1,0,"電壓測量");
  590.                                                 
  591.                         put_char(2,0,"CH1:");
  592.                                  LCD_WriteData(sz[ADC_3_CH11_Value_Date2[0]]);
  593.                                  LCD_WriteData('.');
  594.                                  LCD_WriteData(sz[ADC_3_CH11_Value_Date2[1]]);
  595.                                  LCD_WriteData(sz[ADC_3_CH11_Value_Date2[2]]);
  596.                                  LCD_WriteData(sz[ADC_3_CH11_Value_Date2[3]]);
  597. //                                 LCD_WriteData('m');
  598.                                  LCD_WriteData('V');
  599.                  
  600.                         put_char(3,0,"CH2:");
  601.                                   LCD_WriteData(sz[ADC_3_CH12_Value_Date2[0]]);
  602.                                  LCD_WriteData('.');
  603.                                  LCD_WriteData(sz[ADC_3_CH12_Value_Date2[1]]);
  604.                                  LCD_WriteData(sz[ADC_3_CH12_Value_Date2[2]]);
  605.                                  LCD_WriteData(sz[ADC_3_CH12_Value_Date2[3]]);
  606. //                                 LCD_WriteData('m');
  607.                                  LCD_WriteData('V');
  608.                  
  609.                  
  610.                  
  611.                  
  612. //                        put_char(1,0,"自動: ");
  613. //                        put_char(3,0,"重量: ");
  614. //                        put_char(4,0,"收費: ");
  615.          }
  616.                  else if(con_flag==5)        //界面6:數(shù)據(jù)回看
  617.          {
  618.                         put_char(1,0,"回看: ");
  619.                         put_char(3,0,"重量: ");
  620.                         put_char(4,0,"費用: ");
  621.          }

  622. }



  623. int main(void)
  624. {
  625.         delay_init();
  626.         //ADC1初始化
  627.         ADCx_Init();
  628.         //ADC3初始化
  629.         ADCx_3_Init();
  630.         //串口初始化
  631.         USART_Config();
  632.         //TIM2初始化 捕獲PWM波
  633.         TIM2_Cap_Init();
  634.         //基本定時器初始化
  635.          BASIC_TIM_Init();
  636.         //按鍵初始化
  637.         key_gpio();
  638.         //LCD12864初始化
  639.         gpio_12864_initout();
  640.         LCD_Init();
  641.         //高級定時器TIM1初始化 PWM捕獲
  642.         ADVANCE_TIM_Init();
  643.         //通用定時器5高電平脈寬捕獲
  644.         TIM5_Cap_Signal_Init();
  645.         
  646.         while(1)
  647.         {
  648. //                ADC_Value_Classify();
  649.                 if(time6>=999)
  650.                 {
  651.                         time6=0;
  652.                 }
  653.                 if(time7>=500)
  654.                 {
  655.                         time7=0;
  656.                 }
  657. //                TIM5_Cap_Signal_Manage();
  658.                 TIM2_Capture_Signal_Date();
  659.                 ADC_ConvertedValueLocal[0] =(float) ADC_ConvertedValue[0]/4096*3.3;
  660. //                ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*3.3;
  661. //                ADC_ConvertedValueLocal[2] =(float) ADC_ConvertedValue[2]/4096*3.3;
  662. //                ADC_ConvertedValueLocal[3] =(float) ADC_ConvertedValue[3]/4096*3.3;
  663. //                ADC_ConvertedValueLocal[4] =(float) ADC_ConvertedValue[4]/4096*3.3;
  664. //                ADC_ConvertedValueLocal[5] =(float) ADC_ConvertedValue[5]/4096*3.3;

  665.                 ADC_3_CH11_Value_Date=(float) ADC_3_ConvertedValue[0]/4096*3.3;
  666.                 ADC_3_CH12_Value_Date=(float) ADC_3_ConvertedValue[1]/4096*3.3;
  667.                
  668.                 printf(" CH0 value = %f V \r\n",ADC_ConvertedValueLocal[0]);
  669. //                printf("\r\n CH1 value = %f V \r\n",ADC_ConvertedValueLocal[1]);
  670. //                printf("\r\n CH2 value = %f V \r\n",ADC_ConvertedValueLocal[2]);
  671. //                printf("\r\n CH3 value = %f V \r\n",ADC_ConvertedValueLocal[3]);
  672. //                printf("\r\n CH4 value = %f V \r\n",ADC_ConvertedValueLocal[4]);
  673. //                printf("\r\n CH5 value = %f V \r\n",ADC_ConvertedValueLocal[5]);
  674.                
  675.                 ADC_average(); //求電壓平均值
  676.                 ADC_average_Max(); //求電壓峰峰值
  677.                 ADC_VPP_Valid_Date(); //求電壓有效值
  678.                 ADC_average_Max(); //求電壓峰峰值
  679.                 printf(" 測得的峰峰值為 = %f V \r\n",ADC_VVP_Date);
  680. //                printf(" 測得的峰峰值1為 = %d V \r\n",ADC_VVP_Date1);  屏幕數(shù)據(jù)值
  681.                 printf(" 測得的占空比值為 = %f  \r\n",TIM5_TIM2_Duty_Date);               
  682.                 printf(" 測得的平均值為 = %f V \r\n",ADC_average_value);
  683.                 printf(" 測得的有效值為 = %f V \r\n",ADC_VPP_Valid);
  684.                 printf(" 測得ADC3的CH12值為 = %f V \r\n",ADC_3_CH11_Value_Date);
  685.                 printf(" 測得ADC3的CH13值為 = %f V \r\n",ADC_3_CH12_Value_Date);
  686.                 Key_Event();
  687.                 key_scan();
  688.                 key_por1();
  689.                 JM1();
  690.                 TIM2_Capture_Freq_Date_Manage();
  691.                 TIM5_Cap_Signal_Manage();
  692. //                ADC_Value_Classify();
  693.         }
  694.         
  695.         
  696. }
復制代碼

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品久久久久久 | 91久久久久久久 | 成人精品鲁一区一区二区 | 日本久久久久久 | 午夜精品一区二区三区在线视频 | 亚洲午夜三级 | 精品综合网 | 一级毛片免费看 | 99re热精品视频 | 一级大片网站 | 久久大 | 狠狠婷婷综合久久久久久妖精 | 欧美日韩成人 | 久久精品99久久 | 日韩国产精品一区二区三区 | 久久精品免费看 | 91色在线视频 | 在线欧美视频 | 亚洲成人国产综合 | 免费久草 | 精品一区二区免费视频 | 亚洲精品福利视频 | 国产不卡在线观看 | 国产精品国产成人国产三级 | 欧美中文字幕一区 | 超碰97人人人人人蜜桃 | 亚洲欧美在线观看 | 四虎影院在线免费观看 | 亚洲精品成人网 | 99久久久99久久国产片鸭王 | 最新国产精品精品视频 | 亚洲性综合网 | 新疆少妇videos高潮 | 亚洲一区二区电影在线观看 | 国产精品一区二区av | 免费一级片 | 天天干天天爱天天操 | 黄a在线播放| 一级免费毛片 | 精品免费视频一区二区 | 欧美久久久久 |