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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

17年全國大學TI杯P題水情監測程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:366868 發表于 2018-7-7 15:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "15_INIT.h"
  2. #include "LCD12864.h"
  3. #include "UART_INIT.h"

  4. void main(void)
  5. {
  6.         unsigned int PreLength=0;
  7.         Delay_ms(10);                                 //等待上電穩定
  8.         ADC_Init();                                         //ADC初始化
  9.         UART_Init();                                //串口初始化
  10.         LCD12864_Init();                //LCD1602初始化
  11.         k = PreLength = 0;
  12.         while(1)
  13.         {
  14.                 ADC_Process();          //ADC數據采集并且處理
  15.                 //Delay_ms(1);
  16.                 if(b_flag==1)
  17.                  {
  18.                           b_flag = 0;
  19.                    UART_Send(0X55);                                           
  20.                          PreLength = GLengthLoh[0] * 256 + GLengthLoh[1]-5;
  21.              conversion(PreLength);
  22.                          
  23.                          if(PreLength <= 4500 )
  24.                          {
  25.                            LCD12864_WriteCMD(0x90 + 5);
  26.                                         LCD12864_WriteDAT(bai + 0x30);
  27.                                  LCD12864_WriteDAT(shi + 0x30);
  28.                                  LCD12864_WriteDAT(ge + 0x30);
  29.                                  //LCD12864_WriteDAT('.');
  30.                                  LCD12864_WriteDAT(part + 0x30);
  31.                          }
  32.                          else
  33.                          {
  34.                            LCD12864_WriteCMD(0x90 + 5);
  35.                                  //LCD12864_WriteDAT('-');
  36.                                  LCD12864_WriteDAT('-');
  37.                                  LCD12864_WriteDAT('-');
  38.                                  LCD12864_WriteDAT('-');
  39.                                  LCD12864_WriteDAT('-');
  40.                          }
  41.                          }
  42.         }
  43. }
  44. /***********************************************
  45. 函數名稱:LCD12864_Init
  46. 功    能:LCD12864初始化函數
  47. 入口參數:無
  48. 返 回 值:無       
  49. 備    注:并行模式
  50. ************************************************/
  51. void LCD12864_Init(void)  
  52. {
  53.           Delay_ms(100);              //上電延時100ms
  54.         LCD12864_WriteCMD(0x01);//清屏   
  55.         LCD12864_Display(LINE1+0," <水情檢測系統>" );                        //第一行顯示字符
  56.         LCD12864_Display(LINE2+0,"水位高度:    mm" );        //第二行顯示字符
  57.         LCD12864_Display(LINE3+0,"當前PH值:");                                        //第三行顯示字符
  58.         LCD12864_Display(LINE4+0,"電源電壓:     V");                        //第三行顯示字符       
  59. }
  60. /***********************************************
  61. 函數名稱:ADC_Process
  62. 功    能:ADC數據處理
  63. 入口參數:無
  64. 返 回 值:無       
  65. 備    注:采集32個數據進行求平均
  66. ************************************************/
  67. void ADC_Process(void)
  68. {
  69.         //從AD通道采集數據,并且進行累加
  70.         ADCSum1+=ADC_GetResult(ADC_CHANNEL2);
  71.         ADCSum2+=ADC_GetResult(ADC_CHANNEL3);
  72.         //計數器加1
  73.         ADCCnt++;
  74.         //如果累加到32個數據,則開始處理
  75.         if(ADCCnt==32)
  76.         {                       
  77.                 ADCCnt=0;
  78.                 //(ADCSum>>5)等價于(ADCSum/32)       
  79.                 //對32個數據取平均                       
  80.                 ADCSum1=ADCSum1>>5;       
  81.                 ADCSum2=ADCSum2>>5;       
  82.                 //ADC=(Vin/Vref)*1024       
  83.                 //根據ADC計算公式進行轉換
  84.                 ADCSum1=ADCSum1*VCC/1024;
  85.                 ADCSum2=ADCSum2*VCC/1024;
  86.                 //保存轉換結果并進行類型轉換,方便顯示
  87.                 ADCResult1=(uint)ADCSum1;
  88.                 ADCResult2=(uint)ADCSum2;
  89.                 //清除AD暫存變量
  90.                 ADCSum1=ADCSum2=0;
  91.                 //顯示測量結果
  92.                 //將要顯示的數值轉換成字符型
  93.                 //因為12864顯示的是字符,所以數值必須轉換,否則顯示亂碼
  94.                 App_FormatDec(DispBuf1,ADCResult1);
  95.                 App_FormatDec(DispBuf2,ADCResult2);
  96.                 //顯示該項菜單設置內容
  97.                 PH_Transfer[0] = DispBuf1[0];
  98.                 PH_Transfer[1] = DispBuf1[2];
  99.                 PH_Transfer[2] = DispBuf1[3];
  100.                 PH_Transfer[3] = DispBuf1[4];
  101.                
  102.                 PH = (PH_Transfer[0]-0x30)*1000 + (PH_Transfer[1]-0x30)*100 + (PH_Transfer[2]-0x30)*10 + (PH_Transfer[3]-0x30);
  103.                 PH1 = (42413-PH*10000) / 1773 + 1870;
  104.                
  105.                 PH_Transfer[0] = PH1 / 10000 % 10 + '0';
  106.                 PH_Transfer[1] = PH1 / 1000 % 10 + '0';
  107.                 PH_Transfer[2] = '.';
  108.                 PH_Transfer[3] = PH1 / 100 % 10 + '0';
  109.                 PH_Transfer[4] = PH1 / 10 % 10 + '0';
  110.                 PH_Transfer[5] = PH1 % 10 + '0';
  111.                
  112.                
  113.                 LCD12864_Display(LINE3+5,PH_Transfer);
  114.                 LCD12864_Display(LINE4+5,DispBuf2);
  115.         }       
  116. }
  117. /***********************************************
  118. 函數名稱:ADC_Init
  119. 功    能:ADC初始化函數
  120. 入口參數:無
  121. 返 回 值:無       
  122. 備    注:無
  123. ************************************************/
  124. void ADC_Init(void)
  125. {
  126.         P1ASF |=0x0C;              //P1.7口做為AD轉換通道
  127.         ADC_RES=0;                                  //ADC數據寄存器清零               
  128.         ADC_CONTR=ADC_POWER | ADC_SPEEDLL;                          
  129.                                                                                         //打開AD轉換器電源,設置轉換速率       
  130.         Delay_ms(2);                    //延時2ms,等待ADC上電穩定
  131. }
  132. /***********************************************
  133. 函數名稱:ADC_GetResult
  134. 功    能:獲取ADC轉換的結果
  135. 入口參數:ch:轉換的通道
  136. 返 回 值:unsigned int:轉換得到的數據       
  137. 備    注:使用查詢方式
  138. ************************************************/
  139. uint ADC_GetResult(uchar ch)
  140. {
  141.         uint ADC_Value;
  142.         ADC_CONTR =ADC_POWER | ADC_SPEEDLL| ch | ADC_START;        //啟動ADC
  143.     _nop_();                        //延時
  144.     _nop_();
  145.     _nop_();
  146.     _nop_();
  147.     while (!(ADC_CONTR & ADC_FLAG));//等待AD轉換完成
  148.     ADC_CONTR &= ~ADC_FLAG;         //清除轉換完成標記
  149.         ADC_Value=ADC_RES;                                                                //讀取ADC高八位
  150.         ADC_Value=(ADC_Value<<2)|ADC_RESL;//讀取ADC低兩位,并且數據合并
  151.     return ADC_Value;                         
  152. }
  153. /***********************************************
  154. 函數名稱:App_FormatDec
  155. 功    能:整型數據轉字符串函數
  156. 入口參數:value:整型數據
  157. 返 回 值:pstr:指向字符串的指針。       
  158. 備    注:無
  159. ************************************************/
  160. void  App_FormatDec (uchar *pstr, uint value)
  161. {
  162.     uchar                i;
  163.     uint                mult;
  164.     uint                nbr;

  165.     mult  = 1;
  166.         //因為這里要處理的value輸入格式為四位數,例如1234
  167.         //故初始讓mult=1000
  168.     for (i = 0; i < 3; i++)
  169.         {
  170.         mult *= 10;
  171.     }

  172.         i=0;
  173.     while (mult > 0)
  174.         {
  175.                 i++;
  176.                 //第一次整除,獲取最高位數據,例如1234/1000=1
  177.                 //其他位類推
  178.         nbr = value / mult;
  179.                 //如果得到的數據不是0
  180.         if (nbr != 0)
  181.             {
  182.                         //整型數據+'0',將自動轉換成字符數據,例如1+'0'將變成字符'1'
  183.                 *pstr = nbr + '0';
  184.         }
  185.             else
  186.                 {   
  187.                         //如果數據是0,則直接轉換成字符'0'           
  188.             *pstr = '0';
  189.                
  190.         }
  191.                 //移動指針,進行其他位數據處理
  192.         pstr++;
  193.                 if(i==1)
  194.                 {
  195.                         *pstr = '.';   //顯示小數點
  196.                         pstr++;               
  197.                 }
  198.                 value %= mult;
  199.                 mult  /= 10;
  200.     }
  201. }

  202. ……………………

  203. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
