从单片机基础到程序框架(全集 2019pdf版).pdf - 第670页
Gu8Part=1; / /进入“闪烁 模式” ,从“局部 1 ”开始闪烁 } else // 处于“闪烁 模式”的时候,将 退出到“没 有闪烁 ” ,隐 含“确定” 功能 { Gu8SetData _3=Gu8Edi tData_2*10+G u8EditDat a_1; //把个体合 并还原成 数据 Gu8Part=0; / /退出“闪烁 模式” Gu8WdUpdat e=1; //整屏更 新 } break; } vGu8Beep…

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; //两种状态的切换判断的中间变量

if(1==Gu8WdUpdate) //如果需要整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_4=1; //左起第 1 位数码管,显示窗口“1”,属于静态数据,起“装饰”作用。
Su8Temp_3=11; //左起第 2 位数码管,显示横杠“-”,属于静态数据,起“装饰”作用。
vGu8Display_Righ_4=Su8Temp_4; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_3=Su8Temp_3; //过渡需要显示的数据到底层驱动变量
//不显示任何一个小数点,属于静态数据,起“装饰”作用,切换窗口后只扫描一次的代码。
vGu8Display_Righ_Dot_4=0;
vGu8Display_Righ_Dot_3=0;
vGu8Display_Righ_Dot_2=0;
vGu8Display_Righ_Dot_1=0;
Gu8PartUpdate_1=1; //局部 1 更新显示
Gu8PartUpdate_2=1 ;//局部 2 更新显示
}
if(1==Gu8PartUpdate_1) //局部 1 更新显示
{
Gu8PartUpdate_1=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_2=Gu8EditData_2; //显示“十位”的临时中间个体,属于动态数据。
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
}
if(1==Gu8PartUpdate_2) //局部 2 更新显示
{
Gu8PartUpdate_2=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_1=Gu8EditData_1; //显示“个位”的临时中间个体,属于动态数据。
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
if(0==vGu16BlinkTimerCnt) //某位被选中的数码管跳动闪烁的定时器
{
vGu8BlinkTimerFlag=0;