键盘去抖 去抖时单片机可以做其他事???

[复制链接]
 楼主| nicker88 发表于 2010-9-24 21:26 | 显示全部楼层 |阅读模式
一道笔试题的要求,不知道他的意思是要用硬件去抖还是软件,硬件我知道,请问如果用软件应该怎么弄啊
xiao陈 发表于 2010-9-24 21:45 | 显示全部楼层
检查到有按键时延时几个节拍
 楼主| nicker88 发表于 2010-9-24 22:26 | 显示全部楼层
延时就不能实现    去抖时单片机可以做其他事   了
关键是这句 去抖时单片机可以做其他事
zhhpudk 发表于 2010-9-24 22:50 | 显示全部楼层
把程序设计成状态机,整个程序在一个大循环里跑,中间不要有死等的代码,这样一个循环的时间会很短一般是微秒级别,最大也不过是几个毫秒,这样就可通过**上次按键值并与现在值比较来做去抖。
 楼主| nicker88 发表于 2010-9-24 23:00 | 显示全部楼层
4# zhhpudk 应该没这么复杂,是道笔试题啊
linjing 发表于 2010-9-24 23:00 | 显示全部楼层
去抖时单片机可以做其他事, 这个该是软件的题目

比较简单的办法是在定时中断里面扫描按键,置按键标志,由主程序处理按键,但这个办法需要一个定时中断
好处是主程序的流程比较灵活,思路比较连续
ayb_ice 发表于 2010-9-25 08:14 | 显示全部楼层
其实就是考你是否有多任务概念
jutyy 发表于 2010-9-25 09:12 | 显示全部楼层
不知道大家知道,消息机制吗?
本人一解随带提一下,请帮忙回答!谢谢
acute1110 发表于 2010-9-25 09:31 | 显示全部楼层
看ucosII的书里面讲的很清楚
bruceleeIKA 发表于 2010-9-25 09:48 | 显示全部楼层
有这么复杂吗?什么消息机制,什么多任务还不至于用这么高级的。4楼的对,其实就一个状态机搞定。大循环里每20ms检测一次按键状态。无需延时,无需等待,20ms就是消抖时间,可以做任何事情。
batsong 发表于 2010-9-25 10:29 | 显示全部楼层
消除抖动一般就是延时10ms

只要你中断的时隙小于10ms就可以,开一个标志位,但是主循环程序中不能有死等的代码存在

但是一般不会用那么快速的定时中断,而且10ms死等也不伤大雅
zq1987731 发表于 2010-9-25 10:39 | 显示全部楼层
定时器复用一下,每10ms置一个“事件标志位”,主循环中检测该标志位,为1则进入按键状态机处理以及其余10ms的任务,处理完毕后将该位置0,切忌10ms的死等,如果我是面试官,绝对会对此强烈反感!
匠人粉丝团 发表于 2010-9-25 10:51 | 显示全部楼层
每过一段时间(比如说10ms)去检测一下按键,在这“等待”的时间里,可以去处理别的事情。
eein 发表于 2010-9-25 16:48 | 显示全部楼层
延时扫描端口!如果两状态相同则确认状态为发生。
xiaoyh520 发表于 2010-9-25 16:57 | 显示全部楼层
ymhui1986 发表于 2010-9-25 16:59 | 显示全部楼层
路过
狂崽 发表于 2010-9-25 17:30 | 显示全部楼层
在定时器里设个定时标志,把键盘函数放到主函数中,并且判断标志,是否执行键盘检测函数,在键盘检测函数中检测到按键按下后 延时去抖,再判按键,这一过程必须保证中断开着,所以在去抖的时候可以执行中断的事
NE5532 发表于 2010-9-25 20:20 | 显示全部楼层
我的答案是:根据实际需要进行设计。
nicole.088 发表于 2010-9-25 21:00 | 显示全部楼层
硬件方法是:RC滤波电路,与按键并接一个104电容。
软件方法是:前沿抖动,抖动时间一般为5~10ms,一般都采用软件取抖

  SETB  P1.0
  JB      P1.0,OUT
LCALL DELAY10MS  ;延时10ms取抖
JB       P1.0
JNB     P1.0.$          ;断态判断

OUT:~~~~~~~~~
chenxinle 发表于 2010-9-25 21:03 | 显示全部楼层
做好延时,用while()确认去抖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

98

帖子

1

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