你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ARM®mbed OS入门开发(三 D)GPIO 之 按键消抖

[复制链接]
anywill 提问时间:2016-10-16 17:01 /
本帖最后由 anywill 于 2016-11-9 06:58 编辑

按键防抖是单片机按键应用经常需要处理的问题,之所以要防抖是因为我们在按键的过程中存在抖动,从而造成高低电平变化影响应用程序的效果,
消抖是指消除按键接触时产生的干扰抖动杂脉冲波。
硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。
软件消抖是通过采用软件程序的方法来达到消除干扰抖动杂脉冲波,最常见的是软件采用延时再次检测的方法来消抖。
补充:
按键按下时的瞬间,它的两片触片不是“理想”地立即接触的,特别是按键开关用了一段时间后,触片有些氧化和老化,
这一点,如果用示波器来观察,就能观察到按键接触时的脉冲变化中附带有许多抖动波。

另,无论采用硬件还是软件方法,消除抖动波只是它主要的功能,它还起到消除干扰的作用。

如下面的未消抖按钮中断代码:
InterruptIn button(PC_13);
DigitalOut led1(D13);
void toggle() {
  led1=!led1;
}
int main() {
    button.rise(&toggle);
}
该代码其实前面已经应用过,如果我们在这里多按几次,你就会发现偶尔工作不正常的情况,这是因为管脚输入有波动,
为此,我们需要延迟判定用户按下的效果,这可以简单地通过Timer来实现,改进后的代码如下,实际测试后会发现效果好很多。
InterruptIn button(PC_13);
DigitalOut led1(D13);
Timer debounce;//消抖定时器
void toggle() {
    if (debounce.read_ms()>10) //消抖延时10ms
                        led1=!led1;
    debounce.reset(); //重置定时器
}
int main() {
    debounce.start();
    button.rise(&toggle);
}



收藏 1 评论7 发布时间:2016-10-16 17:01

举报

7个回答
anywill 回答时间:2016-10-16 17:02:22
占楼备用
xyx365 回答时间:2016-10-16 19:09:17
本帖最后由 xyx365 于 2016-10-16 19:12 编辑

不错的教程
switch-circuit.png debounce.png


anywill 回答时间:2016-10-16 20:35:33
大概100us?
zengyi703-16313 回答时间:2016-10-17 08:09:23
谢谢分享
高二毛 回答时间:2016-10-17 11:30:35
很不错,感谢分享。
ynwscfsfi 回答时间:2016-10-20 11:51:22
感谢分享
andypanfan 回答时间:2016-10-23 00:14:30
感谢谢!!!!!

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版