打印

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

[复制链接]
3011|12
手机看帖
扫描二维码
随时随地手机跟帖
沙发
myidear| | 2017-5-26 20:01 | 只看该作者
键值判断+滤波判断

使用特权

评论回复
板凳
gaoxiansheng| | 2017-5-26 20:06 | 只看该作者
用状态机就可以了

使用特权

评论回复
地板
mcu5i51| | 2017-5-27 08:25 | 只看该作者
计时呀,根据时间处理

使用特权

评论回复
5
lt1231| | 2017-5-27 17:11 | 只看该作者
识别长按的话,必须要用定时器才可以。普通的加延时才可以的

使用特权

评论回复
6
新人求带| | 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的这个代码,我觉得算法最好了。

使用特权

评论回复
7
merry_zsp| | 2017-5-28 07:55 | 只看该作者
可以看看菜农的零耗时按键,可以识别各种状态。

使用特权

评论回复
8
在路上的程序猿| | 2017-5-28 07:59 | 只看该作者
做个定时器 用定时器计数的多少来 判断
比如10ms的定时器计数 计数多少个高电平 或低电平(按下的电平)
当数目大于一定的值的时候
就是长按

使用特权

评论回复
9
大白农| | 2017-5-28 21:05 | 只看该作者
在路上的程序猿 发表于 2017-5-28 07:59
做个定时器 用定时器计数的多少来 判断
比如10ms的定时器计数 计数多少个高电平 或低电平(按下的电平)
当 ...

还有什么好的办法吗?

使用特权

评论回复
10
hello牟| | 2017-5-28 21:10 | 只看该作者

长按的时候,必须先经过短按识别,这个如何判断呢?

使用特权

评论回复
11
nobleliom| | 2017-5-29 11:51 | 只看该作者
识别按键弹起才执行按键程序,就可以判断长按和短按了。

使用特权

评论回复
12
会飞的大白| | 2017-5-30 07:51 | 只看该作者
按键信号做防抖动处理之后,通过计数器采集按键的时长,当超过某一数值或计数器溢出时算作长按,否则算作短按,将按键触发信号的判断信号同时送给下级处理就好啦。希望能够采纳。

使用特权

评论回复
13
nobleliom| | 2017-5-30 07:56 | 只看该作者
merry_zsp 发表于 2017-5-28 07:55
可以看看菜农的零耗时按键,可以识别各种状态。

菜农的博客好像没了,在哪还可以找到呢?

使用特权

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

本版积分规则

22

主题

213

帖子

0

粉丝