从单片机基础到程序框架(全集 2019pdf版).pdf - 第529页
Su16KeyC nt=0; Su8Colum nRecord++; if(Su8Co lumnRecord> =3) { Su8Colum nRecord=0; } } break; /*-------- -S9 按键的专属 区-------- --------* / case 6: if(1==RO W_INPUT1&&1 ==ROW_INPU T2&&0==ROW_ INPUT3) // 仅判…

}
break;
/*---------S1 按键的专属区----------------*/
case 4:
if(0==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3) //仅判断 S1 按键,避免交叉影响
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_ENTER_CONTINUITY_TIME)//该时间是“单击”与“连击”的分界线
{
Su16KeyCnt=0; //计时器清零,为即将来临的计时做准备
Su8KeyStep=5; //S1 按键进入有节奏的连续触发
}
}
else //如果期间检查到 S1 按键已经松手
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
case 5: //S1 按键进入有节奏的连续触发
if(0==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3) //仅判断 S1 按键,避免交叉影响
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_CONTINUITY_TIME) //该时间是“连击”的时间
{
Su16KeyCnt=0; //清零,为了继续连击。
vGu8KeySec=1; //触发一次 S1 按键
vGu8ShieldVoiceFlag=1; //因为连击,把当前按键触发的声音屏蔽掉
}
}
else //如果期间检查到 S1 按键已经松手
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;

Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
/*---------S9 按键的专属区----------------*/
case 6:
if(1==ROW_INPUT1&&1==ROW_INPUT2&&0==ROW_INPUT3) //仅判断 S9 按键,避免交叉影响
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_ENTER_CONTINUITY_TIME)//该时间是“单击”与“连击”的分界线
{
Su16KeyCnt=0; //计时器清零,为即将来临的计时做准备
Su8KeyStep=7; //S9 按键进入有节奏的连续触发
}
}
else //如果期间检查到 S9 按键已经松手
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
case 7: //S9 按键进入有节奏的连续触发
if(1==ROW_INPUT1&&1==ROW_INPUT2&&0==ROW_INPUT3) //仅判断 S9 按键,避免交叉影响
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_CONTINUITY_TIME) //该时间是“连击”的时间
{
Su16KeyCnt=0; //清零,为了继续连击。
vGu8KeySec=9; //触发一次 S9 按键
vGu8ShieldVoiceFlag=1; //因为连击,把当前按键触发的声音屏蔽掉

}
}
else //如果期间检查到 S9 按键已经松手
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
}
}
void KeyTask(void)
{
if(0==vGu8KeySec)
{
return;
}
switch(vGu8KeySec)
{
case 1: //S1 按键的任务
if(Gu8LedStatus>0)
{
Gu8LedStatus--; //控制 LED“往左边跑”
Gu8DisplayUpdate=1; //刷新显示
}
if(0==vGu8ShieldVoiceFlag) //声音没有被屏蔽
{
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
}