微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DHT11程序里flag++是什么作用

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

时间:10-02 整理:3721RD 点击:

#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);

    }

   

}


首先,明白三点,1、while(n); 是个死循环,当 n 为真(1) 时,一直循环,当n为假(0)时,推出循环,执行后面的   2、U8FLAG 是一个 unsigned char 无符号的 char 类型,最大值为255 ,溢出后归0  3、&&  这个符号 是两个值 同时为真时,整体为真   
最后 这个 语句的作用就是 延时

U8FLAG++不就是自身加一呗,这里应该是做延时,不停的加一,然后溢出会归零,成为一个判断条件

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top