|
下面是DHT11的程序,我是想改成DHT22的,有幾個(gè)問題不理解
問題1:DHT22的溫度是溫度的(高7位的數(shù)值*256+低8位的數(shù)值) /10。高8位的首 位為符號(hào)位。濕度的讀取同理,但是濕度沒有符號(hào)位。
問題2:溫度是負(fù)數(shù)的時(shí)候改怎么定義函數(shù)
/********************************************************
函數(shù)名稱:uchar DHT11_receive(void)
函數(shù)作用:接收DHT11傳回來的數(shù)據(jù)
參數(shù)說明:返回接收到的八位數(shù)據(jù)
********************************************************/
uchar DHT11_receive(void)
{
uchar i,Data;
for(i=0;i<8;i++) //接收8位數(shù)據(jù)
{
DHT11_num=2; //重置超時(shí)變量
while(!DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)楦唠娖?br />
Delay_us(35);//延時(shí)35us
Data<<=1; //數(shù)據(jù)向左移動(dòng)一位
if(DHT11_DB) //如果DHT11為高電平,表示接收的數(shù)據(jù)為1
Data|=1; //存入數(shù)據(jù)
DHT11_num=2; //重置超時(shí)變量
while(DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)榈碗娖?br />
}
return Data; //返回接收到的數(shù)據(jù)
}
/********************************************************
函數(shù)名稱:void DHT11_read(void)
函數(shù)作用:讀取DHT11溫濕度
參數(shù)說明:
********************************************************/
void DHT11_read(void)
{
DHT11_DB=0; //拉低DHT11信號(hào)線
Delay_ms(20); //延時(shí)20ms
DHT11_DB=1; //拉高DHT11信號(hào)線
Delay_us(60); //延時(shí)60us
if(!DHT11_DB) //等待DHT11拉高響應(yīng)
{
DHT11_num=2; //重置超時(shí)變量
while(!DHT11_DB&&DHT11_num++);//等待DHT11變?yōu)楦唠娖?br />
DHT11_num=2; //重置超時(shí)變量
while(DHT11_DB&&DHT11_num++); //等待DHT11變?yōu)榈碗娖?br />
Humi_H=DHT11_receive(); //接收濕度整數(shù)位
Humi_L=DHT11_receive(); //接收濕度小數(shù)位
Temp_H=DHT11_receive(); //接收溫度整數(shù)位
Temp_L=DHT11_receive(); //接收溫度小數(shù)位
Check_data=DHT11_receive(); //接收數(shù)據(jù)校驗(yàn)位
DHT11_DB=1; //拉高DHT11信號(hào),結(jié)束本次數(shù)據(jù)讀取
}
} |
|