水情檢測.zip (59.76 KB, 下載次數: 13)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91人人澡人人爽 | www.久| 亚洲视频一区 | 中文字幕在线观看视频一区 | 精品国偷自产在线 | 国产成人免费视频网站高清观看视频 | 亚洲精品视频免费 | 欧美日韩免费 | 日韩在线一区二区三区 | 欧美日韩在线观看一区 | 国产精品性做久久久久久 | 草草草草视频 | 色综合久久天天综合网 | www日本在线观看 | 性做久久久久久免费观看欧美 | 天天躁人人躁人人躁狂躁 | 日韩精品免费一区二区在线观看 | 成人精品网 | 天堂一区在线 | 黄色亚洲 | 欧美色综合天天久久综合精品 | 国产区免费视频 | 欧美电影一区 | 日韩精品1区2区3区 爱爱综合网 | 精品一区二区久久久久久久网站 | 美日韩一区二区 | 91精品国产91久久久久久最新 | 一区视频在线免费观看 | 日韩欧美一区二区三区免费看 | 日韩中文在线观看 | 久久伊人久久 | 狠狠操天天操 | 91久久久久久久久久久 | 亚洲高清一区二区三区 | 亚洲午夜精品 | 成人欧美一区二区三区在线观看 | 激情av免费看| 美国一级毛片a | 久久久高清 | 国产日韩一区二区三区 | 国产福利91精品 |