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