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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1866|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

17年全國大學(xué)TI杯P題水情監(jiān)測程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:366868 發(fā)表于 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);                                 //等待上電穩(wěn)定
  8.         ADC_Init();                                         //ADC初始化
  9.         UART_Init();                                //串口初始化
  10.         LCD12864_Init();                //LCD1602初始化
  11.         k = PreLength = 0;
  12.         while(1)
  13.         {
  14.                 ADC_Process();          //ADC數(shù)據(jù)采集并且處理
  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. 函數(shù)名稱:LCD12864_Init
  46. 功    能:LCD12864初始化函數(shù)
  47. 入口參數(shù):無
  48. 返 回 值:無       
  49. 備    注:并行模式
  50. ************************************************/
  51. void LCD12864_Init(void)  
  52. {
  53.           Delay_ms(100);              //上電延時100ms
  54.         LCD12864_WriteCMD(0x01);//清屏   
  55.         LCD12864_Display(LINE1+0," <水情檢測系統(tǒng)>" );                        //第一行顯示字符
  56.         LCD12864_Display(LINE2+0,"水位高度:    mm" );        //第二行顯示字符
  57.         LCD12864_Display(LINE3+0,"當(dāng)前PH值:");                                        //第三行顯示字符
  58.         LCD12864_Display(LINE4+0,"電源電壓:     V");                        //第三行顯示字符       
  59. }
  60. /***********************************************
  61. 函數(shù)名稱:ADC_Process
  62. 功    能:ADC數(shù)據(jù)處理
  63. 入口參數(shù):無
  64. 返 回 值:無       
  65. 備    注:采集32個數(shù)據(jù)進(jìn)行求平均
  66. ************************************************/
  67. void ADC_Process(void)
  68. {
  69.         //從AD通道采集數(shù)據(jù),并且進(jìn)行累加
  70.         ADCSum1+=ADC_GetResult(ADC_CHANNEL2);
  71.         ADCSum2+=ADC_GetResult(ADC_CHANNEL3);
  72.         //計數(shù)器加1
  73.         ADCCnt++;
  74.         //如果累加到32個數(shù)據(jù),則開始處理
  75.         if(ADCCnt==32)
  76.         {                       
  77.                 ADCCnt=0;
  78.                 //(ADCSum>>5)等價于(ADCSum/32)       
  79.                 //對32個數(shù)據(jù)取平均                       
  80.                 ADCSum1=ADCSum1>>5;       
  81.                 ADCSum2=ADCSum2>>5;       
  82.                 //ADC=(Vin/Vref)*1024       
  83.                 //根據(jù)ADC計算公式進(jìn)行轉(zhuǎn)換
  84.                 ADCSum1=ADCSum1*VCC/1024;
  85.                 ADCSum2=ADCSum2*VCC/1024;
  86.                 //保存轉(zhuǎn)換結(jié)果并進(jìn)行類型轉(zhuǎn)換,方便顯示
  87.                 ADCResult1=(uint)ADCSum1;
  88.                 ADCResult2=(uint)ADCSum2;
  89.                 //清除AD暫存變量
  90.                 ADCSum1=ADCSum2=0;
  91.                 //顯示測量結(jié)果
  92.                 //將要顯示的數(shù)值轉(zhuǎn)換成字符型
  93.                 //因為12864顯示的是字符,所以數(shù)值必須轉(zhuǎn)換,否則顯示亂碼
  94.                 App_FormatDec(DispBuf1,ADCResult1);
  95.                 App_FormatDec(DispBuf2,ADCResult2);
  96.                 //顯示該項菜單設(shè)置內(nèi)容
  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. 函數(shù)名稱:ADC_Init
  119. 功    能:ADC初始化函數(shù)
  120. 入口參數(shù):無
  121. 返 回 值:無       
  122. 備    注:無
  123. ************************************************/
  124. void ADC_Init(void)
  125. {
  126.         P1ASF |=0x0C;              //P1.7口做為AD轉(zhuǎn)換通道
  127.         ADC_RES=0;                                  //ADC數(shù)據(jù)寄存器清零               
  128.         ADC_CONTR=ADC_POWER | ADC_SPEEDLL;                          
  129.                                                                                         //打開AD轉(zhuǎn)換器電源,設(shè)置轉(zhuǎn)換速率       
  130.         Delay_ms(2);                    //延時2ms,等待ADC上電穩(wěn)定
  131. }
  132. /***********************************************
  133. 函數(shù)名稱:ADC_GetResult
  134. 功    能:獲取ADC轉(zhuǎn)換的結(jié)果
  135. 入口參數(shù):ch:轉(zhuǎn)換的通道
  136. 返 回 值:unsigned int:轉(zhuǎn)換得到的數(shù)據(jù)       
  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轉(zhuǎn)換完成
  148.     ADC_CONTR &= ~ADC_FLAG;         //清除轉(zhuǎn)換完成標(biāo)記
  149.         ADC_Value=ADC_RES;                                                                //讀取ADC高八位
  150.         ADC_Value=(ADC_Value<<2)|ADC_RESL;//讀取ADC低兩位,并且數(shù)據(jù)合并
  151.     return ADC_Value;                         
  152. }
  153. /***********************************************
  154. 函數(shù)名稱:App_FormatDec
  155. 功    能:整型數(shù)據(jù)轉(zhuǎn)字符串函數(shù)
  156. 入口參數(shù):value:整型數(shù)據(jù)
  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輸入格式為四位數(shù),例如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.                 //第一次整除,獲取最高位數(shù)據(jù),例如1234/1000=1
  177.                 //其他位類推
  178.         nbr = value / mult;
  179.                 //如果得到的數(shù)據(jù)不是0
  180.         if (nbr != 0)
  181.             {
  182.                         //整型數(shù)據(jù)+'0',將自動轉(zhuǎn)換成字符數(shù)據(jù),例如1+'0'將變成字符'1'
  183.                 *pstr = nbr + '0';
  184.         }
  185.             else
  186.                 {   
  187.                         //如果數(shù)據(jù)是0,則直接轉(zhuǎn)換成字符'0'           
  188.             *pstr = '0';
  189.                
  190.         }
  191.                 //移動指針,進(jìn)行其他位數(shù)據(jù)處理
  192.         pstr++;
  193.                 if(i==1)
  194.                 {
  195.                         *pstr = '.';   //顯示小數(shù)點
  196.                         pstr++;               
  197.                 }
  198.                 value %= mult;
  199.                 mult  /= 10;
  200.     }
  201. }

  202. ……………………

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

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


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲三级av | 国产欧美视频一区二区三区 | 欧美性网 | 欧美日韩亚洲国产 | 久久久久成人精品 | 国产人免费人成免费视频 | 香蕉一区 | 日韩视频中文字幕 | 91美女在线观看 | 久久久人成影片一区二区三区 | 国产农村妇女精品一二区 | 国产一区中文字幕 | 色橹橹欧美在线观看视频高清 | 日韩精品在线一区二区 | 成年人黄色小视频 | www.一区二区三区 | 99精品免费 | 丝袜一区二区三区 | 国产精品1区 | 视频在线一区 | 亚洲综合大片69999 | 亚洲一区二区日韩 | 久久精品av麻豆的观看方式 | 精品在线一区 | 一色桃子av一区二区 | 精品视频在线一区 | 日韩成人高清 | 国产一级特黄视频 | 精品一二三区 | 日韩欧美不卡 | 国产美女自拍视频 | 午夜影院在线观看 | 天天干人人 | 国产一区| 日日夜夜草 | 国内精品久久久久 | 亚洲国产成人av好男人在线观看 | 精品欧美一区二区三区久久久 | 精品亚洲一区二区三区 | 欧美日韩在线不卡 | 91在线精品秘密一区二区 |