按键扫描

[复制链接]
1772|15
手机看帖
扫描二维码
随时随地手机跟帖
mugangzhu|  楼主 | 2010-1-8 09:44 | 显示全部楼层 |阅读模式
按键扫描定时5ms和其他的定时时间能否用同一个定时器实现?再设计时应注意什么?
warm_ice| | 2010-1-8 10:49 | 显示全部楼层
当然可以的,假设你需要一个5MS的定时,还需要一个0.1S的定时,那0.1S就相当于20个5MS,每次设置5MS标志的时候,再对一组寄存器加1操作,等这组寄存器计数到20了,0.1S就到了,设置0.1S标志.

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 10:54 | 显示全部楼层
但是5ms和0.1s退出中断不再一个时间啊,0.1s退出要比5ms晚多了啊

使用特权

评论回复
warm_ice| | 2010-1-8 11:50 | 显示全部楼层
那有什么关系,你每5MS一次中断就好了,0.1S就相当于20次5MS中断。
你在主程序中通过判断标志位即可,跟中断什么时候退出没有任何关系。

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 11:53 | 显示全部楼层
呵呵,您说的这两种我都想过可是如何实现我很是模糊啊

使用特权

评论回复
warm_ice| | 2010-1-8 12:08 | 显示全部楼层
这个其实并不复杂,首先你要明白,定时中断里只是将时间的标志位置起,而主程序中判断这些标志位进行操作.

只用一个中断的话,您就将中断的时间定为您需要的最小的那个计时时间,如5MS,这样每中断一次,在定时中断中将5MS的标志置好,同时假设您还有一个100MS的计时需要,那就在定时中断程序中置好5MS定时标志后,再利用2个寄存器,对这2个寄存器每次加1,再判断它是否等于20,如果等于20了,则置起100MS标志.

就这么简单.

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 12:36 | 显示全部楼层
呵呵,谢谢指导,假如我要定时12小时的话那再以5ms中断为基准的话那用的寄存器不是很多啊

使用特权

评论回复
warm_ice| | 2010-1-8 13:03 | 显示全部楼层
呵呵,谢谢指导,假如我要定时12小时的话那再以5ms中断为基准的话那用的寄存器不是很多啊
mugangzhu 发表于 2010-1-8 12:36

是这样的,这个没有办法.你或者用多个定时器来定时.

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 13:09 | 显示全部楼层
哦,你看我想这样设置:
以5ms定时中断为基准,分别设置1h、1min、1s子程序,如果我想用的话分别调用者三个子程序怎么样?

使用特权

评论回复
warm_ice| | 2010-1-8 13:27 | 显示全部楼层
当然可以.

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 14:01 | 显示全部楼层
那就好,谢谢啊,我还想请教一下,就是按动按键蜂鸣器鸣叫一下是如何实现的?

使用特权

评论回复
warm_ice| | 2010-1-8 14:18 | 显示全部楼层
呵呵,就是确认有按键按下后,让蜂鸣器工作一段时间

使用特权

评论回复
mugangzhu|  楼主 | 2010-1-8 14:20 | 显示全部楼层
用PWM来驱动,一般工作多长时间?

使用特权

评论回复
warm_ice| | 2010-1-8 15:00 | 显示全部楼层
这个不一定的,看设计要求了,一般设计0.1S即可

使用特权

评论回复
mbutterfly| | 2010-1-9 09:38 | 显示全部楼层
不知道你用什么编译器,如果用KEIL,都可以仿真的。

使用特权

评论回复
joecongmin| | 2010-1-9 13:59 | 显示全部楼层
要看你是用有源蜂鸣器,还是无源蜂鸣器,无源的要2-3KHZ的脉冲驱动

使用特权

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

本版积分规则

70

主题

358

帖子

1

粉丝