/*----数据判断----*/
void COM(void) //数据0 1确认
{ U8 i;
for(i=0;i<8;i++)
{
FLAG=2;
while((!dht_dat)&&FLAG++); //1bit开始 50us延迟
LCM1602_Delay(40);
temp=0;// 26us~28us 表示为0
if(dht_dat){temp=1;} // 超过28us依然为高电平 表示为1 // 如果高电平高过预定0高电平值则数据位为 1
FLAG=2;
while((dht_dat)&&FLAG++); //条件2是FLAG++,也就是FLAG不等于0(条件判断完成后FLAG加1)
if(FLAG==1)break;//FLAG溢出超时则跳出for循环
comdata<<=1;//等价于comdata乘以2的n次方 //左移操作的规则为,高b位舍去,其它依次向高位(左侧)移动b位,低b位添加0
comdata|=temp; //a|=b;等效于a=a|b;即a与b执行按位或操作,结果赋值给a
}
/*-------------us延时函数-------------------*/
void LCM1602_Delay(uint time)
{
while(time--){;}
}
这是延迟。DHT22的时序核对过,按理应该是没错的