打印
[技术问答]

如何实现按键的双击与三连击检测?

[复制链接]
400|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
734774645|  楼主 | 2023-9-8 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有什么好方法。实现这种高级按键功能,比如鼠标上用的那个单击,双击,三连击,长按,是怎么实现的。

使用特权

评论回复
沙发
gejigeji521| | 2023-9-10 13:00 | 只看该作者
这个需要用定时器吧,计时看看从第一次按下后多久触发了后面的两次。

使用特权

评论回复
板凳
classroom| | 2023-9-22 15:20 | 只看该作者
实现按键的双击与三连击检测,可以参考以下代码:

c
#define KEY_HOLD_TIME 10 // 定义按键长按时间为10个单位时间  
#define KEYHOLD_TIME 5 // 定义双击时间为5个单位时间  
  
unsigned int touch_down_counter = 0;  
unsigned int old_touch_down_counter = 0;  
  
void check_key_status(int keycode)  
{  
    switch(keycode)  
    {     
        case R.id.qrcode_img:  
            // 处理二维码图片按键的逻辑  
            break;  
        case R.id.setting_btn:  
            // 处理设置按钮的逻辑  
            break;  
        default:  
            if(KeysFlagSN == K1)//按键按下  
            {     
                //按键按下时,增加计数器  
                touch_down_counter++;  
                if(touch_down_counter == KEYHOLD_TIME)   
                {     
                    //检测到长按,执行相应逻辑  
                    Key.Touch = KEY_HOLD;  
                }     
                else if(touch_down_counter > KEYHOLD_TIME && touch_down_counter < KEYHOLD_TIME+KEYHOLD_TIME)   
                {     
                    //检测到双击,执行相应逻辑  
                    Key.Touch = KEY_DBCLICK;  
                }     
            }     
            else //按键抬起  
            {     
                //按键抬起时,减少计数器  
                touch_down_counter--;  
                if(touch_down_counter == 0)   
                {     
                    //检测到长按结束,执行相应逻辑  
                    Key.Touch = KEY_HOLD_S;  
                }     
            }     
            break;  
    }  
}
该代码在按键按下时增加了计数器,若计数值等于长按时间(这里设置为10),则执行长按操作;若计数值在长按时间内又按下了键,则计数器清零,重新开始计数。如果两次按下键的时间间隔在100~300ms之间,就认为是双击事件,执行双击操作。如果按键抬起时计数器为0,则认为是长按结束,执行相应的操作。

使用特权

评论回复
地板
21mengnan| | 2023-9-24 17:54 | 只看该作者
classroom 发表于 2023-9-22 15:20
实现按键的双击与三连击检测,可以参考以下代码:

c

方法不错,适合主频较慢的单片机。

使用特权

评论回复
5
mintspring| | 2023-9-24 20:29 | 只看该作者
没用过这个操作,一般用不到。

使用特权

评论回复
6
xinxianshi| | 2023-9-24 21:22 | 只看该作者
这个技术可以总结一下。

使用特权

评论回复
7
huangcunxiake| | 2023-9-25 19:22 | 只看该作者
单片机的应用顶多双击。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

3436

帖子

14

粉丝