从单片机基础到程序框架(全集 2019pdf版).pdf - 第717页
if(1==Gu 8PartUpdate _1) //局部 1 更新 显示 { Gu8PartU pdate_1=0; //及时清零, 只更新一次 显示即可 ,避免一直进 来更新显示 Su8Temp_ 2=Gu8EditDa ta_3/10; / /显示“秒”的 十位 Su8Temp_ 1=Gu8EditDa ta_3%10; / /显示“秒”的 个位 vGu8Disp lay_Righ_2= Su8Temp_2; / /过渡需要显 示…

{
vGu8BlinkTimerFlag=0;
vGu16BlinkTimerCnt=BLINK_TIME; //重设定时器的定时时间
vGu8BlinkTimerFlag=1;
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_2=10; //10 代表不显示
Su8Temp_1=10; //10 代表不显示
}
else
{
Su8BlinkFlag=0;
Su8Temp_2=Gu8EditData_2/10; //显示“分”的十位
Su8Temp_1=Gu8EditData_2%10; //显示“分”的个位
}
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
}
void Wd4(void) //窗口 4。修改“秒”的“3-SS”窗口。
{
//需要借用的中间变量,用来拆分数据位。
static unsigned char Su8Temp_2,Su8Temp_1; //需要借用的中间变量
static unsigned char Su8BlinkFlag=0; //两种状态的切换判断的中间变量
if(1==Gu8WdUpdate) //如果需要整屏更新
{
Gu8WdUpdate=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
//属于静态数据,起“装饰”作用,切换窗口后只扫描一次的代码。
vGu8Display_Righ_4=3; //显示数字“3”
vGu8Display_Righ_3=11; //显示横杠“-”
vGu8Display_Righ_Dot_4=0;
vGu8Display_Righ_Dot_3=0;
vGu8Display_Righ_Dot_2=0;
vGu8Display_Righ_Dot_1=0;
Gu8PartUpdate_1=1; //局部 1 更新显示
}

if(1==Gu8PartUpdate_1) //局部 1 更新显示
{
Gu8PartUpdate_1=0; //及时清零,只更新一次显示即可,避免一直进来更新显示
Su8Temp_2=Gu8EditData_3/10; //显示“秒”的十位
Su8Temp_1=Gu8EditData_3%10; //显示“秒”的个位
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
if(0==vGu16BlinkTimerCnt) //某位被选中的数码管跳动闪烁的定时器
{
vGu8BlinkTimerFlag=0;
vGu16BlinkTimerCnt=BLINK_TIME; //重设定时器的定时时间
vGu8BlinkTimerFlag=1;
if(0==Su8BlinkFlag) //两种状态的切换判断
{
Su8BlinkFlag=1;
Su8Temp_2=10; //10 代表不显示
Su8Temp_1=10; //10 代表不显示
}
else
{
Su8BlinkFlag=0;
Su8Temp_2=Gu8EditData_3/10; //显示“秒”的十位
Su8Temp_1=Gu8EditData_3%10; //显示“秒”的个位
}
vGu8Display_Righ_2=Su8Temp_2; //过渡需要显示的数据到底层驱动变量
vGu8Display_Righ_1=Su8Temp_1; //过渡需要显示的数据到底层驱动变量
}
}
void KeyScan(void) //按键底层的驱动扫描函数,放在定时中断函数里
{
static unsigned char Su8KeyShortFlag=0; //按键“短按”触发的标志
static unsigned char Su8KeyLock1;
static unsigned int Su16KeyCnt1;
static unsigned char Su8KeyLock2;
static unsigned int Su16KeyCnt2;

static unsigned char Su8KeyLock3;
static unsigned int Su16KeyCnt3;
//需要详细分析以下这段“短按”与“长按”代码的朋友,请参考第 96 节。
if(0!=KEY_INPUT1)
{
Su8KeyLock1=0;
Su16KeyCnt1=0;
if(1==Su8KeyShortFlag)
{
Su8KeyShortFlag=0;
vGu8KeySec=1; //触发 K1 的“短按”
}
}
else if(0==Su8KeyLock1)
{
Su16KeyCnt1++;
if(Su16KeyCnt1>=KEY_FILTER_TIME)
{
Su8KeyShortFlag=1;
}
if(Su16KeyCnt1>=KEY_LONG_TIME)
{
Su8KeyLock1=1;
Su8KeyShortFlag=0;
vGu8KeySec=4; //触发 K1 的“长按”
}
}
if(0!=KEY_INPUT2)
{
Su8KeyLock2=0;
Su16KeyCnt2=0;
}
else if(0==Su8KeyLock2)
{
Su16KeyCnt2++;
if(Su16KeyCnt2>=KEY_FILTER_TIME)
{
Su8KeyLock2=1;
vGu8KeySec=2;
}