从单片机基础到程序框架(全集 2019pdf版).pdf - 第678页
if(Su16Key Cnt1>=KEY _LONG_TIME) { Su8KeyLock 1=1; Su8KeyShor tFlag=0; vGu8KeySec =4; //触发 K 1 的“长按” } } if(0!=KEY_ INPUT2) { Su8KeyLock 2=0; Su16KeyCnt 2=0; } else if(0= =Su8KeyLo ck2) { Su16KeyCnt 2++; if(Su16Key Cn…

default: //都没有被选中的时候
Su8Temp_2=Gu8EditData_2; //显示“十位”的临时中间个体,属于动态数据。
Su8Temp_1=Gu8EditData_1; //显示“个位”的临时中间个体,属于动态数据。
break;
}
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;
}
}
if(0!=KEY_INPUT3)
{
Su8KeyLock3=0;
Su16KeyCnt3=0;
}
else if(0==Su8KeyLock3)
{
Su16KeyCnt3++;
if(Su16KeyCnt3>=KEY_FILTER_TIME)
{
Su8KeyLock3=1;
vGu8KeySec=3;
}
}
}
void DisplayScan(void) //数码管底层的驱动扫描函数,放在定时中断函数里
{
static unsigned char Su8GetCode;
static unsigned char Su8ScanStep=1;

if(0==vGu16ScanTimerCnt)
{
P0=0x00;
P1_0=1;
P1_1=1;
P1_2=1;
P1_3=1;
switch(Su8ScanStep)
{
case 1:
Su8GetCode=Cu8DigTable[vGu8Display_Righ_1];
if(1==vGu8Display_Righ_Dot_1)
{
Su8GetCode=Su8GetCode|0x80;
}
P0=Su8GetCode;
P1_0=0;
P1_1=1;
P1_2=1;
P1_3=1;
break;
case 2:
Su8GetCode=Cu8DigTable[vGu8Display_Righ_2];
if(1==vGu8Display_Righ_Dot_2)
{
Su8GetCode=Su8GetCode|0x80;
}
P0=Su8GetCode;
P1_0=1;
P1_1=0;
P1_2=1;
P1_3=1;
break;
case 3:
Su8GetCode=Cu8DigTable[vGu8Display_Righ_3];
if(1==vGu8Display_Righ_Dot_3)
{