从单片机基础到程序框架(全集 2019pdf版).pdf - 第465页
switch(v Gu8KeySec) //根据不同的 按键触发序 号执行对 应的代码 { case 1 : //S1 触 发的任务 vGu8BeepTi merFlag=0 ; vGu16BeepT imerCnt=K EY_VOICE_TIM E; //发出“嘀 ”一声 vGu8BeepTi merFlag=1 ; vGu8KeySec =0; //响应按键服 务处理程序后 ,按键 编号必须清零 ,避免一直触 发 break; ca…

if(0==ROW_INPUT1&&1==ROW_INPUT2&&1==ROW_INPUT3)
{
Su16KeyCnt++; //去抖动延时计数器
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su16KeyCnt=0;
Su8KeyLock=1;//自锁置 1,避免一直触发,只有松开按键,此标志位才会被清零
vGu8KeySec=7; //触发 7 号键 对应 S7 键
}
}
else if(1==ROW_INPUT1&&0==ROW_INPUT2&&1==ROW_INPUT3)
{
Su16KeyCnt++; //去抖动延时计数器
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su16KeyCnt=0;
Su8KeyLock=1;//自锁置 1,避免一直触发,只有松开按键,此标志位才会被清零
vGu8KeySec=8; //触发 8 号键 对应 S8 键
}
}
else if(1==ROW_INPUT1&&1==ROW_INPUT2&&0==ROW_INPUT3)
{
Su16KeyCnt++; //去抖动延时计数器
if(Su16KeyCnt>=KEY_SHORT_TIME)
{
Su16KeyCnt=0;
Su8KeyLock=1;//自锁置 1,避免一直触发,只有松开按键,此标志位才会被清零
vGu8KeySec=9; //触发 9 号键 对应 S9 键
}
}
}
break;
}
}
void KeyTask(void) //按键任务函数,放在主函数内
{
if(0==vGu8KeySec)
{
return; //按键的触发序号是 0 意味着无按键触发,直接退出当前函数,不执行此函数下面的代码
}

switch(vGu8KeySec) //根据不同的按键触发序号执行对应的代码
{
case 1: //S1 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 2: //S2 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 3: //S3 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 4: //S4 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 5: //S5 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;

vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 6: //S6 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 7: //S7 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 8: //S8 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
case 9: //S9 触发的任务
vGu8BeepTimerFlag=0;
vGu16BeepTimerCnt=KEY_VOICE_TIME; //发出“嘀”一声
vGu8BeepTimerFlag=1;
vGu8KeySec=0; //响应按键服务处理程序后,按键编号必须清零,避免一直触发
break;
}
}