两个红外接近开关如何工作?(代码看不太懂,有大佬可以解释一下这代码过程吗?)
这是两个红外接近开关和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]