从单片机基础到程序框架(全集 2019pdf版) - 第735页

Gu8RunSt atus=1; //状态 切换到“启动” 状态 } else i f(1==Gu8RunS tatus) //当跑 马灯处于“ 启动”状态 时 { Gu8RunSt atus=2; //状态 切换到“暂停” 状态 } else //当跑 马灯处于“暂 停”状态 时 { Gu8RunSt atus=1; //状态 切换到“启动” 状态 } vGu8Beep TimerFlag=0 ; vGu16Bee pTimerCnt…

100%1 / 836
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; //显示小数点
vGu8Display_Righ_Dot_2=0;
vGu8Display_Righ_Dot_1=0;
Gu8PartUpdate_1=1; //局部 1 更新显示
Gu8PartUpdate_2=1; //局部 2 更新显示
Gu8PartUpdate_3=1; //局部 3 更新显示
}
if(1==Gu8PartUpdate_1) //局部 1 更新显示,速度
{
Gu8PartUpdate_1=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_4=Gu8RunSpeed;
vGu8Display_Righ_4=Su8Temp_4; //过渡需要显示的数据到底层驱动变量
}
if(1==Gu8PartUpdate_2) //局部 2 更新显示,方向
{
Gu8PartUpdate_2=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
if(0==Gu8RunDirection) //往右
{
Su8Temp_3=13; //数码管的字模转换表序号 13 代表显示字符“r”
}
else
{
Su8Temp_3=12; //数码管的字模转换表序号 12 代表显示字符“L”
}
vGu8Display_Righ_3=Su8Temp_3; //过渡需要显示的数据到底层驱动变量
}
if(1==Gu8PartUpdate_3) //局部 3 更新显示,计数
{
Gu8PartUpdate_3=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_2=Gu8RunCounter%100/10; //提取十位
Su8Temp_1=Gu8RunCounter%10/1; //提取个位
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
}