从单片机基础到程序框架(全集 2019pdf版).pdf - 第669页
vGu8BeepTi merFlag=1 ; vGu8KeySec =0; break; case 4 : //K1 按 键的“长按 ”,具有进入 和退出“闪烁 模式”的功 能。 “退出 ”隐含“确定 ” switch(Gu8 Wd) //在某个窗口 下 { case 1: //在窗口 1 下 if(0==Gu 8Part) //处于“ 没有闪烁” 的时候,将 进入“闪烁模式 ” { Gu8EditDat a_2=Gu8Se tData…

Gu8EditData_1=9;
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
}
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;
case 3: //递减按键 K3
switch(Gu8Wd) //在某个窗口下
{
case 1: //在窗口 1 下
case 2: //在窗口 2 下,窗口 2 与窗口 1 的代码完全一模一样,因此可以这样共享
case 3: //在窗口 3 下,窗口 3 与窗口 1 的代码完全一模一样,因此可以这样共享
switch(Gu8Part) //二级支点的局部选择
{
case 1: //局部 1 被选中,代表左起第 3 位数码管被选中。
if(Gu8EditData_2>0)
{
Gu8EditData_2--; //编辑“十位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
case 2: //局部 2 被选中,代表左起第 4 位数码管被选中。
if(Gu8EditData_1>0)
{
Gu8EditData_1--; //编辑“个位”个体的中间变量
}
PartUpdate(Gu8Part); //当前局部更新显示输出到数码管
break;
}
break;
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声

vGu8BeepTimerFlag=1;
vGu8KeySec=0;
break;
case 4: //K1 按键的“长按”,具有进入和退出“闪烁模式”的功能。“退出”隐含“确定”
switch(Gu8Wd) //在某个窗口下
{
case 1: //在窗口 1 下
if(0==Gu8Part) //处于“没有闪烁”的时候,将进入“闪烁模式”
{
Gu8EditData_2=Gu8SetData_1/10%10; //先把“待编辑数据”分解成中间个体
Gu8EditData_1=Gu8SetData_1/1%10; //先把“待编辑数据”分解成中间个体
Gu8Part=1; //进入“闪烁模式”,从“局部 1”开始闪烁
}
else //处于“闪烁模式”的时候,将退出到“没有闪烁”,隐含“确定”功能
{
Gu8SetData_1=Gu8EditData_2*10+Gu8EditData_1; //把个体合并还原成数据
Gu8Part=0; //退出“闪烁模式”
Gu8WdUpdate=1; //整屏更新
}
break;
case 2: //在窗口 2 下
if(0==Gu8Part) //处于“没有闪烁”的时候,将进入“闪烁模式”
{
Gu8EditData_2=Gu8SetData_2/10%10; //先把“待编辑数据”分解成中间个体
Gu8EditData_1=Gu8SetData_2/1%10; //先把“待编辑数据”分解成中间个体
Gu8Part=1; //进入“闪烁模式”,从“局部 1”开始闪烁
}
else //处于“闪烁模式”的时候,将退出到“没有闪烁”,隐含“确定”功能
{
Gu8SetData_2=Gu8EditData_2*10+Gu8EditData_1; //把个体合并还原成数据
Gu8Part=0; //退出“闪烁模式”
Gu8WdUpdate=1; //整屏更新
}
break;
case 3: //在窗口 3 下
if(0==Gu8Part) //处于“没有闪烁”的时候,将进入“闪烁模式”
{
Gu8EditData_2=Gu8SetData_3/10%10; //先把“待编辑数据”分解成中间个体
Gu8EditData_1=Gu8SetData_3/1%10; //先把“待编辑数据”分解成中间个体

Gu8Part=1; //进入“闪烁模式”,从“局部 1”开始闪烁
}
else //处于“闪烁模式”的时候,将退出到“没有闪烁”,隐含“确定”功能
{
Gu8SetData_3=Gu8EditData_2*10+Gu8EditData_1; //把个体合并还原成数据
Gu8Part=0; //退出“闪烁模式”
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 显示函数
break;
case 3:
Wd3(); //窗口 3 显示函数
break;
}
}
void Wd1(void) //窗口 1 显示函数
{
//需要借用的中间变量,用来拆分数据位。
static unsigned char Su8Temp_4,Su8Temp_3,Su8Temp_2,Su8Temp_1; //需要借用的中间变量
static unsigned char Su8BlinkFlag=0; //两种状态的切换判断的中间变量