从单片机基础到程序框架(全集 2019pdf版).pdf - 第688页
vGu8Upda teTimerFlag =1; Gu8WdUpd ate=1; //整屏更 新一次显示 当前倒计时的 时间 if(0==vG u32Countdow nTimerCnt) / /如果倒 计时的时间 到,则跳转到 结束的步骤 { Gu8RunSt ep=2; //跳转 到倒计时结束 的步骤 } } break; case 2: //倒计 时结束的步骤 //Gu8RunSt atus=0; / /这行代码注释掉, 让每次 …

{
switch(u8Part)
{
case 1:
Gu8PartUpdate_1=1;
break;
case 2:
Gu8PartUpdate_2=1;
break;
case 3:
Gu8PartUpdate_3=1;
break;
case 4:
Gu8PartUpdate_4=1;
break;
}
}
void RunTask(void) //倒计时的应用程序
{
if(0==Gu8RunStart)
{
return; // 如果总开关处于停止状态,则直接退出当前函数,不执行该函数以下的其它代码
}
switch(Gu8RunStep)
{
case 0: //在这个步骤里,主要用来初始化一些参数
vGu8UpdateTimerFlag=0;
vGu16UpdateTimerCnt=10; //每 10ms 更新显示一次当前倒计时的时间
vGu8UpdateTimerFlag=1;
Gu8RunStep=1; //跳转到每 10ms 更新显示一次的步骤里
break;
case 1: //每 10ms 更新一次显示,确保实时显示当前倒计时的时间
if(0==vGu16UpdateTimerCnt) //每 10ms 更新显示一次当前倒计时的时间
{
vGu8UpdateTimerFlag=0;
vGu16UpdateTimerCnt=10; //重置定时器,为下一个 10ms 更新做准备

vGu8UpdateTimerFlag=1;
Gu8WdUpdate=1; //整屏更新一次显示当前倒计时的时间
if(0==vGu32CountdownTimerCnt) //如果倒计时的时间到,则跳转到结束的步骤
{
Gu8RunStep=2; //跳转到倒计时结束的步骤
}
}
break;
case 2: //倒计时结束的步骤
//Gu8RunStatus=0; //这行代码注释掉,让每次新启动之前都必须按一次 K1 复位按键才有效
Gu8RunStart=0; //倒计时的运行步骤的停止
Gu8RunStep=0; //总运行步骤归零。建议跟 vGu8RunStart 成双成对出现
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
Gu8WdUpdate=1; //整屏更新一次显示当前倒计时的时间
break;
}
}
void KeyTask(void) //按键的任务函数
{
if(0==vGu8KeySec)
{
return;
}
if(0!=Gu8RunStatus) //在“非停止”状态下,用 return 来拦截一些“不该响应”的按键
{
if(2==vGu8KeySec) //在“非停止”状态下,只响应[复位]这个按键
{
; //这里没有 return 语句,表示可以继续往下扫描本函数余下的代码,没有被拦截。
}

else
{
return; //其余的按键则拦截退出
}
}
switch(vGu8KeySec)
{
case 1: //按键 K1 的“短按”。切换数码管闪烁的位。
switch(Gu8Wd) //在某个窗口下
{
case 1: //在窗口 1 下
if(0!=Gu8Part) //处于“闪烁模式”的时候,是“切换局部”
{
PartUpdate(Gu8Part); //切换之前的局部进行更新。
Gu8Part++; //切换局部
if(Gu8Part>4)
{
Gu8Part=1;
}
PartUpdate(Gu8Part); //切换之后的局部进行更新。
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
}
break;
}
vGu8KeySec=0;
break;
case 2: //按键 K2[加键]与[复位健]
if(0!=Gu8Part) //处于“闪烁模式”的时候,是[加键]
{
switch(Gu8Wd) //在某个窗口下
{
case 1: //在窗口 1 下
switch(Gu8Part) //二级支点的局部选择
{
case 1: //局部 1 被选中,代表右起第 4 位数码管被选中。
if(Gu8EditData_4<9)