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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 772|回復: 2
打印 上一主題 下一主題
收起左側(cè)

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1053020 發(fā)表于 2024-5-14 17:22 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /******************************
  2. 基于51單片機的濕度計

  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);//確定顯示位置:第一行第一個
  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ù):無
  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.         //延時tsp+tsp2的時間
  73.         EN = 1;
  74.         //EN變?yōu)楦唠娖剑孡cd1602開始讀取DB0-DB7的引腳電平
  75.         _nop_();
  76.         //延時tpm一段時間
  77.         EN = 0;
  78.         _nop_();
  79.         //延時tc-tpw時間
  80. }

  81. /************************************
  82. //函數(shù)名稱:LCD1602_Write_Data
  83. //輸入?yún)?shù):cmd-數(shù)據(jù)
  84. //輸出參數(shù):無
  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.         //延時tsp+tsp2的時間
  96.         EN = 1;
  97.         //EN變?yōu)楦唠娖,讓Lcd1602開始讀取DB0-DB7的引腳電平
  98.         _nop_();
  99.         //延時tpm一段時間
  100.         EN = 0;
  101.         _nop_();
  102.         //延時tc-tpw時間
  103. }

  104. /************************************
  105. //函數(shù)名稱:LCD1602_Init
  106. //輸入?yún)?shù):無
  107. //輸出參數(shù):無
  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);//顯示光標移動設(shè)置
  126.         LCD1602_Busy_Check();
  127.         LCD1602_Write_Cmd(0x0c);//顯示開及光標設(shè)置
  128. }

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

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

  165. /************************************
  166. //函數(shù)名稱:DHT11_Check
  167. //輸入?yún)?shù):無
  168. //輸出參數(shù):無
  169. //函數(shù)功能:DHT11信號檢測
  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)//判斷低電平的合法性,低電平時間80us
  183.         {
  184.                 t++;
  185.                 _nop_();
  186.                 if(t > 100)
  187.                         return -2;
  188.         }
  189.         t = 0;
  190.         while(DHT11_IO)//判斷高電平的合法性,高電平時間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ù):無
  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低電平過去,超時
  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ù):無
  239. //輸出參數(shù):無
  240. //函數(shù)功能:DHT11接收并數(shù)據(jù)檢驗
  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();//接收校驗        
  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. }
復制代碼
要求:上電或案件復位后自動顯示"P",進入測量準備階段;按測量開始鍵開始測量,當前環(huán)境的濕度在顯示器上穩(wěn)定顯示;按測量結(jié)束鍵停止測量并返回"P"狀態(tài)。問題:上電后無法顯示“P”;按下“開始建”后只顯示部分數(shù)據(jù);按下“結(jié)束鍵后無任何顯示”。
求各位大佬指點,在此謝過了

51hei圖片仿真.png (89.97 KB, 下載次數(shù): 21)

51hei圖片仿真.png

濕度計.zip

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

程序+仿真

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

使用道具 舉報

沙發(fā)
ID:232462 發(fā)表于 2024-5-15 18:45 | 只看該作者
你的版本太新了,我打不開。我還是用舊版試試吧,稍等
回復

使用道具 舉報

板凳
ID:232462 發(fā)表于 2024-5-15 19:08 | 只看該作者
我用你的程序,改了一下接口,根本液晶不顯示。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美自拍第一页 | 亚洲视频在线播放 | 国产精品日韩一区二区 | 亚洲成av人片在线观看 | 日韩中文字幕一区二区 | 亚洲精彩视频在线观看 | 国产午夜精品视频 | 91视视频在线观看入口直接观看 | 在线日韩中文字幕 | 亚洲二区精品 | 成人免费视频网站在线看 | 伊人网站 | 日韩精品成人 | 国产91综合一区在线观看 | 久草在线 | 久久久久久成人 | 中文字幕在线一区二区三区 | 亚洲精品精品 | 日日操夜夜摸 | 久久久久亚洲精品国产 | 国产传媒视频在线观看 | 日韩综合一区 | 成人在线日韩 | 香蕉视频久久久 | 日韩中文字幕 | 国产三级国产精品 | 成人在线看片 | 亚洲精品在线免费 | 亚洲精品一区国语对白 | 91精品国产乱码久久久久久久 | 在线免费观看成人 | 成人深夜福利 | 精品国产一区二区三区久久久蜜月 | 天天操天天干天天爽 | 精品国产91亚洲一区二区三区www | 欧美日韩a | 一区二区在线免费观看视频 | 日韩av一区二区在线观看 | 亚洲激情第一页 | 亚洲天堂精品久久 | 蜜桃毛片|