打印

用了按键消抖是不是就不能用中断了

[复制链接]
4014|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
米其林r|  楼主 | 2010-10-9 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
huzixian| | 2010-10-9 19:19 | 只看该作者
求助斑竹解决吧,这个问题也困扰过我

使用特权

评论回复
板凳
hotpower| | 2010-10-9 19:30 | 只看该作者
搜索“零耗时键盘”

使用特权

评论回复
地板
FVJFIFE| | 2010-10-9 21:30 | 只看该作者
可以用PIO中断啊,中断用来置标志位,主程序里查询这个标志位

使用特权

评论回复
5
X-Hawk| | 2010-10-10 02:20 | 只看该作者
何必这么麻烦,芯唐M0的GPIO有 De-bounce 控制寄存器(DBNCECON), 硬件消抖。

使用特权

评论回复
6
hotpower| | 2010-10-10 09:09 | 只看该作者
消抖只是一方面,最大的问题是键功能按时间片的运行。

使用特权

评论回复
7
米其林r|  楼主 | 2010-10-10 15:07 | 只看该作者
“零耗时键盘”介绍:
    “零耗时”并非不耗时。它主要是将原本需要延时消除键盘抖动的时间转化为
对定时器的计数来替代。这样就可将节约的时间用于对其他事件的处理。
    “零耗时”键盘程序的编写很简单,首先要做到:
1.用总键盘个数除消除键盘抖动的时间20mS.本例有4个键,即20mS/4=5mS.
  所以,定时器0中断时间常数应该定义为5mS.
2.设置1个压键20mS计数器数组KeyPressCount[]。用于对各键盘的压键次数计数。
  由于全部键盘扫描需要20mS,故KeyPressCount[]内的值为20mS的倍数。
3.设置1个键扫描位置计数器KeyCount,用于记录当前键扫描的位置。
  注意键扫描函数KeyScan()每次只扫描1个键(本例即为IRQ_Timer0())。
4.设置1个键扫描键值计数器数组KeyDblCount[],用于记录键值以处理双击状态。
  本例主要讲解“零耗时”键盘程序的编写,一般不主张在MCU系统下用双击键。
  多建议采用长压键来替代双击键。
特别注意:
  “零耗时”键盘程序属于“扫而不描”类型,即每次只扫描1个键而不管其他键
的状态。这样就可在一定的时间范围内“并行”地处理多个键盘事件。
   键扫描位置计数器KeyCount的值就是键盘扫描结果的键值。故也改进了经典的
键扫描函数KeyScan()需要逐次扫描的缺点
  “零耗时”键盘程序只区分键释放,单击键,双击键 和长压键4种基本事件。
区分只简单地判别KeyPressCount[]的个数即可。
1.当无键压下且KeyPressCount[]减到0时,可判别为键释放事件发生。
2.当有键压下且KeyPressCount[]=2时,可认为键已经经过20mS消抖处理,
  即单击键事件发生。
  如果需要双击键处理,则需要附加KeyDblCount[]双击键计数器数组。
3.当有键压下且KeyPressCount[]=3*50时,即3*50*20mS=3S时,认为3S长压键事件发生。
  对“零耗时键盘”的个人应用总结:
在MCU的裸奔中,“零耗时键盘”很容易构成一个基于时间片小型的操作系统。
它可以“并行地”处理多个键盘事件及任务。
它的节拍不是OS常用的10mS,而是20mS消抖时间的1/N份。
由于20mS也做为视觉暂留的时间基准,故在常用的LED+KEY系统中裸奔表现很不错。
如果每个任务都能保证在20mS/N内完成,那么后台程序可以废除,即主程序只是个
死循环。这在低功耗系统中应用很广。

使用特权

评论回复
8
米其林r|  楼主 | 2010-10-10 15:08 | 只看该作者
这个貌似还得操作系统啊

使用特权

评论回复
9
杜_U_ME| | 2010-10-10 16:00 | 只看该作者
零耗时键盘第一次听说,学习了

使用特权

评论回复
10
火箭球迷| | 2010-10-10 22:21 | 只看该作者
啥是零耗时键盘??

使用特权

评论回复
11
-自己人| | 2010-10-11 16:37 | 只看该作者
7楼不是说了吗

使用特权

评论回复
12
无冕之王| | 2010-10-11 18:14 | 只看该作者
的确,7楼已经说的很清楚了

使用特权

评论回复
13
月生1991| | 2010-10-13 15:22 | 只看该作者
看看

使用特权

评论回复
14
1059693628| | 2010-10-13 16:39 | 只看该作者
狂顶狂顶狂顶狂顶狂顶

使用特权

评论回复
15
zhu_han_2| | 2011-7-10 19:49 | 只看该作者
学习啦

使用特权

评论回复
16
siwi| | 2011-7-13 16:19 | 只看该作者
:handshake 对“零耗时键盘”的个人应用总结:
在MCU的裸奔中,“零耗时键盘”很容易构成一个基于时间片小型的操作系统。
它可以“并行地”处理多个键盘事件及任务。
它的节拍不是OS常用的10mS,而是20mS消抖时间的1/N份。
由于20mS也做为视觉暂留的时间基准,故在常用的LED+KEY系统中裸奔表现很不错。
如果每个任务都能保证在20mS/N内完成,那么后台程序可以废除,即主程序只是个
死循环。这在低功耗系统中应用很广。

使用特权

评论回复
17
siwi| | 2011-7-13 16:20 | 只看该作者
总结很到位

使用特权

评论回复
18
PenGHnet| | 2011-7-14 17:39 | 只看该作者
说得神乎其神,就是一个按键处理状态机。

使用特权

评论回复
19
ahgao| | 2011-7-14 21:18 | 只看该作者
网上搜搜一个PC键盘的程序看看就明白了,100多个键,还有多键组合,很便宜的单片机就做了。

使用特权

评论回复
20
xd54622| | 2011-7-16 19:47 | 只看该作者
感觉不是很懂啊,要是有具体的程序说明,就很给力了,嘿嘿:$
菜鸟说话,只是个人观点:lol

使用特权

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

本版积分规则

340

主题

1587

帖子

3

粉丝