標(biāo)題: 基于DHT11和2.2寸液晶屏的溫濕計(jì)設(shè)計(jì) 超簡單 [打印本頁]

作者: 凌凈清河    時(shí)間: 2019-2-26 19:25
標(biāo)題: 基于DHT11和2.2寸液晶屏的溫濕計(jì)設(shè)計(jì) 超簡單
本帖最后由 凌凈清河 于 2019-2-26 19:27 編輯

本帖子中DHT11的驅(qū)動(dòng)函數(shù)和我另一個(gè)設(shè)計(jì)中的函數(shù)相同,直接copy過來的。

http://www.torrancerestoration.com/bbs/dpj-127755-1.html

DHT11溫濕計(jì)模塊是廣大畢設(shè)者相當(dāng)熟悉的了,最近有朋友需要,隨手做了一個(gè)最簡單的溫濕計(jì)。
設(shè)計(jì)采用176X220 2.2寸TFT屏、STC12C5A60S2核心板以及DHT11等組成。


設(shè)計(jì)使用的TFT樣式如下所示:



由于核心板上提供這款TFT的直插接口,故只需要連接DHT11到任一未占用的IO上即可。就像這樣:

需要注意的是,DHT11的數(shù)據(jù)線需要上拉10K電阻,這個(gè)電阻我焊在了DHT11的引腳上,并用熱縮管罩住了。


顯示部分的程序參照淘寶上店家的例程,很方便就能夠進(jìn)行需要的顯示,但是我的程序中對TFT驅(qū)動(dòng)程序還是做了一定程度的精簡,沒有使用到的功能都刪除了,為了節(jié)省flash,移植也方便。

