|
本帖最后由 凌凈清河 于 2019-2-26 19:27 編輯
本帖子中DHT11的驅(qū)動(dòng)函數(shù)和我另一個(gè)設(shè)計(jì)中的函數(shù)相同,直接copy過(guò)來(lái)的。
http://www.zg4o1577.cn/bbs/dpj-127755-1.html
DHT11溫濕計(jì)模塊是廣大畢設(shè)者相當(dāng)熟悉的了,最近有朋友需要,隨手做了一個(gè)最簡(jiǎn)單的溫濕計(jì)。
設(shè)計(jì)采用176X220 2.2寸TFT屏、STC12C5A60S2核心板以及DHT11等組成。
QQ截圖20190226190659.png (2.01 MB, 下載次數(shù): 111)
下載附件
2019-2-26 19:07 上傳
設(shè)計(jì)使用的TFT樣式如下所示:
顯示屏樣式 176X220.png (102.41 KB, 下載次數(shù): 114)
下載附件
2019-2-26 19:27 上傳
由于核心板上提供這款TFT的直插接口,故只需要連接DHT11到任一未占用的IO上即可。就像這樣:
QQ圖片20190226185933.jpg (2.76 MB, 下載次數(shù): 107)
下載附件
2019-2-26 19:06 上傳
需要注意的是,DHT11的數(shù)據(jù)線需要上拉10K電阻,這個(gè)電阻我焊在了DHT11的引腳上,并用熱縮管罩住了。
QQ截圖20190226190855.png (1.29 MB, 下載次數(shù): 130)
下載附件
2019-2-26 19:09 上傳
顯示部分的程序參照淘寶上店家的例程,很方便就能夠進(jìn)行需要的顯示,但是我的程序中對(duì)TFT驅(qū)動(dòng)程序還是做了一定程度的精簡(jiǎn),沒(méi)有使用到的功能都刪除了,為了節(jié)省flash,移植也方便。
程序主函數(shù):
- #include<STC12C5A60S2.H>
- #include "GUI.c"
- sbit DHT=P2^7;//DHT11模塊
- //運(yùn)行數(shù)組
- unsigned char disp[5]={0,0,0,0,0};//溫度每一位、濕度每一位
- //運(yùn)行變量
- unsigned char Data_Receive[5];
- /************************************************************
- 名稱(chēng):基于2.2寸屏和DHT11的溫濕計(jì)
- 平臺(tái):STC12C5A60S2核心板
- 簡(jiǎn)介:顯示采用2.2寸TFT 176X220彩色液晶顯示溫度和濕度;
- 測(cè)量部分采用DHT11模塊,模塊信息如下:
- ASAIR
- -----
- NA:DHT11
- OC:3.3-5.5V
- U1:5-95%RH
- U2:-20-60℃
- U3:±5%RH±2℃
- SN:8180H3985
- 程序編寫(xiě):凌凈清河
- 硬件制作:凌凈欣羽
- 文稿排版:凌凈欣羽
- 日期:2019年2月26日
- 注意:設(shè)計(jì)僅做正溫度處理。
- 注意:核心板上的晶振頻率為11.0592MHz,移植時(shí)注意修改延時(shí)。
- 所屬:新礦城學(xué)習(xí)基地#2019
- ************************************************************/
- void Delay20ms() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 1;
- j = 216;
- k = 35;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay30us() //@11.0592MHz
- {
- unsigned char i;
- i = 80;
- while (--i);
- }
- void sys_init()
- {
- Lcd_Init();
- LCD_LED=1;
- Lcd_Clear(BLACK);
- }
- void DHT_Collect()//溫度采集函數(shù)
- {
- unsigned char i,j;//for循環(huán)變量
- unsigned char t;//超時(shí)判斷
- unsigned char dat8=0;//一次讀取的8位數(shù)據(jù),需要讀5次
- unsigned int CheckValue=0;//校驗(yàn)和
-
- DHT=0;//主機(jī)發(fā)起始信號(hào)
- Delay20ms();//主機(jī)拉低總線至少18ms
- DHT=1;//主機(jī)拉高總線20~40us
- Delay30us();
-
- t=80;//設(shè)置超時(shí)等待時(shí)間
- while(DHT&&t--);//等待DHT11拉低總線
- if(t==0)//超時(shí)
- {
- DHT=1;
- }
- t=250;//設(shè)置超時(shí)等待時(shí)間
- while(!DHT&&t--);//等待DHT11拉高總線
- if(t==0)//超時(shí)
- {
- DHT=1;
- }
- t=250;//設(shè)置超時(shí)等待時(shí)間
- while(DHT&&t--);//等待DHT11拉低總線
- if(t==0)//超時(shí)
- {
- DHT=1;
- }
- for(j=0;j<5;j++)//5次讀取
- {
- for(i=0;i<8;i++)//1次8個(gè)位
- {
- //等待50us開(kāi)始時(shí)隙
- t=150;//設(shè)置超時(shí)等待時(shí)間
- while(!DHT&&t--);//等待DHT11拉高總線
- if(t==0)//超時(shí)
- {
- DHT=1;
- }
- t=0;//記錄時(shí)間清零
- while(DHT&&++t);//等待并記錄高電平持續(xù)時(shí)間
- dat8<<=1;
- if(t>30)//高電平持續(xù)時(shí)間較長(zhǎng)(70us)
- dat8+=1;//傳輸值為1
- }
- Data_Receive[j]=dat8;
- }
-
- Delay30us();//等待DHT11拉低50us
- Delay30us();
- DHT=1;
- for(i=0;i<4;i++)
- {
- CheckValue+=Data_Receive[i];//計(jì)算校驗(yàn)值
- }
- if((unsigned char)CheckValue==Data_Receive[4])//比對(duì)
- {
- disp[0]=Data_Receive[2]/10;
- disp[1]=Data_Receive[2]%10;
- disp[2]=Data_Receive[3]%10;
- disp[3]=Data_Receive[0]/10;
- disp[4]=Data_Receive[0]%10;
- }
- }
- void main()
- {
- sys_init();
- GUI_BOX_K(0,0,219,175,GRAY0);
- GUI_BOX_K(4,4,215,171,BLUE);
- Gui_DrawFont_GBK24(39,8,YELLOW,BLACK,"無(wú)線溫濕度計(jì)");
- Gui_DrawLine(35,34,185,34,BLUE);
- Gui_DrawFont_GBK16(5,36,WHITE,BLACK," 本作品使用DHT11模塊和");
- Gui_DrawFont_GBK16(5,54,WHITE,BLACK,"彩色液晶模塊,完成溫濕度采");
- Gui_DrawFont_GBK16(5,72,WHITE,BLACK,"集和顯示。");
- GUI_BOX_K(8,90,211,167,BLUE);
-
- Gui_DrawFont_GBK24(10,100,YELLOW,BLACK,"溫度");
- GUI_Char24(58,100,YELLOW,BLACK,CChar4);//:
-
- Gui_DrawFont_GBK24(10,130,YELLOW,BLACK,"濕度");
- GUI_Char24(58,130,YELLOW,BLACK,CChar4);//:
- while(1)
- {
- DHT_Collect();
-
- GUI_Num24(82,100,GREEN,BLACK,disp[0]);
- GUI_Num24(106,100,GREEN,BLACK,disp[1]);
- GUI_Char24(130,100,GREEN,BLACK,CChar2);//.
- GUI_Num24(154,100,GREEN,BLACK,disp[2]);
- GUI_Char24(178,100,YELLOW,BLACK,CChar1);//℃
-
- GUI_Char24(82,130,YELLOW,BLACK,CChar0);//空格
- GUI_Num24(106,130,GREEN,BLACK,disp[3]);
- GUI_Num24(130,130,GREEN,BLACK,disp[4]);
- GUI_Char24(154,130,YELLOW,BLACK,CChar0);//空格
- GUI_Char24(178,130,YELLOW,BLACK,CChar3);//%
- }
- }
復(fù)制代碼
歡迎進(jìn)群:873434536,雖人數(shù)暫時(shí)較少,但群內(nèi)氛圍很好,有任何關(guān)于51學(xué)習(xí)中的問(wèn)題,來(lái)一起討論吧~!
資料下載:
【程序】
基于DHT11和2.2寸液晶屏的溫濕計(jì)設(shè)計(jì) 凌凈清河.zip
(70.42 KB, 下載次數(shù): 104)
2019-2-26 19:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
【DHT11資料】
DHT11中文數(shù)據(jù)手冊(cè).pdf
(677.52 KB, 下載次數(shù): 56)
2019-2-26 19:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
【屏幕資料(來(lái)自淘寶)】
QDtech_2.2寸SPI串口176X220_9225模塊.zip
(13.48 MB, 下載次數(shù): 76)
2019-2-26 19:24 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
請(qǐng)注意,為了方便黑幣較少的人也能夠下載附件,回復(fù)本帖,任何時(shí)候我看到,均會(huì)給出最高評(píng)分作為黑布補(bǔ)貼!
|
評(píng)分
-
查看全部評(píng)分
|