打印
[匠人手记]

匠人手记中关于按键的问题

[复制链接]
4050|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机猫|  楼主 | 2010-5-17 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了匠人手记中的手记13,关于按键的漫谈,自己也想把自己扫描仪里面的按键模块进一步丰富一下,加入连击和长击的功能。可是,在这个里面按键都是用中断实现的,那么在实现连击功能的时候,如何使得单片机重复读取键值?以实现连击功能?(个人觉得,这个似乎更适合扫描的按键程序)
还有,就是对于长击,势必需要在中断中加入延时程序,以确定其是否为长击,这似乎使得中断程序加长,不算好的程序结构吧。求指教,如何在中断类的键盘中实现这些功能

相关帖子

沙发
单片机猫|  楼主 | 2010-5-17 22:44 | 只看该作者
:'(沙发,可是人呢?

使用特权

评论回复
板凳
xwj| | 2010-5-17 22:51 | 只看该作者
本帖最后由 xwj 于 2010-5-17 22:53 编辑

人?
到沙发后面去看看在不在啊~:lol


PS :
当然不能再中断中延时,而应该学会设置标志和超时,然后用定时器来召唤、指挥后续事件。
——如果事件执行需要较长的过程,也不应该在定时器里直接处理。

LZ自己去多想想吧,实际上程序就是人的思维哦~:)

使用特权

评论回复
地板
xwj| | 2010-5-17 22:52 | 只看该作者
比如连击,那你人来判断的话是怎么判断的呢?
这个总不用别人来教你吧?:)

使用特权

评论回复
5
单片机猫|  楼主 | 2010-5-18 09:36 | 只看该作者
对于连击的话,如果是扫描的键盘模式,可以每隔一段时间重复读取键值,以达到连击的效果,可是中断怎么办呢?总不能重复进入中断吧,(我设定的是下降沿触发中断),可不可以说的再清楚一点呢?呵呵,谢谢啦 4# xwj

使用特权

评论回复
6
程序匠人| | 2010-5-18 09:49 | 只看该作者
回复:

看了匠人手记中的手记13,关于按键的漫谈,自己也想把自己扫描仪里面的按键模块进一步丰富一下,加入连击和长击的功能。可是,在这个里面按键都是用中断实现的,那么在实现连击功能的时候,如何使得单片机重复读取键值?以实现连击功能?(个人觉得,这个似乎更适合扫描的按键程序)
回:你说的是什么中断?是边沿中断吗?能否改成定时中断检测?

还有,就是对于长击,势必需要在中断中加入延时程序,以确定其是否为长击,这似乎使得中断程序加长,不算好的程序结构吧。求指教,如何在中断类的键盘中实现这些功能
回:延时程序的效率很低,但是可以用定时器去实现延时的功能

使用特权

评论回复
7
单片机猫|  楼主 | 2010-5-18 10:42 | 只看该作者
延时我只是随便说说,没有仔细考虑,定时器已经都被用掉了,我的按键都是用外部中断来控制的,是下降沿触发。如何实现连击功能呢?需要想办法,重复进入中断么? 6# 程序匠人

使用特权

评论回复
8
程序匠人| | 2010-5-18 14:48 | 只看该作者
定时器已经都被用掉了单片机猫 发表于 2010-5-18 10:42


定时器是可以复用的。也就是一个“物理的”定时器可以扩充出多个“虚拟的”定时器,分别给不同的任务使用。

使用特权

评论回复
9
单片机猫|  楼主 | 2010-5-18 15:45 | 只看该作者
一个问题引出了好多别的问题啊,呵呵,好,我待会就百度下看看如何复用定时器,可是,最重要的问题还是我所说的那个,外部中断型按键如何实现连击功能呢?给一个思路就可以了。先谢谢匠人了。 8# 程序匠人

使用特权

评论回复
10
love_hy2005| | 2010-5-21 13:28 | 只看该作者
有道理

使用特权

评论回复
11
单片机猫|  楼主 | 2010-5-24 16:01 | 只看该作者
这两天功课忙,现在再来回一下贴。我现在基本是有思路了,当按键进入中断后,就开启定时器,随后出中断,再定时器中断中查询按键是否保持按下的状态,当满足一定时间后(重复进入定时器中断n次后),标志位置位,随后在主程序中执行长按键的程序。您觉得这样可行么?我现在就来写下代码试试 6# 程序匠人

使用特权

评论回复
12
flutters| | 2010-5-25 18:50 | 只看该作者
写程序最好不要用延时程序。

使用特权

评论回复
13
程序匠人| | 2010-5-25 20:48 | 只看该作者
这两天功课忙,现在再来回一下贴。我现在基本是有思路了,当按键进入中断后,就开启定时器,随后出中断,再定时器中断中查询按键是否保持按下的状态,当满足一定时间后(重复进入定时器中断n次后),标志位置位,随 ...
单片机猫 发表于 2010-5-24 16:01


你还是用了边沿触发中断

其实完全可以不要用边沿触发中断

直接用定时中断去查询即可

使用特权

评论回复
14
单片机猫|  楼主 | 2010-5-28 09:40 | 只看该作者
3q.在下一个项目里,我来试试吧,这个电路我已经改不了了 13# 程序匠人

使用特权

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

本版积分规则

0

主题

22

帖子

1

粉丝