从单片机基础到程序框架(全集 2019pdf版).pdf - 第586页
if(Su16S ensorUp_H_C nt>=SENSOR _TIME) { Su16Sensor Up_H_Cnt= 0; vGu8Sensor Up=1; //此全局变量 反馈经过滤波 后“ 上感应器”当前 电平的状态 } } } void T0_ti me() inte rrupt 1 { VoiceSca n(); KeyScan( ); SensorSc an(); //用来 识别和滤波开 关感应器 if(1==vG…

static unsigned int Su16SensorRight_L_Cnt=0; //判断低电平的计时器
static unsigned int Su16SensorUp_H_Cnt=0; //判断高电平的计时器
static unsigned int Su16SensorUp_L_Cnt=0; //判断低电平的计时器
//右感应器的滤波
if(0==SensorRight_sr)
{
Su16SensorRight_H_Cnt=0; //在判断低电平的时候,高电平的计时器被清零,巧妙极了!
Su16SensorRight_L_Cnt++;
if(Su16SensorRight_L_Cnt>=SENSOR_TIME)
{
Su16SensorRight_L_Cnt=0;
vGu8SensorRight=0; //此全局变量反馈经过滤波后“右感应器”当前电平的状态
}
}
else
{
Su16SensorRight_L_Cnt=0; //在判断高电平的时候,低电平的计时器被清零,巧妙极了!
Su16SensorRight_H_Cnt++;
if(Su16SensorRight_H_Cnt>=SENSOR_TIME)
{
Su16SensorRight_H_Cnt=0;
vGu8SensorRight=1; //此全局变量反馈经过滤波后“右感应器”当前电平的状态
}
}
//上感应器的滤波
if(0==SensorUp_sr)
{
Su16SensorUp_H_Cnt=0;
Su16SensorUp_L_Cnt++;
if(Su16SensorUp_L_Cnt>=SENSOR_TIME)
{
Su16SensorUp_L_Cnt=0;
vGu8SensorUp=0; //此全局变量反馈经过滤波后“上感应器”当前电平的状态
}
}
else
{
Su16SensorUp_L_Cnt=0;
Su16SensorUp_H_Cnt++;

if(Su16SensorUp_H_Cnt>=SENSOR_TIME)
{
Su16SensorUp_H_Cnt=0;
vGu8SensorUp=1; //此全局变量反馈经过滤波后“上感应器”当前电平的状态
}
}
}
void T0_time() interrupt 1
{
VoiceScan();
KeyScan();
SensorScan(); //用来识别和滤波开关感应器
if(1==vGu8RunTimerFlag&&vGu16RunTimerCnt>0) //用于控制运动延时的定时器
{
vGu16RunTimerCnt--;
}
TH0=0xfc;
TL0=0x66;
}
void SystemInitial(void)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x66;
EA=1;
ET0=1;
TR0=1;
}
void Delay(unsigned long u32DelayTime)
{
for(;u32DelayTime>0;u32DelayTime--);
}
void PeripheralInitial(void)
{
//上电初始化气缸的开机位置

GoLeft() ; //“水平气缸”往左跑,上电初始化时滑块处于左边
GoUp(); //“垂直气缸”往上跑,上电初始化时“机械臂”处于上方
}
void BeepOpen(void)
{
P3_4=0;
}
void BeepClose(void)
{
P3_4=1;
}
void GoLeft(void) //“水平气缸”往左跑
{
P1_4=0;
}
void GoRight(void) //“水平气缸”往右跑
{
P1_4=1;
}
void GoUp(void) //“垂直气缸”往上跑
{
P1_5=0;
}
void GoDown(void) //“垂直气缸”往下跑
{
P1_5=1;
}
void VoiceScan(void)
{
static unsigned char Su8Lock=0;
if(1==vGu8BeepTimerFlag&&vGu16BeepTimerCnt>0)
{
if(0==Su8Lock)