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

P3_3=1; //第 4 个灯 灭 vGu8RunT imerFlag=0; vGu16Run TimerCnt=RU N_TIME; //用于 控制跑马灯跑 动速度的定时 器 vGu8RunT imerFlag=1; //启动 定时器 //灵活切换 “步骤变量” if(0==Gu 8RunDirecti on) //往右 跑 { Su8RunSt ep=2; } else //往左跑 { Su8RunSt ep=4; } } bre…

100%1 / 836
break;
}
}
/* 注释二:
* “方向”的控制,是通过 Gu8RunDirection 的判断,来灵活切换 switch 的“步骤变量”来达
* 随心所欲的过程控制。
*/
void RunTask(void) //跑马灯的任务函数,放在主函数
{
static unsigned char Su8RunStep=0; //运行的步骤
//当总开关处于“停止”并且“步骤不为 0”时,强制把步骤归零,跑马灯初始化。
if(0!=Su8RunStep&&0==Gu8RunStart)
{
Su8RunStep=0; //步骤归零
//跑马灯处于初始化的状态
P1_4=0; //第 1 个灯
P1_5=1; //第 2 个灯
P1_6=1; //第 3 个灯
P3_3=1; //第 4 个灯
}
switch(Su8RunStep) //屡见屡爱的 switch 又来
{
case 0:
if(1==Gu8RunStart) //总开关“打开
{
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=0; //定时器清零
Su8RunStep=1; //切换到下一步,启
}
break;
case 1:
if(1==Gu8RunStatus&&0==vGu16RunTimerCnt) //当前处于“启动”状态,并且定时器等于 0
{
P1_4=0; //第 1 个灯
P1_5=1; //第 2 个灯
P1_6=1; //第 3 个灯
P3_3=1; //第 4 个灯
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=RUN_TIME; //用于控制跑马灯跑动速度的定时
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Su8RunStep=2;
}
else //往左跑
{
Su8RunStep=4;
}
}
break;
case 2:
if(1==Gu8RunStatus&&0==vGu16RunTimerCnt) //当前处于“启动”状态,并且定时器等于 0
{
P1_4=1; //第 1 个灯
P1_5=0; //第 2 个灯
P1_6=1; //第 3 个灯
P3_3=1; //第 4 个灯
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=RUN_TIME; //用于控制跑马灯跑动速度的定时
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Su8RunStep=3;
}
else //往左跑
{
Su8RunStep=1;
}
}
break;
case 3:
if(1==Gu8RunStatus&&0==vGu16RunTimerCnt) //当前处于“启动”状态,并且定时器等于 0
{
P1_4=1; //第 1 个灯
P1_5=1; //第 2 个灯
P1_6=0; //第 3 个灯
P3_3=1; //第 4 个灯
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=RUN_TIME; //用于控制跑马灯跑动速度的定时
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
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=RUN_TIME; //用于控制跑马灯跑动速度的定时
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Su8RunStep=1;
}
else //往左跑
{
Su8RunStep=3;
}