程序主函數(shù):

  1. #include<STC12C5A60S2.H>
  2. #include "GUI.c"
  3. sbit DHT=P2^7;//DHT11模塊
  4. //運(yùn)行數(shù)組
  5. unsigned char disp[5]={0,0,0,0,0};//溫度每一位、濕度每一位
  6. //運(yùn)行變量
  7. unsigned char Data_Receive[5];

  8. /************************************************************
  9. 名稱:基于2.2寸屏和DHT11的溫濕計(jì)
  10. 平臺(tái):STC12C5A60S2核心板

  11. 簡介:顯示采用2.2寸TFT 176X220彩色液晶顯示溫度和濕度;
  12.         測量部分采用DHT11模塊,模塊信息如下:
  13.         ASAIR
  14.         -----
  15.         NA:DHT11
  16.         OC:3.3-5.5V
  17.         U1:5-95%RH
  18.         U2:-20-60℃
  19.         U3:±5%RH±2℃
  20.         SN:8180H3985

  21. 程序編寫:凌凈清河
  22. 硬件制作:凌凈欣羽
  23. 文稿排版:凌凈欣羽

  24. 日期:2019年2月26日
  25. 注意:設(shè)計(jì)僅做正溫度處理。
  26. 注意:核心板上的晶振頻率為11.0592MHz,移植時(shí)注意修改延時(shí)。
  27. 所屬:新礦城學(xué)習(xí)基地#2019
  28. ************************************************************/

  29. void Delay20ms()                //@11.0592MHz
  30. {
  31.         unsigned char i, j, k;

  32.         i = 1;
  33.         j = 216;
  34.         k = 35;
  35.         do
  36.         {
  37.                 do
  38.                 {
  39.                         while (--k);
  40.                 } while (--j);
  41.         } while (--i);
  42. }

  43. void Delay30us()                //@11.0592MHz
  44. {
  45.         unsigned char i;

  46.         i = 80;
  47.         while (--i);
  48. }

  49. void sys_init()
  50. {
  51.         Lcd_Init();
  52.         LCD_LED=1;
  53.         Lcd_Clear(BLACK);
  54. }

  55. void DHT_Collect()//溫度采集函數(shù)
  56. {
  57.         unsigned char i,j;//for循環(huán)變量
  58.         unsigned char t;//超時(shí)判斷
  59.         unsigned char dat8=0;//一次讀取的8位數(shù)據(jù),需要讀5次
  60.         unsigned int CheckValue=0;//校驗(yàn)和
  61.         
  62.         DHT=0;//主機(jī)發(fā)起始信號(hào)
  63.         Delay20ms();//主機(jī)拉低總線至少18ms
  64.         DHT=1;//主機(jī)拉高總線20~40us
  65.         Delay30us();
  66.         
  67.         t=80;//設(shè)置超時(shí)等待時(shí)間
  68.         while(DHT&&t--);//等待DHT11拉低總線
  69.         if(t==0)//超時(shí)
  70.         {
  71.                 DHT=1;
  72.         }
  73.         t=250;//設(shè)置超時(shí)等待時(shí)間
  74.         while(!DHT&&t--);//等待DHT11拉高總線
  75.         if(t==0)//超時(shí)
  76.         {
  77.                 DHT=1;
  78.         }
  79.         t=250;//設(shè)置超時(shí)等待時(shí)間
  80.         while(DHT&&t--);//等待DHT11拉低總線
  81.         if(t==0)//超時(shí)
  82.         {
  83.                 DHT=1;
  84.         }

  85.         for(j=0;j<5;j++)//5次讀取
  86.         {
  87.                 for(i=0;i<8;i++)//1次8個(gè)位
  88.                 {
  89.         //等待50us開始時(shí)隙
  90.                         t=150;//設(shè)置超時(shí)等待時(shí)間
  91.                         while(!DHT&&t--);//等待DHT11拉高總線
  92.                         if(t==0)//超時(shí)
  93.                         {
  94.                                 DHT=1;
  95.                         }
  96.                         t=0;//記錄時(shí)間清零
  97.                         while(DHT&&++t);//等待并記錄高電平持續(xù)時(shí)間
  98.                         dat8<<=1;
  99.                         if(t>30)//高電平持續(xù)時(shí)間較長(70us)
  100.                         dat8+=1;//傳輸值為1
  101.                 }
  102.                 Data_Receive[j]=dat8;
  103.         }
  104.         
  105.         Delay30us();//等待DHT11拉低50us
  106.         Delay30us();
  107.         DHT=1;

  108.         for(i=0;i<4;i++)
  109.         {
  110.                 CheckValue+=Data_Receive[i];//計(jì)算校驗(yàn)值
  111.         }
  112.         if((unsigned char)CheckValue==Data_Receive[4])//比對
  113.         {
  114.                 disp[0]=Data_Receive[2]/10;
  115.                 disp[1]=Data_Receive[2]%10;
  116.                 disp[2]=Data_Receive[3]%10;
  117.                 disp[3]=Data_Receive[0]/10;
  118.                 disp[4]=Data_Receive[0]%10;
  119.         }
  120. }

  121. void main()
  122. {
  123.         sys_init();
  124.         GUI_BOX_K(0,0,219,175,GRAY0);
  125.         GUI_BOX_K(4,4,215,171,BLUE);
  126.         Gui_DrawFont_GBK24(39,8,YELLOW,BLACK,"無線溫濕度計(jì)");
  127.         Gui_DrawLine(35,34,185,34,BLUE);
  128.         Gui_DrawFont_GBK16(5,36,WHITE,BLACK,"    本作品使用DHT11模塊和");
  129.         Gui_DrawFont_GBK16(5,54,WHITE,BLACK,"彩色液晶模塊,完成溫濕度采");
  130.         Gui_DrawFont_GBK16(5,72,WHITE,BLACK,"集和顯示。");
  131.         GUI_BOX_K(8,90,211,167,BLUE);
  132.         
  133.         Gui_DrawFont_GBK24(10,100,YELLOW,BLACK,"溫度");
  134.         GUI_Char24(58,100,YELLOW,BLACK,CChar4);//:
  135.         
  136.         Gui_DrawFont_GBK24(10,130,YELLOW,BLACK,"濕度");
  137.         GUI_Char24(58,130,YELLOW,BLACK,CChar4);//:
  138.         while(1)
  139.         {
  140.                 DHT_Collect();
  141.                
  142.                 GUI_Num24(82,100,GREEN,BLACK,disp[0]);
  143.                 GUI_Num24(106,100,GREEN,BLACK,disp[1]);
  144.                 GUI_Char24(130,100,GREEN,BLACK,CChar2);//.
  145.                 GUI_Num24(154,100,GREEN,BLACK,disp[2]);
  146.                 GUI_Char24(178,100,YELLOW,BLACK,CChar1);//℃
  147.                
  148.                 GUI_Char24(82,130,YELLOW,BLACK,CChar0);//空格
  149.                 GUI_Num24(106,130,GREEN,BLACK,disp[3]);
  150.                 GUI_Num24(130,130,GREEN,BLACK,disp[4]);
  151.                 GUI_Char24(154,130,YELLOW,BLACK,CChar0);//空格
  152.                 GUI_Char24(178,130,YELLOW,BLACK,CChar3);//%
  153.         }
  154. }
復(fù)制代碼


