按键如何才能识别长按和短按

[复制链接]
3807|12
 楼主| liutongda 发表于 2017-5-26 16:31 | 显示全部楼层 |阅读模式
按键如何才能识别长按和短按,还有复合按键呢
myidear 发表于 2017-5-26 20:01 | 显示全部楼层
键值判断+滤波判断
gaoxiansheng 发表于 2017-5-26 20:06 | 显示全部楼层
用状态机就可以了
mcu5i51 发表于 2017-5-27 08:25 | 显示全部楼层
计时呀,根据时间处理
lt1231 发表于 2017-5-27 17:11 | 显示全部楼层
识别长按的话,必须要用定时器才可以。普通的加延时才可以的
新人求带 发表于 2017-5-27 17:17 | 显示全部楼层
static void zllSampleLight_HandleKeys( byte shift, byte keys )
{
(void)shift; // Intentionally unreferenced parameter
#ifdef HAL_BOARD_ZLIGHT
// Zlight has only a single button
static uint32 keyPressTime = 0;
if ( keys )
{
keyPressTime = osal_getClock();
}
else //key released
{
if ( keyPressTime )
{
keyPressTime = ( osal_getClock() - keyPressTime );
if ( keyPressTime <= KEY_HOLD_SHORT_INTERVAL )
{
zllTarget_PermitJoin( PERMIT_JOIN_DURATION );
}
else if ( keyPressTime > KEY_HOLD_LONG_INTERVAL )
{
zllTarget_ClassicalCommissioningStart();
}
else
{
zllTarget_ResetToFactoryNew();
}
keyPressTime = 0;
}
}
你可以看看TI的这个代码,我觉得算法最好了。
merry_zsp 发表于 2017-5-28 07:55 | 显示全部楼层
可以看看菜农的零耗时按键,可以识别各种状态。
在路上的程序猿 发表于 2017-5-28 07:59 | 显示全部楼层
做个定时器 用定时器计数的多少来 判断
比如10ms的定时器计数 计数多少个高电平 或低电平(按下的电平)
当数目大于一定的值的时候
就是长按
大白农 发表于 2017-5-28 21:05 | 显示全部楼层
在路上的程序猿 发表于 2017-5-28 07:59
做个定时器 用定时器计数的多少来 判断
比如10ms的定时器计数 计数多少个高电平 或低电平(按下的电平)
当 ...

还有什么好的办法吗?
hello牟 发表于 2017-5-28 21:10 | 显示全部楼层

长按的时候,必须先经过短按识别,这个如何判断呢?
nobleliom 发表于 2017-5-29 11:51 | 显示全部楼层
识别按键弹起才执行按键程序,就可以判断长按和短按了。
会飞的大白 发表于 2017-5-30 07:51 | 显示全部楼层
按键信号做防抖动处理之后,通过计数器采集按键的时长,当超过某一数值或计数器溢出时算作长按,否则算作短按,将按键触发信号的判断信号同时送给下级处理就好啦。希望能够采纳。
nobleliom 发表于 2017-5-30 07:56 | 显示全部楼层
merry_zsp 发表于 2017-5-28 07:55
可以看看菜农的零耗时按键,可以识别各种状态。

菜农的博客好像没了,在哪还可以找到呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

213

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部