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

if(Su16Key Continuit yTime<KEY_CO NTINUITY_ MIN_TIME) { //最后 以 K EY_CONTIN UITY_MIN_T IME 时间为最 高速进行“ 匀速” Su16KeyC ontinuityTi me=KEY_CON TINUITY_MIN _TIME; } } } else / /如果期间检查 到 S1 按键已经松 手 { Su8KeySt ep=1; //返回 步骤 1 …

100%1 / 836
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;
Su16KeyContinuityTime=KEY_CONTINUITY_INITIAL_TIME; //动态时间阀值。重装初始值。
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
case 5: //S1 按键进入有节奏的连续触
if(0==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3) //仅判断 S1 按键,避免交叉影
{
Su16KeyCnt++;
if(Su16KeyCnt>=Su16KeyContinuityTime) //该时间是“刚开始不断减小,最后不变”
{
Su16KeyCnt=0; //清零,为了继续连击。
vGu8KeySec=1; //触发一次 S1 按键
vGu8ShieldVoiceFlag=1; //因为连击,把当前按键触发的声音屏蔽
if(Su16KeyContinuityTime>=KEY_SUB_DT_TIME)
{
//Su16KeyContinuityTime 数值不断被减小,按键的触发速度就不断变快
Su16KeyContinuityTime=Su16KeyContinuityTime-KEY_SUB_DT_TIME;//变快节奏
}
//最小间隔时 KEY_CONTINUITY_MIN_TIME 就是“高速匀速”
if(Su16KeyContinuityTime<KEY_CONTINUITY_MIN_TIME)
{
//最后 KEY_CONTINUITY_MIN_TIME 时间为最高速进行“匀速”
Su16KeyContinuityTime=KEY_CONTINUITY_MIN_TIME;
}
}
}
else //如果期间检查 S1 按键已经松
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su16KeyContinuityTime=KEY_CONTINUITY_INITIAL_TIME; //动态时间阀值。重装初始值。
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;
Su16KeyContinuityTime=KEY_CONTINUITY_INITIAL_TIME; //动态时间阀值。重装初始值。
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;
case 7: //S9 按键进入有节奏的连续触
if(1==ROW_INPUT1&&1==ROW_INPUT2&&0==ROW_INPUT3) //仅判断 S9 按键,避免交叉影
{
Su16KeyCnt++;
if(Su16KeyCnt>=Su16KeyContinuityTime) //该时间是“刚开始不断减小,最后不变”
{
Su16KeyCnt=0; //清零,为了继续连击。
vGu8KeySec=9; //触发一次 S9 按键
vGu8ShieldVoiceFlag=1; //因为连击,把当前按键触发的声音屏蔽
if(Su16KeyContinuityTime>=KEY_SUB_DT_TIME)
{
//Su16KeyContinuityTime 数值不断被减小,按键的触发速度就不断变快
Su16KeyContinuityTime=Su16KeyContinuityTime-KEY_SUB_DT_TIME;//变快节奏
}
//最小间隔时 KEY_CONTINUITY_MIN_TIME 就是“高速匀速”
if(Su16KeyContinuityTime<KEY_CONTINUITY_MIN_TIME)
{
//最后 KEY_CONTINUITY_MIN_TIME 时间为最高速进行“匀速”
Su16KeyContinuityTime=KEY_CONTINUITY_MIN_TIME;
}
}
}
else //如果期间检查 S9 按键已经松
{
Su8KeyStep=1; //返回步骤 1 继续扫描
Su8KeyLock=0;
Su16KeyCnt=0;
Su16KeyContinuityTime=KEY_CONTINUITY_INITIAL_TIME; //动态时间阀值。重装初始值。
Su8ColumnRecord++;
if(Su8ColumnRecord>=3)
{
Su8ColumnRecord=0;
}
}
break;