DHT11型温湿度传感器的使用(附源码)
一、產品概述
DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器。它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性與卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數以程序的形式儲存在OTP內存中,傳感器內部在檢測信號的處理過程中要調用這些校準系數。單線制串行接口,使系統集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為各類應用甚至最為苛刻的應用場合的最佳選則。產品為?4?針單排引腳封裝。連接方便,特殊封裝形式可根據用戶需求而提供。
二、產品參數
2.1 原理圖
2.2 封裝信息
2.3 引腳說明
2.4 傳感器性能說明
2.5 典型應用電路
三、傳感器工作時序圖說明
3.1 發送數據前的準備
總線空閑狀態為高電平,主機把總線拉低等待DHT11響應,主機把總線拉低必須大于18毫秒,保證DHT11能檢測到起始信號。DHT11接收到主機的開始信號后,?等待主機開始信號結束,然后發送80us低電平響應信號.主機發送開始信號結束后,延時等待20-40us后, 讀取DHT11的響應信號,主機發送開始信號后,可以切換到輸入模式,或者輸出高電平均可,?總線由上拉電阻拉高。
3.2 通訊過程
一次完整的數據傳輸為40bit,高位先出。數據格式:8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據+8bit校驗和。數據傳送正確時校驗和數據等于“8bit濕度整數數據+8bit濕度小數數據+8bi溫度整數數據+8bit溫度小數數據”所得結果的末8位。
用戶MCU發送一次開始信號后,DHT11從低功耗模式轉換到高速模式,等待主機開始信號結束后,DHT11發送響應信號,送出40bit的數據,并觸發一次信號采集,?用戶可選擇讀取部分數據.從模式下,DHT11接收到開始信號觸發一次溫濕度采集,?如果沒有接收到主機發送開始信號,DHT11不會主動進行溫濕度采集.采集數據后轉換到低速模式。
四、例程(例程均為自己編寫且通過驗證成功)
/*所用單片機型號為STC89C52RC,晶振為11.0592MHz*,將測得的溫濕度用8段數碼管由低位向高位一位一位顯示/
4.1 頭文件、子函數聲明、變量聲明等
#include<reg51.h> #include<intrins.h> #define ERROR 0 #define OK 1typedef unsigned char unchar; typedef unsigned int unint;sbit Bus=P2^2;//數據總線unchar value[5];//儲存檢測值 unint check;void Delay10us(void); void Delay20ms(void); void Delay1s(void); unchar Read_Temp(); void show(int x);//上電需要越過1s的不穩定期,測試間隔不能小于1s //讀數時高位先出 //校驗和等于前四個字節相加的低八位 //溫濕度小數部分作為拓展用,目前輸出為04.2?溫濕度讀取函數
unchar Read_Temp() {unchar i,j=0,mask;Bus=0;//主機主動拉低并持續20ms(超過18ms)Delay20ms();Bus=1;//主機再主動拉高40us(20-40us)Delay10us();Delay10us();Delay10us();Delay10us();if(Bus==1)//如果總線沒有響應{return ERROR;}else //如果總線有響應{while(!Bus);//等待總線的低響應(80us)while(Bus);//等待總線的高響應(80us)while(j<5){mask=0x80;for(i=0;i<8;i++)//一次接收一個字節{while(!Bus);//等待過一個低電平間隙Delay10us();//0保持26-28us的高電平,1保持70us的高電平,取40us的處的電平監測Delay10us();Delay10us();Delay10us();if(Bus==0){value[j]&=(~mask); }else{value[j]|=mask;}mask>>=1;while(Bus);//等待該位傳送結束}j++;//繼續接受下一個字節}}check=(value[0]+value[2])&0x00ff;//計算校驗和if(check==value[4])//如果校驗和沒錯{return OK;}else{return ERROR;}}?4.3?數碼管顯示子函數
void show(int x) {while(x>0){switch(x%10){case 0:P0=0xc0;break; case 1:P0=0xf9;break;case 2:P0=0xa4;break;case 3:P0=0xb0;break;case 4:P0=0x99;break;case 5:P0=0x92;break;case 6:P0=0x82;break;case 7:P0=0xf8;break;case 8:P0=0x80;break;case 9:P0=0x90;break;}x=x/10;Delay1s();P0=0xff;Delay1s();} }4.4?各延時子函數
/*10us延時子函數*/ void Delay10us() {unchar i;i=2;while(--i); }/*20ms延時子函數*/ void Delay20ms(void) //誤差 -0.000000000005us {unsigned char a,b,c;for(c=1;c>0;c--)for(b=222;b>0;b--)for(a=40;a>0;a--); } /*1s延時子函數*/ void Delay1s(void) //誤差 -0.000000000227us {unsigned char a,b,c;for(c=13;c>0;c--)for(b=247;b>0;b--)for(a=142;a>0;a--);_nop_(); //if Keil,require use intrins.h }4.5?主函數
int main() {unchar result,temp,hum;Delay1s();//越過1s不穩定期while(1){result=Read_Temp();if(result==OK){temp=value[2];hum=value[0];show(temp);Delay1s();show(hum);Delay1s();Delay1s();Delay1s();}else{continue;}}return 0; }?
左肩理想右肩擔當,君子不怨永遠不會停下腳步!
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的DHT11型温湿度传感器的使用(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 法大大再获6奖
- 下一篇: 【北交所周报】新赣江等多只准新股下调发行