OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12601|回复: 22

按键中断需要做消抖么?

[复制链接]

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2014-1-3 15:33:36 | 显示全部楼层 |阅读模式
虽然有电容滤波,但是觉得有时候也会不准,大家对于按键中断有做过去抖或是别的措施么?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-1-3 16:28:58 | 显示全部楼层
这个肯定要消抖的,按键用啥电容??
推荐用中断定时器方式消抖
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-1-3 17:31:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-3 19:03:25 | 显示全部楼层
回复【2楼】lxj19901115:
---------------------------------
一般按键电路都配有电容的啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-3 20:35:50 | 显示全部楼层
直接延时滤波,效果也很好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-3 22:50:58 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
做一个delay,再判断一次?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-3 23:04:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-1-6 16:00:46 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
如果是延时的话,那个只能做出来玩玩,如果出产品的话,很容易死翘翘,比如说,我要判断按键长按,每个按键的长按时间不同,1S,2S,3S,8S。。。。难道一直延时??又如果,两个按键同时按下,而且都是长按的键,时间又不同,你怎么处理?怎么延时?
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-1-6 16:03:30 | 显示全部楼层
回复【3楼】toddchen:
---------------------------------
用状态机没错,但是,你说用定时器中断会影响系统不稳定,这个我没碰到过,用了两年多的一个扫键程序,还从来没听到客户说,扫键有问题的,,
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2014-1-6 16:04:47 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子在误导小朋友,,
回复 支持 反对

使用道具 举报

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-5-23
在线时间
5 小时
发表于 2014-1-6 17:57:39 | 显示全部楼层
看用在什么情况,如果对实时性要求不是很好的话,可以延时消抖,当然真正的好程序肯定是不用这种落后方式的,不过带来的就是程序的复杂性
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-6 20:28:50 | 显示全部楼层
回复【10楼】lxj19901115:
---------------------------------
是么?
那我用delay做的按键检测,效果很是不错哦。
虽然没做几万次的测试,但是几百次是测试过没问题的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-6 20:30:22 | 显示全部楼层
回复【11楼】jiajia:
---------------------------------
加入操作系统,比如ucosii之类的,这样延时就没什么影响了。

话说回来,按键消抖动能不延时么?
本来抖动就是个过程量,你要以点时间去处理,怎么可能?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-6 20:31:31 | 显示全部楼层
延时可以有很多种,delay是延时,统计N次,也是要时间,说白了也是延时。
无论你用什么高深的理论,终归,都有延时。

要是采集一点就来分析什么抖动,就是扯淡。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-6 20:35:25 | 显示全部楼层
回复【8楼】lxj19901115:
---------------------------------
延时看你怎么做。什么效果做不出来?

难不成你的所有事情都是在同一时刻就处理完了?

所以说到底还不是有延时。

至于你说的那几个”高级的“按键功能,实现都是没有问题的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
发表于 2014-1-7 10:19:25 | 显示全部楼层
我已经不用延时消抖了
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-7 12:07:03 | 显示全部楼层
回复【16楼】kuanglf:
---------------------------------
说说看啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-7 14:51:53 | 显示全部楼层
回复【16楼】kuanglf:
---------------------------------
肯定有延时,呵呵.

如:
if(key==1)
做任何事情,都有延时.
if(key==1)return 1;
else return 0;

此种架构,你可以随意改,你可以一个函数多次进入,也可以设置全局变量,不变的是,时间肯定是朝前走,只是你在这个等待的时间里面,有没有做其他事情罢了.
情况1,直接用delay,没做其他任何事情.
情况2,调用delay,但是有用系统,有任务调度,delay的时候,去执行其他事情了.
情况3,设计某些标志量,检测到疑似按键按下的时候,处理标计量,然后做其他事情,做完一圈回来,再判断疑似按键是否还有效? 从而判断按键.

总之,这几种情况,都有延时.只是"延时"的形式变了而已.
就好像,官员收现金视为贿赂,难道收黄金,收购物卡,收房子,就不是贿赂了么?

变相而已,本质是一样的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-8 09:23:25 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
原子哥,对于三个延时在战舰板子的体现是不是这样的:

情况1,直接用delay,没做其他任何事情. 
目前战舰板子裸机的程序就是这种吧

情况2,调用delay,但是有用系统,有任务调度,delay的时候,去执行其他事情了. 
战舰的UCOS用的delay是不是这种啊?

情况3,设计某些标志量,检测到疑似按键按下的时候,处理标计量,然后做其他事情,做完一圈回来,再判断疑似按键是否还有效? 从而判断按键.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-8 11:05:07 | 显示全部楼层
回复【19楼】 wwjdwy :
---------------------------------
是的.
情况3,其实我在论坛也发过帖子了,见:http://www.openedv.com/posts/list/23332.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-9 17:31:05 | 显示全部楼层
回复【20楼】正点原子:
---------------------------------
目前用按键输入实验也遇到一次按键出发五六次的情况:

if(KeyDown)
{
delay_ms(10);
if(KeyDown)
{
   App_Mode++;
   printf("key press %d",App_Mode);
                                       }
                           }
一次按下后的结果:
key press 2key press 0key press 1key press 2key press 0


pin输入模式选择浮空或者内部上拉下拉结果都一样。我有哪里做的不对么,原子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-10 13:30:43 | 显示全部楼层
回复【21楼】wwjdwy:
---------------------------------
你没有做按键松开检测,所以会有这种问题出现.
你看我的代码,是不是有个static key_up??
这个就可以控制你这种问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2014-1-11 00:53:05 | 显示全部楼层
回复【22楼】正点原子:
---------------------------------
疗效显著哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 13:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表