DHT21程序,DHT21与DHT11的不同处

DHT21

数据格式: 40bit数据=16bit湿度数据+16bit温度数据+8bit校验和

例子:  接收40bit数据如下:       

         0000 0010 1000 1100  0000 0001 0101 1111  1110 1110

                  湿度数据         温度数据         校验和

             湿度高8+湿度低8+温度高8+温度低8=的末8=校验和

             例如:0000 0010+1000 1100+0000 0001+0101 1111=1110 1110

             湿度=65.2RH     温度=35.1℃      

             当温度低于0时温度数据的最高位置1

             例如:-10.1℃表示为1000 0000 0110 0101  

DHT11

8位湿度整数+8位湿度小数+8位温度整数+8位温度小数+8位校验

注意:DHT21温湿度数据为16位,DHT11数据为8位,所以尽管两者时序相同,却不能用同样的数据类型计算

所以可以将原子的DHT11的输出字节部分替换为

u16 DHT11_Read_Data(u16 *temp,u16 *temp1,u16 *humi,u16 *humi1)    
{        
  u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)//¶ÁÈ¡40λÊý¾Ý
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=(((u16)buf[0])<<8|(u16)buf[1])/10;
*humi1=(((u16)buf[0])<<8|(u16)buf[1])%10;
*temp=(((u16)buf[2])<<8|(u16)buf[3])/10;
*temp1=(((u16)buf[2])<<8|(u16)buf[3])%10;
}
}else return 1;
return 0;    

}

主函数

DHT11_Read_Data(&temperature,&temperature1,&humidity,&humidity1); //¶ÁÈ¡ÎÂʪ¶ÈÖµ    
OLED_ShowNum(40,3,temperature,2,16); //ÏÔʾÎÂ¶È  
OLED_ShowNum(64,3,temperature,1,16); //ÏÔʾÎÂ¶È  
      OLED_ShowNum(80,3,settp10*10+settp1,2,16); //ÏÔʾÉèÖÃζÈ
OLED_ShowNum(40,6,humidity,2,16); //ÏÔʾʪ¶È
OLED_ShowNum(64,6,humidity,1,16); //ÏÔʾʪ¶È
      OLED_ShowNum(80,6,sethy10*10+sethy1,2,16); //ÏÔʾÉèÖÃʪ¶È
      if(temperature<settp10*10+settp1) LED1=!LED1;
if(humidity<sethy10*10+sethy1)      LED1=!LED1;



posted @ 2023-07-21 08:43  SymPny  阅读(150)  评论(0编辑  收藏  举报