DHT11程序里flag++是什么作用

2019-07-15 10:51发布

#include <reg52.h> //----------------------------------------------////----------------IO口定义区--------------------////----------------------------------------------//sbit  P2_0  =P2^0 ; //----------------------------------------------////----------------定义区--------------------////----------------------------------------------//unsigned char  U8FLAG=0,U8temp=0;unsigned char U8T_data_H=0,U8T_data_L=0,U8RH_data_H=0,U8RH_data_L=0,U8checkdata=0;unsigned char str[5];   void Delay2(unsigned int j)    {     unsigned int i;        for(;j>0;j--)       {          for(i=0;i<150;i++);        }    }  void Delay_10us(void)    {            unsigned  i;       for(i=16;i>0;i--) ;        } unsigned char COM(void)      {                 unsigned chari,U8comdata ;                 for(i=0;i<8;i++)             {                   U8FLAG=2;         while((!P2_0)&&U8FLAG++);           Delay_10us();           Delay_10us();           Delay_10us();           U8temp=0;         if(P2_0)U8temp=1;           U8FLAG=2;        while((P2_0)&&U8FLAG++);        //超时则跳出for循环                if(U8FLAG==1)break;        //判断数据位是0还是1                      // 如果高电平高过预定0高电平值则数据位为 1                    U8comdata<<=1;           U8comdata|=U8temp;        //0         }//rof      return  U8comdata  ;    }     //--------------------------------    //-----湿度读取子程序------------    //--------------------------------    //----以下变量均为全局变量--------    //----温度高8位== U8T_data_H------    //----温度低8位== U8T_data_L------    //----湿度高8位== U8RH_data_H-----    //----湿度低8位== U8RH_data_L-----    //----校验 8位 == U8checkdata-----    //----调用相关子程序如下----------    //---- Delay();, Delay_10us();,COM();     //-------------------------------- void RH(void){ unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;      //主机拉低18ms        P2_0=0;       Delay2(180);       P2_0=1;     //总线由上拉电阻拉高 主机延时20us       Delay_10us();       Delay_10us();       Delay_10us();       Delay_10us();     //主机设为输入 判断从机响应信号        P2_0=1;     //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行          if(!P2_0)       //T !          {       U8FLAG=2;     //判断从机是否发出 80us 的低电平响应信号是否结束           while((!P2_0)&&U8FLAG++);       U8FLAG=2;     //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态      while((P2_0)&&U8FLAG++);     //数据接收状态            U8RH_data_H_temp= COM();       U8RH_data_L_temp= COM();           U8T_data_H_temp=COM();      U8T_data_L_temp=COM();      U8checkdata_temp=COM();       P2_0=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;       }//fi       }//fi     }    //----------------------------------------------//main()功能描述: AT89C51  22.1184MHz    串口发 //送温湿度数据,波特率 9600 //----------------------------------------------void main(){    Delay2(1);         //延时100US(22.1184M晶振)    while(1)    {         //------------------------       //调用温湿度读取子程序        RH();       //串口显示程序        str[0]=U8RH_data_H;       str[1]=U8RH_data_L;       str[2]=U8T_data_H;       str[3]=U8T_data_L;       str[4]=U8checkdata;               //读取模块数据周期不易小于 2S        Delay2(20000);    }    }
0条回答

一周热门 更多>