下面是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信号,结束本次数据读取
}
} |