从单片机基础到程序框架(全集 2019pdf版) - 第709页
{ case 1 : //按键 K1 的“短按” 。在 “闪烁模式 ”下切换数码 管的窗口。 switch(Gu8 Wd) //在某个窗口 下 { case 2 : //窗口 2。修改“时” 的“1-HH”窗口 。 Gu8Wd=3; / /切换到窗 口 3 的“2-MM”窗口 Gu8WdUpd ate=1; //整 屏更新 break; case 3 : //窗口 3。修改“分” 的“2-MM”窗口 。 Gu8Wd=4; / /切换到窗…

unsigned char Gu8EditData_1=0; //是中间变量,用于编辑窗口“1-HH”下的 HH 数据。
unsigned char Gu8EditData_2=0; //是中间变量,用于编辑窗口“2-MM”下的 MM 数据。
unsigned char Gu8EditData_3=0; //是中间变量,用于编辑窗口“3-SS”下的 SS 数据。
unsigned char Gu8Wd=0; //窗口选择变量。人机交互程序框架的支点。
unsigned char Gu8WdUpdate=0; //整屏更新变量。
unsigned char Gu8PartUpdate_1=0; //局部 1 的更新变量,
unsigned char Gu8PartUpdate_2=0; //局部 2 的更新变量
unsigned char Gu8PartUpdate_3=0; //局部 3 的更新变量,
volatile unsigned char vGu8Display_Righ_4=0;
volatile unsigned char vGu8Display_Righ_3=0;
volatile unsigned char vGu8Display_Righ_2=0;
volatile unsigned char vGu8Display_Righ_1=0;
volatile unsigned char vGu8Display_Righ_Dot_4=0;
volatile unsigned char vGu8Display_Righ_Dot_3=1; //开机默认保留显示 2 个小数点
volatile unsigned char vGu8Display_Righ_Dot_2=0;
volatile unsigned char vGu8Display_Righ_Dot_1=0;
volatile unsigned char vGu8KeySec=0;
void main()
{
SystemInitial();
Delay(10000);
PeripheralInitial();
while(1)
{
KeyTask(); //按键的任务函数
DisplayTask(); //数码管显示的上层任务函数
}
}
void KeyTask(void) //按键的任务函数
{
if(0==vGu8KeySec)
{
return;
}
switch(vGu8KeySec)

{
case 1: //按键 K1 的“短按”。在“闪烁模式”下切换数码管的窗口。
switch(Gu8Wd) //在某个窗口下
{
case 2: //窗口 2。修改“时”的“1-HH”窗口。
Gu8Wd=3; //切换到窗口 3 的“2-MM”窗口
Gu8WdUpdate=1; //整屏更新
break;
case 3: //窗口 3。修改“分”的“2-MM”窗口。
Gu8Wd=4; //切换到窗口 4 的“3-SS”窗口
Gu8WdUpdate=1; //整屏更新
break;
case 4: //窗口 4。修改“秒”的“3-SS”窗口。
Gu8Wd=2; //切换到窗口 2 的“1-HH”窗口
Gu8WdUpdate=1; //整屏更新
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;
case 2: //按键 K2[加键]
switch(Gu8Wd) //在某个窗口下
{
case 2: //窗口 2。修改“时”的“1-HH”窗口。
if(Gu8EditData_1<23) //“时”的范围是 0 到 23
{
Gu8EditData_1++;
}
Gu8PartUpdate_1=1; //局部 1 更新显示
break;
case 3: //窗口 3。修改“分”的“2-MM”窗口。
if(Gu8EditData_2<59) //“分”的范围是 0 到 59
{
Gu8EditData_2++;
}

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 更新显示