標(biāo)題: 基于51單片機(jī)的dht11溫濕度數(shù)碼管顯示proteus仿真與程序源碼 [打印本頁]

作者: 靈魂9527    時(shí)間: 2019-1-9 23:45
標(biāo)題: 基于51單片機(jī)的dht11溫濕度數(shù)碼管顯示proteus仿真與程序源碼
仿真原理圖如下




按button1可以切換模式
模式0 只顯示溫度
模式1 只顯示濕度
模式2 動(dòng)態(tài)顯示溫度和濕度,每5s切換一次


實(shí)物如下
溫度顯示




濕度顯示  小數(shù)

微信圖片_20190109232507.jpg (1.64 MB, 下載次數(shù): 108)

濕度顯示

濕度顯示

資料.png (13.6 KB, 下載次數(shù): 279)

資料.png

作者: 靈魂9527    時(shí)間: 2019-1-9 23:49
模式選擇,自動(dòng)顯示切換濕度和溫度,只顯示溫度,只顯示濕度。

單片機(jī)源程序如下:
  1. #include<reg51.h>

  2. bit DHT_Start();
  3. bit DHT_ByteRead(unsigned char *dat);
  4. void ConfigTimer0(unsigned int ms);
  5. void Display_hum(unsigned char *num);
  6. void Display_temp(unsigned char *num);


  7. unsigned char T0RH = 0;  //T0重載值的高字節(jié)
  8. unsigned char T0RL = 0;  //T0重載值的低字節(jié)
  9. unsigned char str=88;
  10. unsigned char DHT[5];

  11. unsigned int tmr1s = 0;
  12. unsigned int tmr10ms = 0;
  13. unsigned char st=0;
  14. unsigned int sdd=0;
  15. unsigned char td=0;
  16. unsigned char mode=0;

  17. bit flag1s = 0;
  18. bit flag10ms = 0;
  19. int x;
  20.             
  21. sbit button1=P0^0;
  22. sbit dot=P1^3;   //數(shù)碼管小數(shù)點(diǎn)


  23. void delay(unsigned char x)   //延時(shí)ms
  24. {
  25.     unsigned char a,b,c;
  26.         for(c=x;c>0;c--)
  27.     {
  28.                 for(b=102;b>0;b--)
  29.         for(a=3;a>0;a--);
  30.         }
  31. }
  32. void main()          
  33. {                 

  34.     bit tmp;
  35.         dot=0;
  36.     EA = 1;            //開總中斷
  37.     ConfigTimer0(10);  //T0定時(shí)10ms
  38. //        M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
  39.     DHT_Start();
  40.     delay(5);

  41.     while (1)
  42.     {


  43.         if(flag10ms)  //數(shù)碼管刷新頻率
  44.                 {
  45.                    if(st==0){
  46.                                 Display_temp(&str);
  47.                                 flag10ms=0;
  48.                         }
  49.                    else if(st==1)
  50.                    {
  51.                       Display_hum(&str);
  52.                           flag10ms=0;
  53.                         }

  54.                   
  55.                   
  56.                 }
  57.                 else if (flag1s)  //每秒更新一次溫度、濕度
  58.         {
  59.                 DHT_Start();
  60.                    tmp=DHT_ByteRead(&DHT);
  61.                    if(tmp==1)
  62.                    {

  63.                           if(st==0)
  64.                           {
  65.                             str = DHT[2] ;             //溫度
  66.                                 Display_temp(&str);                     
  67.                             flag1s =0;         //標(biāo)志位清零
  68.                           }
  69.                           else if(st==1){

  70.                           str = DHT[0] ;  //濕度
  71.                   Display_hum(&str);
  72.                                   flag1s =0;         //標(biāo)志位清零
  73.                           }

  74.                           

  75.                    }
  76.         }
  77.                 if(button1==0)
  78.                 {
  79.                    delay(2);
  80.                   
  81.                    if(button1==0)
  82.                    {
  83.                      
  84.                                 mode++;
  85.                                 switch(mode)
  86.                                 {
  87.                                   case 0:  st=0;      break;
  88.                                   case 1:  st=1;      break;
  89.                                   case 2:  td=1;      break;
  90.                                   default:     break;
  91.                                 }
  92.                                 if(mode>=3)
  93.                                 {
  94.                                   td=0;
  95.                                   mode=0;
  96.                                 }
  97.                                 while(button1==0)
  98.                                 {
  99.                                 }


  100.                    }

  101.                 }



  102.          }
  103. }


  104. /* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
  105. void ConfigTimer0(unsigned int ms)
  106. {
  107.     unsigned long tmp;  //臨時(shí)變量
  108.    
  109.     tmp = 11059200 / 12;      //定時(shí)器計(jì)數(shù)頻率
  110.     tmp = (tmp * ms) / 1000;  //計(jì)算所需的計(jì)數(shù)值
  111.     tmp = 65536 - tmp;        //計(jì)算定時(shí)器重載值
  112.     tmp = tmp + 12;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
  113.     T0RH = (unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
  114.     T0RL = (unsigned char)tmp;
  115.     TMOD &= 0xF0;   //清零T0的控制位
  116.     TMOD |= 0x01;   //配置T0為模式1
  117.     TH0 = T0RH;     //加載T0重載值
  118.     TL0 = T0RL;
  119.     ET0 = 1;        //使能T0中斷
  120.     TR0 = 1;        //啟動(dòng)T0
  121. }
  122. /* T0中斷服務(wù)函數(shù),完成1秒定時(shí) */
  123. void InterruptTimer0() interrupt 1
  124. {

  125.     TH0 = T0RH;  //重新加載重載值
  126.     TL0 = T0RL;
  127.     tmr1s++;
  128.         sdd++;
  129.         tmr10ms++;

  130.         if(tmr10ms>=1)           //  數(shù)碼管刷新頻率
  131.         {
  132.                   tmr10ms=0;
  133.                 flag10ms = 1;
  134.         }
  135.         if(td==1)
  136.         {
  137.           if(sdd>=500)           //溫度顯示5s        、濕度顯示5s
  138.           {
  139.              sdd=0;
  140.              if(st==0)
  141.              {
  142.                st=1;
  143.                  }
  144.                  else st=0;
  145.           }
  146.         }
  147.     if (tmr1s >= 200)  //1s 數(shù)據(jù)更新頻率
  148.     {
  149.         tmr1s = 0;
  150.         flag1s = 1;
  151.         }

  152.    
  153. }