歡迎進(jìn)群:873434536,雖人數(shù)暫時(shí)較少,但群內(nèi)氛圍很好,有任何關(guān)于51學(xué)習(xí)中的問題,來一起討論吧~!

資料下載:
【程序】
基于DHT11和2.2寸液晶屏的溫濕計(jì)設(shè)計(jì) 凌凈清河.zip (70.42 KB, 下載次數(shù): 104)
【DHT11資料】
DHT11中文數(shù)據(jù)手冊.pdf (677.52 KB, 下載次數(shù): 56)
【屏幕資料(來自淘寶)】

QDtech_2.2寸SPI串口176X220_9225模塊.zip (13.48 MB, 下載次數(shù): 76)

請注意,為了方便黑幣較少的人也能夠下載附件,回復(fù)本帖,任何時(shí)候我看到,均會(huì)給出最高評分作為黑布補(bǔ)貼!


作者: nsj21n    時(shí)間: 2019-2-27 09:05
占個(gè)沙發(fā),學(xué)習(xí)點(diǎn)1:DTH11的學(xué)習(xí);2:液晶顯示的學(xué)習(xí),不錯(cuò)。
作者: 凌凈清河    時(shí)間: 2019-3-1 17:22
對了,才想起來,設(shè)計(jì)原本是打算做無線的,但是后來需求變了,改為有線測量,標(biāo)題就沒換回來,這個(gè)算是設(shè)計(jì)的BUG,看到的情知悉。
作者: 496459    時(shí)間: 2019-3-9 19:09
很棒的帖子呀,對我很有用
作者: gh001    時(shí)間: 2019-3-10 08:27
作品很棒,贊!
作者: lon7085    時(shí)間: 2019-3-11 21:25
學(xué)習(xí)了,感謝樓主的分享。并感恩樓主的仁心照顧黑幣較少的人也能夠下載附件。
作者: txkxxig    時(shí)間: 2019-3-18 20:51
最近有一個(gè)課程設(shè)計(jì),正好參考一下啦,拿走了
作者: wenfeizd    時(shí)間: 2019-3-18 23:20
謝謝樓主的分享,正在學(xué)習(xí)LCD顯示可以學(xué)習(xí)學(xué)習(xí)。
作者: shenchaobiao    時(shí)間: 2019-3-24 16:05
謝謝樓主分享,正在學(xué)習(xí)51電子,正好參考樓主設(shè)計(jì)思路。
作者: jhafw    時(shí)間: 2019-3-28 09:03
作品很棒,贊!!
作者: jhafw    時(shí)間: 2019-3-28 09:05
謝謝樓主分享,正在學(xué)習(xí)51電子,正好參考
作者: 噓!我在冬眠    時(shí)間: 2019-4-5 21:01
我是個(gè)新手,我想具體了解DHT11模塊的應(yīng)用,與編程
謝謝大佬
作者: 1931670332    時(shí)間: 2019-8-28 09:50
樓主還在么,求補(bǔ)貼。
作者: 凌凈清河    時(shí)間: 2019-8-28 13:27
1931670332 發(fā)表于 2019-8-28 09:50
樓主還在么,求補(bǔ)貼。

怎么啦,需要補(bǔ)什么?
作者: 1931670332    時(shí)間: 2019-8-29 14:21
凌凈清河 發(fā)表于 2019-8-28 13:27
怎么啦,需要補(bǔ)什么?

沒有黑幣了。。想下載附件,非常感謝
作者: zhoujd    時(shí)間: 2019-8-29 15:31
學(xué)習(xí)下,謝謝樓主
作者: 菜鳥不再菜    時(shí)間: 2019-10-2 13:21
作品很棒,很適合新手學(xué)習(xí)
作者: Mr.zqy    時(shí)間: 2020-4-27 08:12
樓主辛苦了,如果做了可以在手機(jī)上顯示的話就更好了
作者: gw168sh    時(shí)間: 2020-4-27 11:17
謝謝樓主分享,非常棒!
作者: sccdlzj2020    時(shí)間: 2020-7-30 12:52
樓主,請問用STC89C52可以做這個(gè)嗎?
作者: xjx51    時(shí)間: 2022-4-3 22:27
檢測溫度直接用一塊彩屏?樓主有點(diǎn)奢侈了呀
作者: yamete    時(shí)間: 2022-4-4 14:43
群里有這個(gè)資料嗎,這兒下載積分不夠
作者: 021177    時(shí)間: 2022-4-9 16:11
GUI.c是??
作者: sdlyyy    時(shí)間: 2023-3-14 22:10
謝謝分享,美觀使用,好好學(xué)習(xí)。




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