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.2%RH     温度=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;



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值