hsk123456 发表于 2020-5-12 20:00:06

两个红外接近开关如何工作?(代码看不太懂,有大佬可以解释一下这代码过程吗?)

这是两个红外接近开关和WT588D模块一起工作的部分代码。
工作方式大概就是:人从右往左分别经过两个红外接近开关代表有人进入,从左往右代表有人出去。

/*****这个前面定义的全局变量******/
sbit GD1=P1^4;//GD1为红外接近开关1
sbit GD2=P1^5;//GD2为红外接近开关2
bit GD1_flag=0;
bit GD2_flag=0;
bit enter_flag;//进入标志位
bit out_flag;//出去标志位
uchar wait=0;
/*******************************/
void WT_dispose()   
{
        if(out_flag) /*有人进来*/
        {
                if(!GD1)/*当传感器输出为低电平才工作的意思吗?*/
                {
                        if(GD1_flag)/*GD1_flag不是初始化为0了吗,它什么情况下会变为1呢?*/
                        {
                                GD1_flag=0;
                                out_flag=0;
                                out_sound=1;
                                if(PeopleNum<99)
                               {
                                   PeopleNum++;
                                   if(PeopleNum<NumPeople)
                                  {
                                          PeopleBit = 1;
                                        }
                                        else
                                        {
                                           if(PeopleBit==1)        
                                          {
                                                  PeopleBit = 0;
                                                  Beep1 = 1;   GSM_Send_Num=3;GSM_Send = 1;
                                                }
                                        }

                               }
                               

                               
                        }
                }
                   else GD1_flag=1; /*对应最开始那个if*/
        }
        else
        {
                if(!GD1)
                {
                        if(GD1_flag)
                        {
                                GD1_flag=0;
                                enter_flag=1;
                                wait=6;
                        }
                }
                else GD1_flag=1;
                       
        }
        if(enter_flag) /*人出去*/
        {
               
                if(!GD2)
                {
                        if(GD2_flag)
                        {
                                GD2_flag=0;
                                enter_flag=0;
                                ent_sound=1;
                                if(PeopleNum>0)PeopleNum--;
                                if(PeopleNum<NumPeople)       
                               {
                                  PeopleBit = 1;        Beep1=0;
                               }
                        }
                }
                else GD2_flag=1;
        }
        else
        {
                if(!GD2)
                {
                        if(GD2_flag)
                        {
                                GD2_flag=0;
                                out_flag=1;
                                wait=6;
                        }
                }
                else GD2_flag=1;
        }
}
页: [1]
查看完整版本: 两个红外接近开关如何工作?(代码看不太懂,有大佬可以解释一下这代码过程吗?)