標(biāo)題: 51單片機(jī)控制DHT11在1602上顯示溫濕度的程序 [打印本頁(yè)]

作者: 愛(ài)丶桐嚴(yán)    時(shí)間: 2018-3-15 19:33
標(biāo)題: 51單片機(jī)控制DHT11在1602上顯示溫濕度的程序
需要的拿去

單片機(jī)源程序如下:

代碼:

  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. typedef bit BOOL;
  5. sbit io = P2^0;
  6. sbit rs = P2^6;  
  7. sbit rw = P2^5;
  8. sbit ep = P2^7;
  9. uchar data_byte;
  10. uchar RH,RL,TH,TL;
  11. /********延時(shí)模塊***********/
  12. void delay(uchar ms)
  13. {  // 延時(shí)子程序
  14. uchar i;
  15. while(ms--)
  16. {
  17.   for(i = 0;i<250;i++);  
  18. }
  19. }
  20. void delay1()//延時(shí)10us
  21. {
  22. uchar i;
  23. i--;
  24. i--;
  25. i--;
  26. i--;
  27. i--;
  28. i--;
  29. }
  30. void longdelay(uchar s) //長(zhǎng)延時(shí)
  31. {
  32. while(s--)
  33. {
  34.   delay(60);
  35. }
  36. }
  37. BOOL lcd_bz()//測(cè)試LCD忙碌狀態(tài)
  38. {
  39. BOOL result;  
  40. rs = 0;  
  41. rw = 1;
  42. ep = 1;
  43. result = (BOOL)(P0 & 0x80);
  44. ep = 0;  
  45. return result;  
  46. }
  47. void write_cmd(uchar cmd)// 寫指令
  48. {  
  49. while(lcd_bz());
  50. rs = 0;
  51. rw = 0;
  52. ep = 0;
  53. P0 = cmd;
  54. ep = 1;
  55. ep = 0;
  56. }
  57. void write_addr(uchar addr)//寫地址
  58. {
  59. write_cmd(addr|0x80);
  60. }
  61. void write_byte(uchar dat)//寫字節(jié)
  62. {  
  63. while(lcd_bz());
  64. rs = 1;
  65. rw = 0;
  66. ep = 0;
  67. P0 = dat;          
  68. ep = 1;
  69. ep = 0;
  70. }
  71. void lcd_init()// 初始化
  72. {
  73. write_cmd(0x38);
  74. delay(1);
  75.   write_cmd(0x08);
  76. delay(1);
  77. write_cmd(0x01);
  78. delay(1);
  79. write_cmd(0x06);
  80. delay(1);  
  81. write_cmd(0x0c);
  82. delay(1);
  83. }
  84. void display(uchar addr, uchar q)//在某一地址上顯示一字節(jié)
  85. {
  86. delay(10);
  87. write_addr(addr);
  88. write_byte(q);
  89. longdelay(2);
  90. }
  91. void start()//開(kāi)始信號(hào)
  92. {
  93. io=1;
  94. delay1();
  95. io=0;
  96. delay(20);//>18ms  
  97. io=1;
  98. delay1();//20-40us
  99. delay1();
  100. delay1();
  101. delay1();
  102. delay1();
  103. }
  104. uchar receive_byte()//接收一個(gè)字節(jié)
  105. {
  106. uchar i,temp,count;
  107. for(i=0;i<8;i++)
  108. {
  109.    count=2;  
  110.   while((!io)&&count++)//等待50us低電平結(jié)束
  111.   temp=0;
  112.   delay1();
  113.   delay1();
  114.   delay1();
  115.   delay1();
  116.    if(io==1)
  117.   temp=1;
  118.   count=2;
  119.   while((io)&&count++);
  120.   if(count==1)break;
  121. data_byte<<=1;
  122.   data_byte|=temp;
  123. }
  124. return data_byte;
  125. }
  126. void receive()//接收數(shù)據(jù)
  127. {
  128. uchar T_H,T_L,R_H,R_L,check,num_check;
  129.    uchar count;
  130. start();//開(kāi)始信號(hào)
  131. io=1;
  132. if(!io)//讀取DHT11響應(yīng)信號(hào)
  133. {
  134.   count=2;
  135.   while((!io)&&count++);//DHT11高電平80us是否結(jié)束
  136.   count=2;
  137.   while((io)&&count++);
  138.   R_H=receive_byte();
  139.   R_L=receive_byte();
  140.   T_H=receive_byte();
  141.   T_L=receive_byte();
  142.   check=receive_byte();
  143.   io=0;//拉低延時(shí)50us
  144.   delay1();
  145.    delay1();
  146.   delay1();
  147.   delay1();
  148.   delay1();
  149.   io=1;
  150.   num_check=R_H+R_L+T_H+T_L;
  151.   if(num_check=check)
  152.   {
  153.    RH=R_H;
  154. RL=R_L;
  155. TH=T_H;
  156. TL=T_L;
  157. check=num_check;
  158.   }
  159. }
  160. }
  161. void main()
  162. {
  163. lcd_init();
  164. delay(10);
  165. while(1)
  166. {
  167.   receive();
  168.   delay(100);
  169.   display(0x00,'R');
  170.   display(0x01,':');
  171.   display(0x02,RH/10+0x30);
  172.    display(0x03,RH%10+0x30);
  173.   display(0x04,'%');
  174.   display(0x40,'T');
  175.   display(0x41,':');                                
  176.   display(0x42,TH/10+0x30);
  177.   display(0x43,TH%10+0x30);
  178. display(0x44,0xdf);
  179.   display(0x45,0x43);
  180. }
  181. }

