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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12784|回復: 14
打印 上一主題 下一主題
收起左側

基于51單片機的DHT11溫度濕度采集系統制作 含PCB源文件與程序

  [復制鏈接]
跳轉到指定樓層
樓主
  本人使用DHT11和51單片機制作了一個溫度濕度檢測儀,因為DHT11傳感器主要是用于溫度的檢測,所以實驗成品溫度的精度還行,濕度可能稍微差一點,然后很多人做溫濕度檢測器都會使用DS18B20傳感器,但我是另辟蹊徑,而且和DS18B20 一樣DHT11傳感器也是一個數字傳感器,不需要外加AD轉換模塊,可以省去較為復雜的硬件電路,但是另一方面,硬件的簡化必將帶來軟件的復雜,所以如果對這個作品感興趣,歡迎大家下載,文件中包含原理圖,元件清單,AD圖,程序流程圖,程序,實物圖,基本上都有。

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源碼:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #include <intrins.h>
  5. typedef bit BOOL  ;
  6. sbit io = P1^1 ;//(口線定義)
  7. sbit bee= P1^0 ;
  8. sbit rs = P2^5 ;
  9. sbit rw = P2^6 ;
  10. sbit ep = P2^7 ;
  11. sbit led =P1^5 ;
  12. bit flag_300ms ;
  13. sbit K1=P1^2;
  14. sbit K2=P1^3;
  15. sbit K3=P1^4;
  16. uchar yemian=0;//(定義變量)
  17. uchar flat=1;
  18. uchar data_byte;
  19. uchar RH,RL,TH,TL;
  20. uchar WenDu,ShiDu;//報警的溫度和濕度
  21. uchar value;
  22. /****************************延時程序****************************/
  23. void delay(uchar ms)
  24. {      //   延時子程序
  25.           uchar i ;
  26.           while(ms--)
  27.           {
  28.                for(i= 0 ; i<120;i++) ;
  29.           }
  30. }
  31. void delay1()//延時10us                        
  32. {
  33. _nop_();
  34. _nop_();
  35. _nop_();
  36. _nop_();
  37. _nop_();
  38. _nop_();
  39. }
  40. /********************報警程序部分*******************/
  41. void warn() //報警函數
  42. {
  43.          
  44.          if(TH>WenDu)  //檢測的溫度高于設定溫度報警值
  45.                                                
  46.     {
  47.      bee=0;                                      //報警
  48.            led=0;delay(10);led=~led;                         //燈快閃爍            
  49.     }      
  50.                   
  51.          if(RH>ShiDu)  //檢測的濕度高于設定濕度報警值
  52.                                                
  53.     {
  54.      bee=0;                                      //報警
  55.            led=0;delay(10);led=~led;                         //燈快閃爍
  56.     }      
  57.                   
  58.          if(TH<WenDu  &&  RH<ShiDu )
  59.     {
  60.                     bee=1;                              //停止報警
  61.                     led=1;                              //停止閃爍
  62.           }
  63.                   
  64.   
  65. }
  66. /************************LCD模塊******************************************/
  67. BOOL lcd_bz()//測試LCD忙碌狀態
  68. {     
  69.           BOOL result ;
  70.           rs = 0 ;
  71.           rw = 1 ;
  72.           ep = 1 ;
  73.           result = (BOOL)(P0 & 0x80) ;
  74.           ep = 0 ;
  75.           return result ;
  76. }
  77. void write_cmd(uchar cmd)// 寫指令
  78. {      
  79.         while(lcd_bz()) ;
  80.          rs= 0 ;
  81.          rw= 0 ;
  82.          ep= 0 ;
  83.          P0= cmd ;
  84.          ep= 1 ;
  85.          ep= 0 ;  
  86. }
  87. void write_addr(uchar addr)//寫地址
  88. {      
  89.         write_cmd(addr|0x80) ;
  90. }
  91. void write_byte(uchar dat)//寫字節
  92. {     
  93.         while(lcd_bz()) ;
  94.       rs = 1 ;
  95.       rw = 0 ;
  96.       ep = 0 ;
  97.       P0 = dat ;
  98.       ep = 1 ;
  99.       ep = 0 ;
  100. }
  101. void lcd_init()// 初始化
  102. {      
  103.           write_cmd(0x38) ;
  104.           delay(1);
  105.           write_cmd(0x08) ;  
  106.           delay(1);
  107.           write_cmd(0x01) ;
  108.           delay(1);
  109.           write_cmd(0x06) ;
  110.           delay(1);
  111.           write_cmd(0x0c) ;
  112.           delay(1);
  113. }
  114. void display(uchar addr, uchar q)//在某一地址上顯示一字節
  115. {      
  116.           delay(1) ;
  117.           write_addr(addr) ;
  118.     write_byte(q) ;
  119.           delay(1) ;
  120.          
  121. }
  122. /*********************** DHT11測試模塊***************************************/
  123. void start()//開始信號
  124. {
  125.          io=0;
  126.          delay(18);//>18ms
  127.          io=1;
  128.          delay1();//20-40us
  129.          delay1();
  130.          delay1();
  131.          delay1();
  132. }
  133. uchar receive_byte()//接收一個字節
  134. {
  135.          uchari;
  136.          for(i=0;i<8;i++)
  137.          {      
  138.              data_byte<<=1;                                                                   //循環左移
  139.                   while(!io);                                                                        //每發送一位數據間隔50us低電平
  140.                   delay1();delay1();delay1();delay1();        //延遲40us
  141.                   if(io==1)
  142.                   {
  143.                     data_byte=data_byte|0x01;
  144.                     while(io);
  145.                   }
  146.                   else
  147.                   {
  148.                    data_byte=data_byte|0x00;
  149.                   }
  150.          }
  151.          returndata_byte;
  152. }
  153. void receive()//接收數據
  154. {
  155.          ucharT_H,T_L,R_H,R_L,check;
  156.          start();//開始信號
  157.          io=1;
  158.          if(!io)//讀取DHT11響應信號
  159.          {
  160.    while(!io) ;                                    //判斷輸出低電平
  161.    while( io) ;                                                            //判斷輸出高電平
  162.          R_H=receive_byte();      
  163.          R_L=receive_byte();
  164.          T_H=receive_byte();
  165.          T_L=receive_byte();
  166.          check=receive_byte();
  167.          io=0;                                
  168.          delay1();delay1();delay1();delay1();delay1();//拉低延時50us
  169.          io=1;
  170.          if(R_H+R_L+T_H+T_L==check)                        //矯正
  171.          {
  172.                   RH=R_H;
  173.                   RL=R_L;
  174.                   TH=T_H;
  175.                   TL=T_L;
  176.          }
  177.          }
  178. }
  179. void showw()   // 問候語函數
  180. {     
  181.             lcd_init(); //初始化
  182.             delay(10);
  183.          
  184.             display(0x01,'I');
  185.       display(0x02,' ');
  186.             display(0x03,'a');
  187.             display(0x04,'m');
  188.             display(0x05,' ');
  189.             display(0x06,'s');
  190.       display(0x07,'u');
  191.             display(0x08,'p');
  192.             display(0x09,'e');
  193.             display(0x0a,'r');
  194.             display(0x0b,'m');
  195.       display(0x0c,'a');
  196.             display(0x0d,'n');
  197.             display(0x0e,'!');
  198.             delay(250); //短暫延時
  199.             delay(250);
  200.             delay(250);
  201.             delay(250);
  202.             
  203. }
  204.             
  205. /*************定時器0初始化程序***************/
  206. void time_init()         
  207. {
  208.          TMOD= 0X01;           //定時器0、定時器1工作方式1
  209.          ET0  = 1;                   //開定時器0中斷
  210.          TR0  = 1;                   //允許定時器0定時
  211.          EA   = 1;                 //開總中斷
  212. }
  213. void caidan() //按鍵程序 選擇菜單模式
  214. {
  215.      
  216.            if(!K1)
  217.                      {  
  218.                             delay(20);
  219.                               if(!K1)
  220.                            {  
  221.                                                        while(!K1)
  222.                                                 ;
  223.                                                                yemian++;
  224.                                                                flat++;
  225.                                                                       if(yemian>=3)
  226.                                                                       {
  227.                                                                        yemian=0;
  228.                                                                       }
  229.                                                                      
  230.                  }
  231.                      }
  232.          
  233.          
  234. }
