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

else { return; //其余 的按键则拦截 退出 } } switch(v Gu8KeySec) { case 1 : //按键 K1 的“短按” 。切 换数码管闪烁 的位。 switch(Gu8 Wd) //在某个窗口 下 { case 1 : //在窗口 1 下 if(0!=Gu8P art) //处于“ 闪烁模式”的时 候,是“切换 局部” { PartUpda te(Gu8Part) ; //切换之前的 局部进行更新 …

100%1 / 836
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)
{
Gu8EditData_4++; //编辑“千位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 2: //局部 2 被选中,代表右起第 3 位数码管被选中。
if(Gu8EditData_3<9)
{
Gu8EditData_3++; //编辑“百位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 3: //局部 3 被选中,代表右起第 2 位数码管被选中。
if(Gu8EditData_2<9)
{
Gu8EditData_2++; //编辑“十位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 4: //局部 4 被选中,代表右起第 1 位数码管被选中。
if(Gu8EditData_1<9)
{
Gu8EditData_1++; //编辑“个位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
}
break;
}
}
else //处于“没有闪烁”的时候,是[复位健]
{
Gu8EditData_4=Gu32SetData_Countdown/10000%10; //分解成“十秒”个体
Gu8EditData_3=Gu32SetData_Countdown/1000%10; //分解成“个秒”个体
Gu8EditData_2=Gu32SetData_Countdown/100%10; //分解成“百毫秒”个体
Gu8EditData_1=Gu32SetData_Countdown/10%10; //分解成“十毫秒”个
Gu8RunStatus=0; //倒计时返回停止的状态
Gu8RunStart=0; //倒计时的运行步骤的停止
Gu8RunStep=0; //总运行步骤归零。建议跟 vGu8RunStart 成双成对出现