wds - 如何实现按键消抖

 

一个关于按键的道理

  • 在按键被按下的时候,发生的信号不是一个完美的信号,而是会产生一些抖动,连续产生几个信号后,稳定下来,经过按键厂家们的测试,大概在10ms~20ms之后,按键信号会稳定下来。

消抖

  • 其实就是消除这10ms~20ms期间的信号不稳定。

定时器延时消抖原理

  • 收到按键信号后,设定一个闹钟,闹钟将在10ms之后提醒我们进行处理按键信号。如果发生抖动,则在下一个按键信号修改闹钟的时间为这个时刻的10ms之后,以此类推。

  • 最后按键信号稳定下来之后,只会触发一个闹钟。

软件实现

步骤一、定义定时器结构体,初始化并添加

static struct timer_list _timer;

// 初始化
init_timer(&_timer);

// 设置回调函数
_timer.function = _timer_callback;

// 添加定时器
add_timer(&_timer);

步骤二、实现定时器回调函数

static void _timer_callback(unsigned long data)
{
    //。。。。
}

步骤三、设置定时器触发时间——10ms

jiffies:Linux系统的滴答计数值,每5ms加一,也就是说,定时器的时间只能设定为5ms的倍数。

HZ:一个宏,表示一秒的计数值,这里HZ = 200,表示一秒有200个滴答。

——所以10ms就表示为 10ms = 1000ms / 100 = HZ / 100;

mod_timer(&_timer, jiffies + HZ / 100);

步骤四、删除定时器

del_timer(&_timer);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值