// 按键宏定义,根据实际测试进行修改
// 实际时间为:数值*10ms (按键扫描)
#define K_Dou_Time 2 // 按键消抖时间 20ms
#define K_Long_Time 100 // 按键长按判定 1S
#define K_Lian_Time 50 // 按键连击时间 500ms
// 按键连击时间是指按键释放后到再次按下的时间间隔
// 按键长按及单击,多击检测
// 此函数需要10ms执行一次(大概范围即可)
void KEY1_Scan()
{
static u8 cnt = 0; // 用于按键按下计时
static u8 Fcnt = 0; // 用于按键连击倒计时
static u8 KEY_cnt = 0; // 用于记录按键按下次数
if (PIN_KEY == 0) // 按键按下,时间增加
{
cnt++; // 按键按下时间
}
else // 按键释放/没有按下按键/按键抖动
{
// if(cnt>K_Long_Time)//说明是长按,长按时间
// {
// P2=0X00;//按键按下次数用P2口展示
// }
if (cnt > K_Dou_Time) // 如果大于抖动时间,认为是短按/多个短按
{
KEY_cnt++; // 按键按下次数加一
Fcnt = K_Lian_Time; // 重新开始倒计时
}
cnt = 0; // 按键按下时间变量清除
if (Fcnt) // 如果大于0,才能递减,Fcnt变量一定会减为0。
{
Fcnt--;
if (Fcnt == 0) // 如果减到0了,说明按键已经 K_Lian_Time 没有按下了
{
if (KEY_cnt == 1) //按下一次
{
msg = SWITCH_STATUS_MODE;
}
else if (KEY_cnt == 3) //按下3次
{
msg = SWITCH_STATUS_LOCK;
}
else if (KEY_cnt == 5) //按下5次
{
msg = SWITCH_STATUS_POWER;
}
KEY_cnt = 0; // 记录按键按下次数的变量,必须被清除
}
}
}
}
判断按键按下的次数
最新推荐文章于 2024-03-11 15:07:02 发布