从单片机基础到程序框架(全集 2019pdf版).pdf - 第591页
Su8RunSt ep=4; //切换 到下一步 } break; case 4 : if(0==vG u16RunTimer Cnt) //当定时的 2 秒时间到,完成一 次过程 。 { Gu16RunC nt++; //计数器加 1, 统计设备 运行的次数 Gu8RunSt atus=0; //及时 设置 Gu8Ru nStatus 的运动状态 为“停止 ” Gu8RunSt art=0; //总开关 “关闭” ,为 下一次启动作 …

//当总开关处于“停止”并且“步骤不为 0”时,强制把步骤归零。
if(0!=Su8RunStep&&0==Gu8RunStart)
{
Su8RunStep=0; //步骤归零
}
switch(Su8RunStep) //屡见屡爱的 switch 又来了
{
case 0:
if(1==Gu8RunStart) //总开关“打开”
{
Gu8RunStatus=1; //及时设置 Gu8RunStatus 的运动状态为“运行”
GoRight() ; //“水平气缸”往右跑。P1.4 的 LED 灯“灭”。
Su8RunStep=1; //切换到下一步
}
break;
case 1:
if(0==vGu8SensorRight) //直到碰到了“右感应器”(按下 K2),“机械臂”才往下移动。
{
GoDown(); //“垂直气缸”往下跑。P1.5 的 LED 灯“灭”。
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=Gu16GoDownTime; //向下移动 3 秒的延时赋值
vGu8RunTimerFlag=1; //启动定时器
Su8RunStep=2; //切换到下一步
}
break;
case 2:
if(0==vGu16RunTimerCnt) //当定时的 3 秒时间到,“机械臂”才往上移动,开始原路返回。
{
GoUp(); //“垂直气缸”往上跑。P1.5 的 LED 灯“亮”。
Su8RunStep=3; //切换到下一步
}
break;
case 3:
if(0==vGu8SensorUp) //直到碰到了“上感应器”(按下 K3),滑块才往左移动。
{
GoLeft() ; //“水平气缸”往左跑。P1.4 的 LED 灯“亮”。
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=Gu16ReturnLeftTime; //向左移动 2 秒的延时赋值
vGu8RunTimerFlag=1; //启动定时器

Su8RunStep=4; //切换到下一步
}
break;
case 4:
if(0==vGu16RunTimerCnt) //当定时的 2 秒时间到,完成一次过程。
{
Gu16RunCnt++; //计数器加 1,统计设备运行的次数
Gu8RunStatus=0; //及时设置 Gu8RunStatus 的运动状态为“停止”
Gu8RunStart=0; //总开关“关闭”,为下一次启动作准备
Su8RunStep=0; //步骤变量清零,为下一次启动作准备
}
break;
}
}

第一百一十二节: 数码管显示的基础知识。
【112.1 数码管显示的基础知识。】
上图 112.1.1 数码管
上图 112.1.2 等效图
如上图 112.1.1,一个数码管内部有 8 个段码,每个段码内部对应一颗能发光的 LED 灯,把相关位置的