所有資料51hei提供下載:
程序.rar (29.75 KB)
(下載次數(shù): 344, 2018-3-15 19:33 上傳)

下載積分: 黑幣 -5





作者: GeniusXF    時(shí)間: 2018-3-30 23:51
厲害了
作者: dpj555    時(shí)間: 2018-3-31 08:45
不錯(cuò),通過(guò)編譯。需要溫度傳感器,才能實(shí)現(xiàn)測(cè)溫。
作者: 三毛011    時(shí)間: 2018-3-31 10:54
有protues仿真圖嗎

作者: 51宅男    時(shí)間: 2018-4-1 16:11
為啥數(shù)據(jù)顯示一直是0
作者: 一直傻亮亮    時(shí)間: 2018-4-14 18:28

引用:

51宅男 發(fā)表于 2018-4-1 16:11
為啥數(shù)據(jù)顯示一直是0

你解決問(wèn)題了嗎?

作者: 51科技    時(shí)間: 2018-8-11 16:54
顯示一直是0
作者: 超級(jí)無(wú)敵磊果果    時(shí)間: 2018-9-2 21:55
是1602顯示嗎,為什么我的沒(méi)有顯示呢

作者: 小貓貓愛(ài)吃魚    時(shí)間: 2018-9-2 22:55

引用:

超級(jí)無(wú)敵磊果果 發(fā)表于 2018-9-2 21:55
是1602顯示嗎,為什么我的沒(méi)有顯示呢


你好!如果沒(méi)有顯示一般和硬件有關(guān),仔細(xì)檢查一下電路吧

多點(diǎn)溫控(DHT11)短信報(bào)警系統(tǒng) - 51單片機(jī) 單片機(jī)論壇
http://www.torrancerestoration.com/bbs/dpj-115267-1.html

作者: beyonbirth    時(shí)間: 2018-10-27 11:19
溫濕度一直是0是什么情況?小白不太懂啊
作者: beyonbirth    時(shí)間: 2018-10-27 13:25
貌似DHT11數(shù)據(jù)一直沒(méi)收到
作者: 萊鳥(niǎo)    時(shí)間: 2019-3-13 09:29
11.0592 stc89c52rc實(shí)測(cè)無(wú)法成功和dht11通信成功。
作者: 980425212    時(shí)間: 2019-3-16 15:37

