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

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

QQ登錄

只需一步,快速開始

搜索
查看: 758|回復(fù): 2
收起左側(cè)

基于51單片機(jī)的濕度計(jì) 按下“結(jié)束鍵后無(wú)任何顯示”

[復(fù)制鏈接]
ID:1053020 發(fā)表于 2024-5-14 17:22 | 顯示全部樓層 |閱讀模式
  1. /******************************
  2. 基于51單片機(jī)的濕度計(jì)

  3. ********************************/
  4. #include <reg52.h>
  5. #include <intrins.h>
  6. #include <absacc.h>
  7. #include <math.h>
  8. #include "DHT11.h"
  9. #include "LCD.h"
  10. #include "delay.h"
  11.         
  12. sbit Key_Begin = P2^0;
  13. sbit Key_Over = P2^1;

  14. unsigned char humiH,humiL;

  15. void main()
  16. {
  17.         while(1)
  18.         {
  19.                 LCD1602_Init();//LCD1602初始化
  20.                 LCD1602_Write_Cmd(0x82);//確定顯示位置
  21.                 LCD1602_Write_Data('P');//確定顯示"P"
  22.         
  23.                 if(Key_Begin == 0)
  24.                 {
  25.                         while(1)
  26.                         {
  27.                                 LCD1602_Init();//LCD1602初始化
  28.                                 LCD1602_Write_Cmd(0x83);//確定顯示位置
  29.                                 LCD1602_Write_Data('H');//確定顯示內(nèi)容,H
  30.                                 LCD1602_Write_Cmd(0x84);//地址
  31.                                 LCD1602_Write_Data('u');//內(nèi)容,u
  32.                                 LCD1602_Write_Cmd(0x85);//地址
  33.                                 LCD1602_Write_Data('m');//內(nèi)容,m
  34.                                 LCD1602_Write_Cmd(0x86);//地址
  35.                                 LCD1602_Write_Data(0x3A);//內(nèi)容,:
  36.                                 LCD1602_Write_Cmd(0x89);//地址
  37.                                 LCD1602_Write_Data(0x25);//內(nèi)容,%

  38.                                 DHT11_Read_Date(&humiH,&humiL);//DHT11讀取數(shù)據(jù)
  39.                                 Delay1000ms();
  40.                                 
  41.                                 LCD1602_Write_Cmd(0x87);//確定顯示地址
  42.                                 LCD1602_Write_Data(humiH);//確定顯示內(nèi)容 humiH
  43.                                 LCD1602_Write_Cmd(0x88);//地址
  44.                                 LCD1602_Write_Data(humiL);//內(nèi)容 humiL
  45.                                 if(Key_Over == 0)
  46.                                 {
  47.                                         break;
  48.                                 }
  49.                         }
  50.                         LCD1602_Init();//LCD1602初始化
  51.                         LCD1602_Write_Cmd(0x82);//確定顯示位置:第一行第一個(gè)
  52.                         LCD1602_Write_Data('P');//確定顯示"P"
  53.                 }
  54.         }
  55. }

  56. #include "LCD.h"
  57. #define Lcd_DataPort P0
  58. /************************************
  59. //函數(shù)名稱:LCD1602_Write_Cmd
  60. //輸入?yún)?shù):cmd-指令
  61. //輸出參數(shù):無(wú)
  62. //函數(shù)功能:LCD1602寫指令
  63. *********************************/
  64. void LCD1602_Write_Cmd(char cmd)
  65. {
  66.         RS = 0;
  67.         RW = 0;
  68.         EN = 0;
  69.         //配置DB0-DB7的電平
  70.         Lcd_DataPort = cmd;
  71.         _nop_();
  72.         //延時(shí)tsp+tsp2的時(shí)間
  73.         EN = 1;
  74.         //EN變?yōu)楦唠娖剑孡cd1602開始讀取DB0-DB7的引腳電平
  75.         _nop_();
  76.         //延時(shí)tpm一段時(shí)間
  77.         EN = 0;
  78.         _nop_();
  79.         //延時(shí)tc-tpw時(shí)間
  80. }

  81. /************************************
  82. //函數(shù)名稱:LCD1602_Write_Data
  83. //輸入?yún)?shù):cmd-數(shù)據(jù)
  84. //輸出參數(shù):無(wú)
  85. //函數(shù)功能:LCD1602寫數(shù)據(jù)
  86. *********************************/
  87. void LCD1602_Write_Data(char cmd)
  88. {
  89.         RS = 1;
  90.         RW = 0;
  91.         EN = 0;
  92.         //配置DB0-DB7的電平
  93.         Lcd_DataPort = cmd;
  94.         _nop_();
  95.         //延時(shí)tsp+tsp2的時(shí)間
  96.         EN = 1;
  97.         //EN變?yōu)楦唠娖剑孡cd1602開始讀取DB0-DB7的引腳電平
  98.         _nop_();
  99.         //延時(shí)tpm一段時(shí)間
  100.         EN = 0;
  101.         _nop_();
  102.         //延時(shí)tc-tpw時(shí)間
  103. }

  104. /************************************
  105. //函數(shù)名稱:LCD1602_Init
  106. //輸入?yún)?shù):無(wú)
  107. //輸出參數(shù):無(wú)
  108. //函數(shù)功能:LCD1602初始化
  109. *********************************/
  110. void LCD1602_Init(void)
  111. {
  112.         Delay15ms();
  113.         LCD1602_Write_Cmd(0x38);//寫指令38H
  114.         Delay5ms();
  115.         LCD1602_Write_Cmd(0x38);//顯示模式設(shè)置
  116.         Delay5ms();
  117.         LCD1602_Write_Cmd(0x38);//顯示模式設(shè)置
  118.         LCD1602_Busy_Check();
  119.         LCD1602_Write_Cmd(0x38);
  120.         LCD1602_Busy_Check();
  121.         LCD1602_Write_Cmd(0x08);//顯示關(guān)閉
  122.         LCD1602_Busy_Check();
  123.         LCD1602_Write_Cmd(0x01);//顯示清屏
  124.         LCD1602_Busy_Check();
  125.         LCD1602_Write_Cmd(0x06);//顯示光標(biāo)移動(dòng)設(shè)置
  126.         LCD1602_Busy_Check();
  127.         LCD1602_Write_Cmd(0x0c);//顯示開及光標(biāo)設(shè)置
  128. }

  129. /************************************
  130. //函數(shù)名稱:LCD1602_Busy_Check
  131. //輸入?yún)?shù):無(wú)
  132. //輸出參數(shù):無(wú)
  133. //函數(shù)功能:LCD1602忙信號(hào)檢測(cè)
  134. *********************************/
  135. void LCD1602_Busy_Check(void)
  136. {
  137.         char tmp;//用來(lái)保存Lcd_date的電平狀態(tài)
  138.         Lcd_DataPort = 0xff;//一開始的時(shí)候,Lcd_date設(shè)置成輸入狀態(tài)
  139.         do{
  140.                 RS = 0;
  141.                 RW = 1;
  142.                 EN = 1;
  143.                 _nop_();
  144.                 //延時(shí)CP
  145.                 tmp = Lcd_DataPort;
  146.                 _nop_();
  147.                 //延時(shí)PQ
  148.                  EN = 0;
  149.                 }while(tmp&0x80);//判斷最高位是否為1
  150. }

  151. #include "DHT11.h"
  152. /************************************
  153. //函數(shù)名稱:DHT11_Rst
  154. //輸入?yún)?shù):無(wú)
  155. //輸出參數(shù):無(wú)
  156. //函數(shù)功能:DHT11復(fù)位
  157. *********************************/
  158. void DHT11_Rst(void)
  159. {
  160.         DHT11_IO = 0;//主機(jī)拉低總線,至少18ms以上
  161.         Delay20ms();
  162.         DHT11_IO = 1;//主機(jī)拉高總線,20-40us
  163.         Delay30us();
  164. }

  165. /************************************
  166. //函數(shù)名稱:DHT11_Check
  167. //輸入?yún)?shù):無(wú)
  168. //輸出參數(shù):無(wú)
  169. //函數(shù)功能:DHT11信號(hào)檢測(cè)
  170. *********************************/
  171. char DHT11_Check(void)
  172. {
  173.         unsigned int t = 0;
  174.         while(DHT11_IO)//等待低電平出現(xiàn)
  175.         {
  176.                 t++;
  177.                 _nop_();
  178.                 if(t > 1000)
  179.                         return -1;
  180.         }
  181.         t = 0;
  182.         while(!DHT11_IO)//判斷低電平的合法性,低電平時(shí)間80us
  183.         {
  184.                 t++;
  185.                 _nop_();
  186.                 if(t > 100)
  187.                         return -2;
  188.         }
  189.         t = 0;
  190.         while(DHT11_IO)//判斷高電平的合法性,高電平時(shí)間80us
  191.         {
  192.                 t++;
  193.                 _nop_();
  194.                 if(t > 100)
  195.                         return -3;
  196.         }
  197.         return 0;//如果DHT11 正常,返回0,異常返回小于0
  198. }

  199. /************************************
  200. //函數(shù)名稱:DHT11_Read_Byte
  201. //輸入?yún)?shù):無(wú)
  202. //輸出參數(shù):dat
  203. //函數(shù)功能:DHT11讀取數(shù)據(jù)
  204. *********************************/
  205. unsigned char DHT11_Read_Byte(void)
  206. {
  207.         unsigned char i;
  208.         unsigned int t = 0;
  209.         unsigned char dat = 0;
  210.         for(i = 0;i<8;i++)//高位先出,地位后出
  211.         {
  212.                 while(!DHT11_IO)//等待50us低電平過(guò)去,超時(shí)
  213.                 {
  214.                         t++;
  215.                         _nop_();
  216.                         if(t > 100)
  217.                         return 0;
  218.                 }
  219.                 Delay40ms();
  220.                 dat <<= 1;
  221.                 if(DHT11_IO == 1)
  222.                 {
  223.                         dat |= 1;
  224.                         t = 0;
  225.                         while(!DHT11_IO)
  226.                         {
  227.                                 t++;
  228.                                 _nop_();
  229.                                 if(t > 100)
  230.                                 return 0;
  231.                         }
  232.                 }
  233.         }
  234.         return dat;
  235. }

  236. /************************************
  237. //函數(shù)名稱:DHT11_Read_Date
  238. //輸入?yún)?shù):無(wú)
  239. //輸出參數(shù):無(wú)
  240. //函數(shù)功能:DHT11接收并數(shù)據(jù)檢驗(yàn)
  241. *********************************/
  242. char DHT11_Read_Date(unsigned char *humiH,unsigned char *humiL)
  243. {
  244.         unsigned char buf[5];
  245.         DHT11_Rst();
  246.         if(DHT11_Check() == 0)
  247.         {               
  248.                 buf[0] = DHT11_Read_Byte();//接收濕度高8位
  249.                 buf[1] = DHT11_Read_Byte();//接收濕度低8位
  250.                 buf[2] = DHT11_Read_Byte();//接收溫度高8位
  251.                 buf[3] = DHT11_Read_Byte();//接收溫度低8位
  252.                 buf[4] = DHT11_Read_Byte();//接收校驗(yàn)        
  253.                 Delay40ms();
  254.                 if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4])
  255.                 {
  256.                         *humiH = buf[0];
  257.                         *humiL = buf[1];
  258.                 }
  259.                 else
  260.                         return -1;
  261.                 }
  262.         else
  263.                 return -2;
  264.         return 0;
  265. }
