if(humidity>50) // 实际湿度与额定湿度的比较
{
lightHumi=LIGHTON;
}
else
{
lightHumi=LIGHTOFF;
}
if(temperature>23||humidity>50) //报警的设置当温度或湿度任一
{ 大于额定值的时候就报警
beep=~beep;
}
else
{
beep=1;
3.4 接收温湿度数据的设计
在接受DHT21温湿度数据的时候,一定要满足单片机(MCS)拉低总线500us后释放总线,延时20-40us后主机开始检测从机(DHT21)的响应信号。从机的响应信号是一个80us左右的低电平,随后从机在拉高总线80us左右代表即将进入数据传送。我们接受到的数据是一串2进制数据。并且根据其后的高电平的长度来判断数据位所代表的数值,较长的高电平代表1,较短的高电平代表0。与其对应的程序如下(该程序是截取总程序的一部分):
void RH(void)
{
//主机拉低18ms
dht21data=0;
Delaydht(5);
dht21data=1;
//总线由上拉电阻拉高 主机延时20us
Delaydht_10us();
Delaydht_10us(); //调用延时程序
Delaydht_10us();
Delaydht_10us();
//主机设为输入 判断从机响应信号
dht21data=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!dht21data) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!dht21data)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((dht21data)&&U8FLAG++);
//数据接收状态并把它们给其对应的变量
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
dht21data=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>