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;