復(fù)制代碼
要求:上電或案件復(fù)位后自動(dòng)顯示"P",進(jìn)入測(cè)量準(zhǔn)備階段;按測(cè)量開始鍵開始測(cè)量,當(dāng)前環(huán)境的濕度在顯示器上穩(wěn)定顯示;按測(cè)量結(jié)束鍵停止測(cè)量并返回"P"狀態(tài)。問(wèn)題:上電后無(wú)法顯示“P”;按下“開始建”后只顯示部分?jǐn)?shù)據(jù);按下“結(jié)束鍵后無(wú)任何顯示”。
求各位大佬指點(diǎn),在此謝過(guò)了
51hei圖片仿真.png

濕度計(jì).zip

72.04 KB, 下載次數(shù): 3

程序+仿真

回復(fù)

使用道具 舉報(bào)

ID:232462 發(fā)表于 2024-5-15 18:45 | 顯示全部樓層
你的版本太新了,我打不開。我還是用舊版試試吧,稍等
回復(fù)

使用道具 舉報(bào)

ID:232462 發(fā)表于 2024-5-15 19:08 | 顯示全部樓層
我用你的程序,改了一下接口,根本液晶不顯示。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 第一区在线观看免费国语入口 | 国产精品久久久久久久久久久久冷 | 毛片视频免费 | 欧美女优在线观看 | 久久成人一区二区三区 | 欧美性一区二区三区 | 波多野结衣中文视频 | 热99视频 | 久久黄网| 亚洲天堂一区 | 免费观看黄色一级片 | 亚洲欧美日韩电影 | 亚洲毛片 | 久久久久资源 | 婷婷久 | 久久精品二区亚洲w码 | 成人午夜免费视频 | 一级片在线观看 | 国产成人免费 | 日韩欧美网 | 国产激情一区二区三区 | 羞羞视频在线观看免费观看 | 亚欧精品| 婷婷久久综合 | 99精品久久 | 欧美中文字幕在线观看 | 欧美精品在线一区二区三区 | 欧美一级免费看 | 欧美精品成人一区二区三区四区 | 亚洲高清免费视频 | 波多野结衣一区二区三区 | 久久国产成人午夜av影院武则天 | 成人在线免费网站 | 久久国产精品99久久久久久丝袜 | 91五月天| www在线视频 | 三级黄色网址 | 亚洲二区在线观看 | 91视频进入 | 日韩欧美亚洲一区 | 中文字幕免费在线 |