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

} else if(1= =ROW_INPU T1&&0==ROW_I NPUT2&&1= =ROW_INPUT3) { Su16KeyCnt ++; if(Su16Key Cnt>=KEY_ SHORT_TIME) { Su8KeyLo ck=1; if(0==Su 8ColumnReco rd) { vGu8KeySec =4; } else i f(1==Su8Colu mnRecord) {…

100%1 / 836
{
Su16KeyCnt=0;
Su8KeyStep++;
}
break;
case 3:
if(1==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3)
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
else if(0==Su8KeyLock)
{
if(0==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3)
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su8KeyLock=1;
if(0==Su8ColumnRecord)
{
vGu8KeySec=1; //触发一次单击
Su16KeyCnt=0; //计时器清零,为即将来临的计时做准备
Su8KeyStep=4; //跳到 S1 按键的专属区,脱离大众按键
}
else if(1==Su8ColumnRecord)
{
vGu8KeySec=2;
}
else if(2==Su8ColumnRecord)
{
vGu8KeySec=3;
}
}
}
else if(1==ROW_INPUT1&&0==ROW_INPUT2&&1==ROW_INPUT3)
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su8KeyLock=1;
if(0==Su8ColumnRecord)
{
vGu8KeySec=4;
}
else if(1==Su8ColumnRecord)
{
vGu8KeySec=5;
}
else if(2==Su8ColumnRecord)
{
vGu8KeySec=6;
}
}
}
else if(1==ROW_INPUT1&&1==ROW_INPUT2&&0==ROW_INPUT3)
{
Su16KeyCnt++;
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su8KeyLock=1;
if(0==Su8ColumnRecord)
{
vGu8KeySec=7;
}
else if(1==Su8ColumnRecord)
{
vGu8KeySec=8;
}
else if(2==Su8ColumnRecord)
{
vGu8KeySec=9; //触发一次单击
Su16KeyCnt=0; //计时器清零,为即将来临的计时做准备
Su8KeyStep=6; //跳到 S9 按键的专属区,脱离大众按键
}
}
}
}
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;