从单片机基础到程序框架(全集 2019pdf版).pdf - 第648页
vGu8KeySec =0; break; case 3 : //递减的按键 switch(Gu8 Wd) //在某个窗口 下 { case 1: //在窗口 1 下 switch(G u8Part) //二级 支点的局部选 择 { case 1: //局部 1 被选 中,代表 左起第 1 位数据 G u8SetData_ 4 被选中。 if(Gu8SetD ata_4>0) { Gu8SetDa ta_4--; } PartUp…

{
Gu8SetData_4=9;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 2: //局部 2 被选中,代表左起第 2 位数据 Gu8SetData_3 被选中。
Gu8SetData_3++;
if(Gu8SetData_3>9)
{
Gu8SetData_3=9;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 3: //局部 3 被选中,代表左起第 3 位数据 Gu8SetData_2 被选中。
Gu8SetData_2++;
if(Gu8SetData_2>9)
{
Gu8SetData_2=9;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 4: //局部 4 被选中,代表左起第 4 位数据 Gu8SetData_1 被选中。
Gu8SetData_1++;
if(Gu8SetData_1>9)
{
Gu8SetData_1=9;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
}
break;
case 2: //在窗口 2 下(本节只用到窗口 1)
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;

vGu8KeySec=0;
break;
case 3: //递减的按键
switch(Gu8Wd) //在某个窗口下
{
case 1: //在窗口 1 下
switch(Gu8Part) //二级支点的局部选择
{
case 1: //局部 1 被选中,代表左起第 1 位数据 Gu8SetData_4 被选中。
if(Gu8SetData_4>0)
{
Gu8SetData_4--;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 2: //局部 2 被选中,代表左起第 2 位数据 Gu8SetData_3 被选中。
if(Gu8SetData_3>0)
{
Gu8SetData_3--;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 3: //局部 3 被选中,代表左起第 3 位数据 Gu8SetData_2 被选中。
if(Gu8SetData_2>0)
{
Gu8SetData_2--;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 4: //局部 4 被选中,代表左起第 4 位数据 Gu8SetData_1 被选中。
if(Gu8SetData_1>0)
{
Gu8SetData_1--;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
}
break;

case 2: //在窗口 2 下(本节只用到窗口 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: //窗口 2 显示选择(本节只用到窗口 1)
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=0;
vGu8Display_Righ_Dot_2=0;
vGu8Display_Righ_Dot_1=0;
Gu8PartUpdate_1=1; //局部 1 更新显示