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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

15單片機(jī)17年電賽P題水情監(jiān)測系統(tǒng)(附程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


單片機(jī)源程序如下:
  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);              //上電延時(shí)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個(gè)數(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.         //計(jì)數(shù)器加1
  73.         ADCCnt++;
  74.         //如果累加到32個(gè)數(shù)據(jù),則開始處理
  75.         if(ADCCnt==32)
  76.         {                       
  77.                 ADCCnt=0;
  78.                 //(ADCSum>>5)等價(jià)于(ADCSum/32)       
  79.                 //對(duì)32個(gè)數(shù)據(jù)取平均                       
  80.                 ADCSum1=ADCSum1>>5;       
  81.                 ADCSum2=ADCSum2>>5;       
  82.                 //ADC=(Vin/Vref)*1024       
  83.                 //根據(jù)ADC計(jì)算公式進(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.                 //因?yàn)?2864顯示的是字符,所以數(shù)值必須轉(zhuǎn)換,否則顯示亂碼
  94.                 App_FormatDec(DispBuf1,ADCResult1);
  95.                 App_FormatDec(DispBuf2,ADCResult2);
  96.                 //顯示該項(xiàng)菜單設(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);                    //延時(shí)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;        //啟動(dòng)ADC
  143.     _nop_();                        //延時(shí)
  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.         //因?yàn)檫@里要處理的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',將自動(dòng)轉(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.                 //移動(dòng)指針,進(jìn)行其他位數(shù)據(jù)處理
  192.         pstr++;
  193.                 if(i==1)
  194.                 {
  195.                         *pstr = '.';   //顯示小數(shù)點(diǎn)
  196.                         pstr++;               
  197.                 }
  198.                 value %= mult;
  199.                 mult  /= 10;
  200.     }
  201. }

  202. ……………………

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

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


評(píng)分

參與人數(shù) 2黑幣 +80 收起 理由
天才小能貓 + 30
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:364328 發(fā)表于 2018-7-16 15:37 | 只看該作者
這是啥功能啊         樓主沒有說清楚啊   
回復(fù)

使用道具 舉報(bào)

板凳
ID:404673 發(fā)表于 2019-4-16 01:35 | 只看該作者
有其他資料嗎?原理圖什么的
回復(fù)

使用道具 舉報(bào)

地板
ID:472844 發(fā)表于 2019-7-20 09:14 | 只看該作者
有原理圖就好了!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费不卡一区 | 欧美成人精品一区二区男人看 | 成人av免费网站 | 欧美日韩综合一区 | 成人午夜 | 成人在线一级片 | 久久精品欧美一区二区三区不卡 | 久久与欧美| 黄色免费在线网址 | 一区在线免费视频 | 中文字幕一区在线观看视频 | 国产成人综合在线 | 成人一级视频在线观看 | 9久久| 亚洲成人久久久 | 在线免费中文字幕 | 91免费观看国产 | 97精品一区二区 | 欧美亚洲国产成人 | 日韩成人av在线播放 | 亚洲国产精品一区二区三区 | 免费一看一级毛片 | 色综合久 | 免费中文字幕日韩欧美 | 亚洲欧美激情国产综合久久久 | 久久精品国产99国产精品 | 在线免费观看日本 | 9久久精品 | 国产欧美一区二区三区在线播放 | 日韩视频精品在线 | 国产精品久久久久久久久久了 | 亚洲精选久久 | 精品一区二区三区在线视频 | 午夜国产羞羞视频免费网站 | 欧美一区二区三区精品 | 国产精品视频二区三区 | a在线视频 | 四虎最新视频 | 日韩区 | 国产一区二区影院 | 日韩精品成人 |