按键长短按

u8 key_return = NO_KEY;
u8 key_tmp = NO_KEY;
u8 key_lock = 0;//按键自锁标志,自己加的

if (key_val == NO_KEY || key_val != key_ctl.key_val) //按键没有按下或者本次按键与上一次按键不相同
{
if (key_ctl.key_up < KEY_UP_TIMES) //抬键防抖延时
{
key_ctl.key_up++;//抬键计数
}
else
{
if (key_ctl.key_cnt >= KEY_LONG_TIMES) { //长按抬键
key_return = key_ctl.key_val | T_KEY_LONG_UP;
} else if (key_ctl.key_cnt >= KEY_SCAN_TIMES) { //短按抬键
key_return = key_ctl.key_val | T_KEY_SHORT_UP;
}
key_tmp = key_ctl.key_val;

key_ctl.key_val = key_val; //把最后一次的按键存起来,留待下次使用
key_ctl.key_cnt = 0; //按键计时清0
key_lock = 0;
}
}
else
{
key_ctl.key_cnt++;
if (key_ctl.key_cnt == KEY_SCAN_TIMES && key_lock == 0) { //去抖
key_ctl.key_up = 0;
key_lock = 1;//自锁标志置1,防止按住按键不松手后一直触发
key_return = key_ctl.key_val | T_KEY_SHORT; //短按,暂存按键值
} else if (key_ctl.key_cnt == KEY_LONG_TIMES && key_lock == 0) { //长按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_LONG;
} else if (key_ctl.key_cnt == KEY_LONG_HOLD_TIMES && key_lock == 0) { //连按
key_lock = 1;
key_return = key_ctl.key_val | T_KEY_HOLD;
key_ctl.key_cnt = KEY_LONG_TIMES;
}
key_tmp = key_ctl.key_val;
}
if(key_tmp > 0x1f && key_return >= 0x80) //32-127这些键值不支持长按
{
key_return = NO_KEY;
}
return key_return;

转载于:https://www.cnblogs.com/wang-jun-qi/p/11451321.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值