打印

按键进阶使用:短按、长按、连续、双击、组合键实现

[复制链接]
楼主: zeshoufx
手机看帖
扫描二维码
随时随地手机跟帖
81
小小小Yy| | 2024-3-19 21:56 | 只看该作者 回帖奖励 |倒序浏览
谢谢分享

使用特权

评论回复
82
acon| | 2024-3-22 17:30 | 只看该作者
学习学习!

使用特权

评论回复
83
guijial511| | 2024-3-23 10:31 | 只看该作者
按键的检测方式有很多灵活的实现方式

使用特权

评论回复
84
bidinghong| | 2024-3-23 10:40 | 只看该作者
谢谢分享学习学习

使用特权

评论回复
85
问天少年| | 2024-3-28 11:46 | 只看该作者
这个按键组合功能太棒了

使用特权

评论回复
86
菜鸟的第一步| | 2024-3-28 13:19 | 只看该作者
组合键一般来说是如何处理的呢 和单键的区别是什么

使用特权

评论回复
87
黑心单片机| | 2024-3-28 13:43 | 只看该作者
很考验逻辑处理啊

使用特权

评论回复
88
xuri_6| | 2024-3-31 18:44 | 只看该作者
学习学习

使用特权

评论回复
89
caigang13| | 2024-4-1 08:26 | 只看该作者
这个主要靠检测按键得动作时间来实现

使用特权

评论回复
90
maqianqu| | 2024-4-7 07:52 | 只看该作者
通过合理的编程技巧,可以实现按键的进阶使用,如短按、长按、连续、双击和组合键等功能

使用特权

评论回复
91
weifeng90| | 2024-4-7 09:05 | 只看该作者
回复看看,感谢分享。

使用特权

评论回复
92
youtome| | 2024-4-7 11:10 | 只看该作者
可以通过设置一个较短的延时去检测按键状态的变化。例如,如果检测到按键从释放状态变为按下状态,并且在设定的短时间内再次变为释放状态,那么就判定为一次短按操作。

使用特权

评论回复
93
tabmone| | 2024-4-7 13:23 | 只看该作者
当按键被按下并在一定时间内释放时,触发短按事件。可以通过计时器和状态机实现短按的检测。

使用特权

评论回复
94
updownq| | 2024-4-7 15:25 | 只看该作者
需要对按键进行 interruption 服务程序(ISR)处理,并使用一些状态机逻辑来区分不同的按键事件。

使用特权

评论回复
95
biechedan| | 2024-4-7 17:25 | 只看该作者
while (1)
{
    // 检测按键状态
    HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN);
    if (key_state == 0 && HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_SET)
    {
        // 按键按下
        key_press_time = HAL_GetTick();
        key_press_count++;
    }
    else if (key_state == 1 && HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_RESET)
    {
        // 按键释放
        key_release_time = HAL_GetTick();
        
        // 判断按键操作类型
        if (key_press_time != 0 && key_press_time - key_release_time < 50)
        {
            // 短按
            // 在这里添加短按功能代码
        }
        else if (key_press_time != 0 && key_press_time - key_release_time >= 50 && key_press_time - key_release_time <= 200)
        {
            // 长按
            // 在这里添加长按功能代码
        }
        else if (key_press_time != 0 && key_press_time - key_release_time > 200)
        {
            // 连续按
            // 在这里添加连续按功能代码
        }
        else if (key_press_count >= 2)
        {
            // 双击
            // 在这里添加双击功能代码
        }
        
        // 重置按键状态和计数器
        key_state = 0;
        key_press_count = 0;
    }
   
    // 等待按键按下
    key_state = 1;
}

使用特权

评论回复
96
cashrwood| | 2024-4-7 19:30 | 只看该作者
当按键被按下时,开始计时。
如果按键在预设的短时间内(例如500毫秒)被释放,则视为短按。
执行短按对应的操作。

使用特权

评论回复
97
sesefadou| | 2024-4-7 21:29 | 只看该作者
当按键被连续按下多次时,触发连续按事件。可以通过计时器和状态机实现连续按的检测。

使用特权

评论回复
98
uptown| | 2024-4-8 12:08 | 只看该作者
在程序中,可以通过检测按键状态的变化来判断是否发生了短按操作。例如,当按键从高电平变为低电平时,表示按键被按下;当按键从低电平变为高电平时,表示按键被松开。在按键被按下和松开之间,可以设置一个延时来消除抖动。

使用特权

评论回复
99
zerorobert| | 2024-4-8 14:04 | 只看该作者
只要检测到按键处于按下状态,就不断产生按键信号,直到按键被释放为止。

使用特权

评论回复
100
sdCAD| | 2024-4-8 16:00 | 只看该作者
当第一次按键被按下并释放后,开始计时。
如果在预设的时间窗口内(例如500毫秒)再次按下并释放按键,则视为双击。
执行双击对应的操作。

使用特权

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

本版积分规则