|
dht11傳感器51單片機驅動代碼
#include "dht11.h"
void dht_Delay(unsigned int j) //延時0.1ms,晶振為11.0592M
{
unsigned char i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us()
{
unsigned char i;
i--;
i--;
i--;
i--;
i--;
i--;
}
//接收一個字節
unsigned char rev_byte( )
{
unsigned char i,temp,rev_data=0;
for(i=0;i<8;i++)
{
while(dat==0); //等待50us的低電平
Delay_10us(); //延時30us
Delay_10us();
Delay_10us();
temp=0;
if(dat==1) //判斷數據為0或1
temp=1;
while(dat==1); //等待1的高電平結束
rev_data<<=1;
rev_data|=temp;
}
return rev_data;
}
//讀溫濕度
void RH(unsigned char *rh,unsigned char *tem)
{
unsigned char rh_h,rh_l,tem_h,tem_l,rh_ht,rh_lt,tem_ht,tem_lt,check;
dat=0; //拉低18ms
dht_Delay(180);
dat=1; //總線由上拉電阻拉高延時20us以上
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
dat=1; //dat引腳設為讀狀態
if(dat==0) //判斷是否有低電平響應信號
{
while(dat==0); //等待 80us 的低電平響應信號
while(dat==1); //等待80us的高電平響應
rh_ht=rev_byte(); //接收濕度高8位
rh_lt=rev_byte(); //濕度低8位
tem_ht=rev_byte(); //溫度高8位
tem_lt=rev_byte(); //溫度低8位
check=rev_byte();
dat=1;
if(rh_ht+rh_lt+tem_ht+tem_lt==check) //數據校驗
{
rh_h=rh_ht;
rh_l=rh_lt;
tem_h=tem_ht;
tem_l=tem_lt;
*rh=rh_h;
*tem=tem_h;
}
}
}
|
-
5.png
(41.53 KB, 下載次數: 55)
下載附件
2019-9-25 19:12 上傳
-
-
dht11傳感器51單片機驅動.rar
2019-9-25 19:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.04 KB, 下載次數: 32, 下載積分: 黑幣 -5
|