从单片机基础到程序框架(全集 2019pdf版).pdf - 第711页
break; } vGu8BeepTi merFlag=0 ; vGu16BeepT imerCnt=V OICE_TIME; //蜂鸣 器发出“ 滴”一声 vGu8BeepTi merFlag=1 ; vGu8KeySec =0; break; case 4 : //K1 按 键的“长按 ”,具有进入 和退出“闪烁 模式”的功 能。 “退出 ”隐含“确定 ” switch(Gu8 Wd) //在某个窗口 下 { case 1: //窗…

Gu8PartUpdate_1=1; //局部 1 更新显示
break;
case 4: //窗口 4。修改“秒”的“3-SS”窗口。
if(Gu8EditData_3<59) //“秒”的范围是 0 到 59
{
Gu8EditData_3++;
}
Gu8PartUpdate_1=1; //局部 1 更新显示
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;
case 3: //按键 K3[减键]与[开始健]
switch(Gu8Wd) //在某个窗口下
{
case 2: //窗口 2。修改“时”的“1-HH”窗口。
if(Gu8EditData_1>0)
{
Gu8EditData_1--;
}
Gu8PartUpdate_1=1; //局部 1 更新显示
break;
case 3: //窗口 3。修改“分”的“2-MM”窗口。
if(Gu8EditData_2>0)
{
Gu8EditData_2--;
}
Gu8PartUpdate_1=1; //局部 1 更新显示
break;
case 4: //窗口 4。修改“秒”的“3-SS”窗口。
if(Gu8EditData_3>0)
{
Gu8EditData_3--;
}
Gu8PartUpdate_1=1; //局部 1 更新显示

break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;
case 4: //K1 按键的“长按”,具有进入和退出“闪烁模式”的功能。“退出”隐含“确定”
switch(Gu8Wd) //在某个窗口下
{
case 1: //窗口 1。时钟正常工作的窗口。
vGu8ClockTimerFlag=0; //停止时钟的定时器
Gu8EditData_1=vGu32ClockTimerCnt/3600000; //分解成“时”个体
Gu8EditData_2=vGu32ClockTimerCnt%3600000/60000; //分解成“分”个体
Gu8EditData_3=vGu32ClockTimerCnt%3600000%60000/1000; //分解成“秒”个体
Gu8Wd=2; //切换到窗口 2 的“1-HH”的闪烁窗口
Gu8WdUpdate=1; //整屏更新
break;
case 2: //窗口 2。修改时钟时间的“1-HH”的闪烁窗口
case 3: //窗口 3。修改时钟时间的“2-MM”的闪烁窗口
case 4: //窗口 4。修改时钟时间的“3-SS”的闪烁窗口
//把个体合并还原成当前时钟时间的数据
vGu32ClockTimerCnt=Gu8EditData_1*3600000+Gu8EditData_2*60000+Gu8EditData_3*1000;
vGu8ClockTimerFlag=1; //启动时钟的定时器
Gu8Wd=1; //切换到窗口 1 的正常工作的窗口
Gu8WdUpdate=1; //整屏更新
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;

}
}
void DisplayTask(void) //数码管显示的上层任务函数
{
switch(Gu8Wd) //以窗口选择 Gu8Wd 为支点,去执行对应的窗口显示函数。又一次用到 switch 语句
{
case 1:
Wd1(); //窗口 1。时钟正常运行的窗口
break;
case 2:
Wd2(); //窗口 2。修改“时”的“1-HH”窗口
break;
case 3:
Wd3(); //窗口 3。修改“分”的“2-MM”窗口
break;
case 4:
Wd4(); //窗口 4。修改“秒”的“3-SS”窗口
break;
}
}
void Wd1(void) //窗口 1。时钟正常运行的窗口
{
//需要借用的中间变量,用来拆分数据位。
static unsigned char Su8Temp_4,Su8Temp_3,Su8Temp_2,Su8Temp_1; //需要借用的中间变量
static unsigned char Su8BlinkFlag=0; //两种状态的切换判断的中间变量
if(1==Gu8WdUpdate) //如果需要整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
//属于静态数据,起“装饰”作用,切换窗口后只扫描一次的代码。
vGu8Display_Righ_Dot_4=0;
vGu8Display_Righ_Dot_3=1; //保留显示 2 位小数点
vGu8Display_Righ_Dot_2=0;
vGu8Display_Righ_Dot_1=0;
Gu8PartUpdate_1=1; //局部 1 更新显示
}
if(1==Gu8PartUpdate_1) //局部 1 更新显示,更新显示一次数据和闪烁的的小数点
{