復制代碼


更多程序請下載文件:
基于單片機的溫度濕度采集系統.zip (9.97 MB, 下載次數: 586)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:284500 發表于 2018-5-15 15:48 | 只看該作者
這個看起來不錯。
回復

使用道具 舉報

板凳
ID:350589 發表于 2018-7-15 08:56 | 只看該作者
康康。好東西啊
回復

使用道具 舉報

地板
ID:418649 發表于 2018-11-1 20:34 | 只看該作者
DHT11檢測土壤的溫度濕度時候,是插到把銀角放到土壤里嗎?
回復

使用道具 舉報

5#
ID:410591 發表于 2018-11-20 11:37 | 只看該作者
必須要頂啊
回復

使用道具 舉報

6#
ID:484890 發表于 2019-3-5 14:54 | 只看該作者
好棒啊啊啊啊啊啊啊啊啊 想下載 謝謝樓主喔
回復

使用道具 舉報

7#
ID:513529 發表于 2019-4-16 12:57 | 只看該作者
學習學習  好東西
回復

使用道具 舉報

8#
ID:567928 發表于 2019-6-20 14:50 | 只看該作者
想下載啊  想下載   肯定是個好東西!
回復

使用道具 舉報

9#
ID:576686 發表于 2019-7-2 20:21 | 只看該作者
好東西,想下載看一看
回復