復(fù)制代碼

所有資料51hei提供下載:
Display_temphum.zip (112.49 KB, 下載次數(shù): 501)



作者: abssea    時(shí)間: 2019-1-10 20:40
謝謝!!
作者: ontheroad    時(shí)間: 2019-2-23 15:43
DHT11的data口,好像沒有接4.7K的上拉電阻?
作者: 782907272    時(shí)間: 2019-6-20 12:47
靈魂9527 發(fā)表于 2019-1-9 23:49
模式選擇,自動(dòng)顯示切換濕度和溫度,只顯示溫度,只顯示濕度。

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

謝謝大佬!
作者: 宮偉迪    時(shí)間: 2019-6-25 06:15
感謝你的分享
作者: weixiao4    時(shí)間: 2019-8-5 10:35
非常感謝,
作者: User999    時(shí)間: 2019-9-21 15:04
非常感謝
作者: zxule    時(shí)間: 2019-10-26 12:20
是共陰數(shù)碼管還是共陽的
作者: 靈魂9527    時(shí)間: 2019-12-1 10:05
周栩樂 發(fā)表于 2019-10-26 12:20
是共陰數(shù)碼管還是共陽的

共陰   
作者: myemcu    時(shí)間: 2019-12-10 14:39
東東不錯(cuò)
作者: kampoer    時(shí)間: 2019-12-22 16:36
為什么我用你的程序數(shù)碼管只顯示88
作者: 張力力    時(shí)間: 2019-12-26 15:03
如果在此基礎(chǔ)上,加上一個(gè)溫度報(bào)警好做嗎
作者: 221524    時(shí)間: 2019-12-27 22:42
在這上面加個(gè)控制器設(shè)計(jì)好做嗎

作者: anjianguo    時(shí)間: 2019-12-28 12:40
靈魂9527 發(fā)表于 2019-1-9 23:49
模式選擇,自動(dòng)顯示切換濕度和溫度,只顯示溫度,只顯示濕度。

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

剛剛學(xué)習(xí),先復(fù)制源代碼試試,
作者: anjianguo    時(shí)間: 2019-12-28 13:01
靈魂9527 發(fā)表于 2019-1-9 23:49
模式選擇,自動(dòng)顯示切換濕度和溫度,只顯示溫度,只顯示濕度。

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

謝謝!調(diào)試通過!
作者: fanaijun    時(shí)間: 2020-1-7 17:24
為什么把你的程序沒有更改,只是重新編譯一下,就只會(huì)很閃的顯示88,但不重新編譯,直接用你之前的.hex文件,又顯示正常呢?
作者: fanaijun    時(shí)間: 2020-1-7 17:25
為什么用你的程序沒有任何改動(dòng)只是重新編譯一下,會(huì)顯示不了,只會(huì)顯示閃的88
作者: 蒔離季節(jié)    時(shí)間: 2020-3-19 15:55
挺好的,希望大佬繼續(xù)分享dht12.
作者: BrianWaring    時(shí)間: 2020-3-24 15:40
感謝分享!正需要學(xué)習(xí)!
作者: 干掉蒂    時(shí)間: 2020-5-15 22:23
仿真原理圖為什么我的p2.1、p2.4、p1.1,為紅色
作者: meiying...    時(shí)間: 2020-5-17 16:35
為什么我編譯,出現(xiàn)delay:missing function-prototype和 delay:requires-style prototype
作者: 干掉蒂    時(shí)間: 2020-5-23 14:17
unsigned int tmr1s = 0; unsigned int tmr10ms = 0;是什么意思
作者: 1185404984    時(shí)間: 2020-5-23 21:25
仿真的時(shí)候除了把proteus和keil 保存在同一文件夾下 還有什么要求嗎
作者: 玩卟欺    時(shí)間: 2020-5-26 18:02
靈魂9527 發(fā)表于 2019-1-9 23:49
模式選擇,自動(dòng)顯示切換濕度和溫度,只顯示溫度,只顯示濕度。

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

樓主程序非常有用哦
作者: avvv    時(shí)間: 2020-6-2 10:44
謝謝大佬
作者: maiweihao    時(shí)間: 2020-6-17 16:10
原件屬性是什么
作者: maiweihao    時(shí)間: 2020-6-17 16:11
我想問問原件屬性是什么,仿真沒結(jié)果

作者: gemxie    時(shí)間: 2020-6-28 11:37
謝謝樓主分享了,下載學(xué)習(xí)學(xué)習(xí)
作者: zqz.    時(shí)間: 2020-7-4 12:47
有沒有原理圖的文件

作者: 丘丘123    時(shí)間: 2020-11-29 20:46
想問一下仿真中R1 1k的電阻是哪一個(gè)?在元件中叫什么




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