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

Gu8RunSt ep=2; } else //往左跑 { if(Gu8RunC ounter<99 ) { Gu8RunCo unter++; / /往左边跑完 一次,运行的 计数器自加 1 } Gu8PartUpd ate_3=1; //局部 3 的更 新变量,更新 显示计数 器 Gu8RunSt ep=4; } } break; case 2 : if(1==Gu 8RunStatus& &0==vGu16R…

100%1 / 836
void main()
{
SystemInitial();
Delay(10000);
PeripheralInitial();
while(1)
{
KeyTask(); //按键的任务函数
DisplayTask(); //数码管显示的上层任务函数
RunTask(); //跑马灯的任务函数
}
}
void RunTask(void) //跑马灯的任务函数,放在主函数
{
if(0==Gu8RunStart) //如果是停止的状态
{
return; //如果是停止的状态,退出当前函数,不扫描余下代码。
}
switch(Gu8RunStep) //屡见屡爱的 switch 又来
{
case 0:
vGu8RunTimerFlag=0;
vGu16RunTimerCnt=0; //定时器清零
Gu8RunStep=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=Gu16RunSpeedTimeDate; //速度时间参数变量的大小,决定了速度
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Gu8RunStep=2;
}
else //往左跑
{
if(Gu8RunCounter<99)
{
Gu8RunCounter++; //往左边跑完一次,运行的计数器自加 1
}
Gu8PartUpdate_3=1; //局部 3 的更新变量,更新显示计数
Gu8RunStep=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=Gu16RunSpeedTimeDate; //速度时间参数变量的大小,决定了速度
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Gu8RunStep=3;
}
else //往左跑
{
Gu8RunStep=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=Gu16RunSpeedTimeDate; //速度时间参数变量的大小,决定了速度
vGu8RunTimerFlag=1; //启动定时器
//灵活切换“步骤变量”
if(0==Gu8RunDirection) //往右
{
Gu8RunStep=4;
}
else //往左跑
{
Gu8RunStep=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) //往右
{
if(Gu8RunCounter<99)
{
Gu8RunCounter++; //往右边跑完一次,运行的计数器自加 1
}
Gu8PartUpdate_3=1; //局部 3 的更新变量,更新显示计数
Gu8RunStep=1;
}
else //往左跑