使用道具 舉報

10#
ID:427492 發表于 2019-7-14 21:32 | 只看該作者
關于DHT11部分代碼,我找了好多個。就你的讀數據是能用的,非常感謝
回復

使用道具 舉報

11#
ID:612440 發表于 2019-10-10 22:17 | 只看該作者
很給力
回復

使用道具 舉報

12#
ID:67344 發表于 2019-10-24 21:11 | 只看該作者
上面有人說就這個能用嗎?下載來
回復

使用道具 舉報

13#
ID:470971 發表于 2020-4-10 11:15 | 只看該作者
照著操作后溫濕度傳感器沒反應時什么原因呢,求大神告知
回復

使用道具 舉報

14#
ID:764884 發表于 2020-5-30 11:09 | 只看該作者
回復

使用道具 舉報

15#
ID:761098 發表于 2020-5-31 21:07 | 只看該作者
多謝大佬,終于有數據可以用了
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本不卡免费新一二三区 | 可以免费观看的av | 久热久| 99热在线免费 | 一区二区视频在线 | 日韩色综合 | 精品日本中文字幕 | 成人做爰9片免费看网站 | 亚洲久久在线 | 一区二区三区视频在线观看 | 午夜精品一区二区三区在线视 | 日本欧美国产在线 | 欧美日韩高清在线一区 | 国产成人精品久久二区二区91 | 免费看片国产 | 欧美精品久久 | 波多野结衣在线观看一区二区三区 | 国产成人免费网站 | 国产精品欧美一区二区 | 国产乱码精品一区二区三区忘忧草 | 在线激情视频 | 久久久999精品 | 日韩福利在线 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 男女羞羞视频在线 | 久久精品小视频 | 国产精品污www一区二区三区 | 国产91综合一区在线观看 | 午夜合集 | 国产欧美精品一区二区色综合 | 日韩无 | 国产999精品久久久 日本视频一区二区三区 | 日本亚洲欧美 | 国产一区二区三区 | 性欧美精品一区二区三区在线播放 | 国产偷录视频叫床高潮对白 | 日韩视频精品在线 | 日本黄色免费片 | 黑人粗黑大躁护士 | 亚洲一区中文字幕 | 粉嫩av|