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

[复制链接]
5813|21
 楼主| 米其林r 发表于 2010-10-9 19:12 | 显示全部楼层 |阅读模式
pi, IO
用了按键消抖是不是就不能用PIO中断了?   也就是说按键消抖完了只能通过查询去处理按键的状态改变了?求大侠支招!
huzixian 发表于 2010-10-9 19:19 | 显示全部楼层
求助斑竹解决吧,这个问题也困扰过我
hotpower 发表于 2010-10-9 19:30 | 显示全部楼层
搜索“零耗时键盘”
FVJFIFE 发表于 2010-10-9 21:30 | 显示全部楼层
可以用PIO中断啊,中断用来置标志位,主程序里查询这个标志位
X-Hawk 发表于 2010-10-10 02:20 | 显示全部楼层
何必这么麻烦,芯唐M0的GPIO有 De-bounce 控制寄存器(DBNCECON), 硬件消抖。
hotpower 发表于 2010-10-10 09:09 | 显示全部楼层
消抖只是一方面,最大的问题是键功能按时间片的运行。
 楼主| 米其林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内完成,那么后台程序可以废除,即主程序只是个
死循环。这在低功耗系统中应用很广。
 楼主| 米其林r 发表于 2010-10-10 15:08 | 显示全部楼层
这个貌似还得操作系统啊
杜_U_ME 发表于 2010-10-10 16:00 | 显示全部楼层
零耗时键盘第一次听说,学习了
火箭球迷 发表于 2010-10-10 22:21 | 显示全部楼层
啥是零耗时键盘??
-自己人 发表于 2010-10-11 16:37 | 显示全部楼层
7楼不是说了吗
无冕之王 发表于 2010-10-11 18:14 | 显示全部楼层
的确,7楼已经说的很清楚了
月生1991 发表于 2010-10-13 15:22 | 显示全部楼层
1059693628 发表于 2010-10-13 16:39 | 显示全部楼层
狂顶狂顶狂顶狂顶狂顶
zhu_han_2 发表于 2011-7-10 19:49 | 显示全部楼层
学习啦
siwi 发表于 2011-7-13 16:19 | 显示全部楼层
:handshake 对“零耗时键盘”的个人应用总结:
在MCU的裸奔中,“零耗时键盘”很容易构成一个基于时间片小型的操作系统。
它可以“并行地”处理多个键盘事件及任务。
它的节拍不是OS常用的10mS,而是20mS消抖时间的1/N份。
由于20mS也做为视觉暂留的时间基准,故在常用的LED+KEY系统中裸奔表现很不错。
如果每个任务都能保证在20mS/N内完成,那么后台程序可以废除,即主程序只是个
死循环。这在低功耗系统中应用很广。
siwi 发表于 2011-7-13 16:20 | 显示全部楼层
总结很到位
PenGHnet 发表于 2011-7-14 17:39 | 显示全部楼层
说得神乎其神,就是一个按键处理状态机。
ahgao 发表于 2011-7-14 21:18 | 显示全部楼层
网上搜搜一个PC键盘的程序看看就明白了,100多个键,还有多键组合,很便宜的单片机就做了。
xd54622 发表于 2011-7-16 19:47 | 显示全部楼层
感觉不是很懂啊,要是有具体的程序说明,就很给力了,嘿嘿:$
菜鸟说话,只是个人观点:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

340

主题

1587

帖子

3

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