从单片机基础到程序框架(全集 2019pdf版).pdf - 第734页
Gu8PartU pdate_1=1; //局部 1 的更新变量,更 新显示“速度 ” vGu8Beep TimerFlag=0 ; vGu16Bee pTimerCnt=V OICE_TIME; / /蜂鸣器发出 “滴”一声 vGu8Beep TimerFlag=1 ; break; } vGu8KeySec =0; break; case 2 : //【方向】按键 K2 switch(Gu8 Wd) //在某个窗口 下 { case…

{
Gu8RunStep=3;
}
}
break;
}
}
void KeyTask(void) //按键的任务函数
{
if(0==vGu8KeySec)
{
return;
}
switch(vGu8KeySec)
{
case 1: //【速度】按键 K1
switch(Gu8Wd) //在某个窗口下
{
case 1: //窗口 1。
//每按一次 K1 按键,Gu8RunSpeed 就在 1、2、3 三者之间切换,
//并且根据 Gu8RunSpeed 的数值,对 Gu16RunSpeedTimeDate 赋值
//不同的速度时间参数,从而控制速度档位。
if(1==Gu8RunSpeed)
{
Gu8RunSpeed=2; //“中”档
Gu16RunSpeedTimeDate=RUN_TIME_MIDDLE; //赋值“中”档的时间参数
}
else if(2==Gu8RunSpeed)
{
Gu8RunSpeed=3; //“快”档
Gu16RunSpeedTimeDate=RUN_TIME_FAST; //赋值“快”档的时间参数
}
else
{
Gu8RunSpeed=1; //“慢”档
Gu16RunSpeedTimeDate=RUN_TIME_SLOW; //赋值“慢”档的时间参数
}

Gu8PartUpdate_1=1; //局部 1 的更新变量,更新显示“速度”
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
break;
}
vGu8KeySec=0;
break;
case 2: //【方向】按键 K2
switch(Gu8Wd) //在某个窗口下
{
case 1: //窗口 1。
//每按一次 K2 按键,Gu8RunDirection 就在 0 和 1 之间切换,从而控制方向
if(0==Gu8RunDirection)
{
Gu8RunDirection=1;
}
else
{
Gu8RunDirection=0;
}
Gu8PartUpdate_2=1; //局部 2 更新显示,更新显示“方向”
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
break;
}
vGu8KeySec=0;
break;
case 3: //【启动暂停】按键 K3
switch(Gu8Wd) //在某个窗口下
{
case 1: //窗口 1。
if(0==Gu8RunStatus) //当跑马灯处于“停止”状态时
{
Gu8RunStep=0; //运行步骤从 0 开始
Gu8RunStart=1; //总开关“打开”。

Gu8RunStatus=1; //状态切换到“启动”状态
}
else if(1==Gu8RunStatus) //当跑马灯处于“启动”状态时
{
Gu8RunStatus=2; //状态切换到“暂停”状态
}
else //当跑马灯处于“暂停”状态时
{
Gu8RunStatus=1; //状态切换到“启动”状态
}
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=VOICE_TIME; //蜂鸣器发出“滴”一声
vGu8BeepTimerFlag=1;
break;
}
vGu8KeySec=0;
break;
}
}
void DisplayTask(void) //数码管显示的上层任务函数
{
switch(Gu8Wd) //以窗口选择 Gu8Wd 为支点,去执行对应的窗口显示函数。又一次用到 switch 语句
{
case 1:
Wd1(); //窗口 1。
break;
}
}
void Wd1(void) //窗口 1。
{
//需要借用的中间变量,用来拆分数据位。
static unsigned char Su8Temp_4,Su8Temp_3,Su8Temp_2,Su8Temp_1; //需要借用的中间变量
if(1==Gu8WdUpdate) //如果需要整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
//属于静态数据,起“装饰”作用,切换窗口后只扫描一次的代码。
vGu8Display_Righ_Dot_4=1; //显示小数点
vGu8Display_Righ_Dot_3=1; //显示小数点