基於51的DHT11驅動

2021-06-16 20:24:57 字數 2330 閱讀 7008

1.感測器效能說明

測溼範圍:20%

~90%  

測溫範圍:0~

50c  

測溫精度:±2c 測溼精度: ±5%rh

2.介面說明

長度大於20m

時採用5k

上拉電阻

3.電源引腳

電源供電電壓:3

~5.5v 

,電源引腳(

vcc,

gnd)可增加乙個

100nf

的電容用以去耦濾波

4.序列介面

單線雙向,採取但匯流排方式,一次通訊時間為4ms,

資料格式如下:

濕度整數部分+

濕度小數部分

+溫度整數部分

+溫度小數部分

+溫濕度校驗和

5.資料讀取時序分析

圖一  單匯流排讀取時序(完整過程)

圖2     

單匯流排讀取時序(初始部分)

圖三       資料0 

表示方法

圖四     資料1 

表示方法

匯流排空閒狀態為高電平,匯流排把電平拉低等待dht11

響應,拉低時間必須大於

18ms

。dht11

接到主機起始訊號後,等待主機訊號結束,然後傳送

80us

電平表示響應。主機傳送起始訊號後延時

30-40us

,讀取響應訊號。(主機傳送起始訊號後可切換為輸入模式,高電平亦可)

7.基於51

驅動的原始碼分析

/*

* 基於51微控制器的dht11驅動程式

* 其中假定51微控制器的時鐘頻率為12m,並且單指令單週期,可得每個機器週期的時間為1/12m × 12 = 1us

* */

#include "dht11.h"

#include "reg52.h"

#define size 5 //設定陣列的大小

#define numble_50us 25 //設定延時的計數值

#define numble_40us 20

#define numble_80us 40

#define error -1

#define ok 0

sbit dht11 = p1^0; //dht11的單匯流排

unsigned int status; //dht11的資料讀取狀態

unsigned char humi_value,temp_value; //溫濕度值

unsigned char arry_value[size]; //定義訪問陣列

static void delay_ms(int x) //ms延時函式

return ;

}static void delay_10us() //10us延時函式

static unsigned char dht11_readvalue()

delay_10us;

delay_10us;

delay_10us;

if(dht11 != 0)}}

return value;

}static int dht11_readhum_temp(void)

else

dht11 = 1;

count = 0;

while(dht11 !=0 && count ++ < numble_80us); //從機拉高延時準備輸出

if(count >= numble_80us)

for(i = 0; i < size -1 ; i ++) //讀取溫濕度值

}if(arry_value[size -1] != checkvalue) //比較讀取結果

else

}return 0;

}

DHT11程式設計

通訊協議 單匯流排 測量範圍 20 90 0 50 精度 5 2 data 資料引腳用於微處理器與dht11之間的通訊和同步,採用單匯流排資料格式,一次通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數部分用於以後擴充套件,現讀出為零。操作流程如下 一次完整的資料傳輸為40b...

DHT11 模組的使用

dht11模組 資料線是單線雙向 一次完整的資料傳輸為40bit 高位先出 資料格式 8bit濕度整數資料 8bit濕度小數資料 8bi溫度整數資料 8bit溫度小數資料 8bit校驗和 資料傳送正確時校驗和資料等於 8bit濕度整數資料 8bit濕度小數資料 8bi溫度整數資料 8bit溫度小數資...

DHT11除錯程式

一 主程式 while 1 二 模組除錯函式 include bsp dht11.h include delay.h include bsp 485.h 函式名 dht11 gpio config 描述 配置dht11用到的i o口 輸入 無 輸出 無 static void dht11 in in...