从单片机基础到程序框架(全集 2019pdf版).pdf - 第582页

第一百一十一节: 工业自动化设备的开关信号的运动控制 。 【111.1 开关信号的运动控制。 】 上图 11 1.1.1 独立按键 上图 11 1.1.2 LED 电路 上图 11 1.1.3 有源蜂鸣器 的电路 本节涉及的 知识点有, switch 的过程控制, 时间 延时, 开 关感应器 的软件滤波 , 工件计数器 , 以及整体 的软件框架 。 现在 有一台 设备 ,水 平方向 有一 个滑 块,能 左右 移动, 滑块 上安 装了一 …

100%1 / 836
Su8RunStep=4;
}
else //往左跑
{
Su8RunStep=2;
}
}
break;
case 4:
if(1==Gu8RunStatus&&0==vGu16RunTimerCnt) //当前处于“启动”状态,并且定时器等于 0
{
P1_4=1; //第 1 个灯
P1_5=1; //第 2 个灯
P1_6=1; //第 3 个灯
P3_3=0; //第 4 个灯
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=Gu16RunSpeedTimeDate; //速度时间参数变量的大小,决定了速度
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Su8RunStep=1;
}
else //往左跑
{
Su8RunStep=3;
}
}
break;
}
}
第一百一十一节: 工业自动化设备的开关信号的运动控制
【111.1 开关信号的运动控制。
上图 111.1.1 独立按键
上图 111.1.2 LED 电路
上图 111.1.3 有源蜂鸣器的电路
本节涉及的知识点有,switch 的过程控制,时间延时,关感应器的软件滤波工件计数器以及整体
的软件框架
现在有一台设备,水平方向有一个滑块,能左右移动,滑块上安装了一个能垂直伸缩的“机械手
下启动按键后,滑块先从左边往右边移动,移到最右边碰到“右感应器”后,滑块上的“机械手”开始往下
移动 2 ,移动 2 秒后开始原路返回,机械手”向上移动,碰到“上感应器”后,滑块开始往左边移动
移动 3 秒后默认已经回到原位最左边,此时“计数器”累加 1,完成一次过程,如果再按下启动按键,继
重复这个过程。
这个设备用 2 个气缸。1 个“水平气缸”驱动滑块水平方向的左右移动,当控制“水平气缸”的输出
信号为 0 时往左边跑当控制“水平气缸”的输出信号 1 时往右边跑 1 “垂直气缸驱动机械手”
的上下移动,当控制“垂直气缸”的输出信号为 0 时往上边跑,当控制“垂直气缸”的输出信号为 1 时往下
边跑。
这个设备用 2 开关感应器。分别是“右感应器”和“上感应器当感应器没有被碰到的时候信号
1,当感应器被碰到的时候信号为 0。
这个设备用 1 个独立按键。控制运动的启动。
2 个气缸是输出信号, P1.4 P1.5 所控制的两 LED 模拟。2 个开关感应器是输入信号, K2 K3
这两个独立按键模拟。1 个独立按键用 K1 按键。如上图。
#include "REG52.H"
#define KEY_VOICE_TIME 50
#define KEY_FILTER_TIME 25
#define SENSOR_TIME 20 //开关感应器的“滤波”时间
void T0_time();
void SystemInitial(void) ;
void Delay(unsigned long u32DelayTime) ;
void PeripheralInitial(void) ;
void BeepOpen(void);
void BeepClose(void);
void GoLeft(void) ; //“水平气缸”往左跑
void GoRight(void); //“水平气缸”往右跑
void GoUp(void); //“垂直气缸”往上
void GoDown(void); //“垂直气缸”往下
void VoiceScan(void);
void SensorScan(void); //开关感应器的消抖,在定时中断里调用处理
void KeyScan(void);
void KeyTask(void);
void RunTask(void); //运动控制的任务函数
sbit P1_4=P1^4; //水平气缸的输出
sbit P1_5=P1^5; //垂直气缸的输出
sbit P3_4=P3^4; //蜂鸣器的输出口