引用:

beyonbirth 發(fā)表于 2018-10-27 13:25
貌似DHT11數(shù)據(jù)一直沒(méi)收到

我的也是只顯示0
作者: 葉新城    時(shí)間: 2019-4-4 19:24

引用:

980425212 發(fā)表于 2019-3-16 15:37
我的也是只顯示0

解決了嗎?我也顯示是0,什么情況啊
作者: 3278266991    時(shí)間: 2019-4-5 13:02
先贊一個(gè)!
作者: vistayi    時(shí)間: 2019-4-27 15:20
正好需要。。。。。。。。。
作者: SC30    時(shí)間: 2019-5-6 20:16

引用:

beyonbirth 發(fā)表于 2018-10-27 13:25
貌似DHT11數(shù)據(jù)一直沒(méi)收到

解決了沒(méi)
作者: Li296521877    時(shí)間: 2019-7-2 22:16
顯示0怎么辦

作者: 楓樹(shù)566    時(shí)間: 2019-7-14 21:18
時(shí)序有問(wèn)題,就一直顯示初始化時(shí)的值
作者: 楓樹(shù)566    時(shí)間: 2019-7-14 21:35
我找到一個(gè)時(shí)序是對(duì)的,你們可以參考一下:
/*********************** DHT11測(cè)試模塊***************************************/
void start()//開(kāi)始信號(hào)
{
         io=0;
         delay(18);//>18ms
         io=1;
         delay1();//20-40us
         delay1();
         delay1();
         delay1();
}
uchar receive_byte()//接收一個(gè)字節(jié)
{
         uchari;
         for(i=0;i<8;i++)
         {      
             data_byte<<=1;                                                                   //循環(huán)左移
                  while(!io);                                                                        //每發(fā)送一位數(shù)據(jù)間隔50us低電平
                  delay1();delay1();delay1();delay1();        //延遲40us
                  if(io==1)
                  {
                    data_byte=data_byte|0x01;
                    while(io);
                  }
                  else
                  {
                   data_byte=data_byte|0x00;
                  }
         }
         returndata_byte;
}
void receive()//接收數(shù)據(jù)
{
         ucharT_H,T_L,R_H,R_L,check;
         start();//開(kāi)始信號(hào)
         io=1;
         if(!io)//讀取DHT11響應(yīng)信號(hào)
         {
   while(!io) ;                                    //判斷輸出低電平
   while( io) ;                                                            //判斷輸出高電平
         R_H=receive_byte();      
         R_L=receive_byte();
         T_H=receive_byte();
         T_L=receive_byte();
         check=receive_byte();
         io=0;                                
         delay1();delay1();delay1();delay1();delay1();//拉低延時(shí)50us
         io=1;
         if(R_H+R_L+T_H+T_L==check)                        //矯正
         {
                  RH=R_H;
                  RL=R_L;
                  TH=T_H;
                  TL=T_L;
         }
         }
}
作者: 113333    時(shí)間: 2019-11-10 12:55
你們解決了嗎

作者: xinmengzai    時(shí)間: 2019-11-29 02:50

引用:

113333 發(fā)表于 2019-11-10 12:55
你們解決了嗎

學(xué)習(xí)一下,感謝分享
作者: 我i是大哥    時(shí)間: 2019-11-29 10:34

引用:

楓樹(shù)566 發(fā)表于 2019-7-14 21:35
我找到一個(gè)時(shí)序是對(duì)的,你們可以參考一下:
/*********************** DHT11測(cè)試模塊******************** ...

我用了你這個(gè),也不好用 啊,一直顯示00
作者: 2249678771    時(shí)間: 2019-12-5 20:25
不行,啥都不顯示,大家別看了,去找下一個(gè)。
作者: 2249678771    時(shí)間: 2019-12-6 11:00
不行,顯示不了。

作者: お眸^o^光ざ    時(shí)間: 2020-6-29 16:09
為什么我的是什么都不顯示




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1