找回密码
 注册
关于网站域名变更的通知
查看: 1964|回复: 5
打印 上一主题 下一主题

状态机定时器法按键消抖,在定时器中断里面调用按键扫描子程序好还是在主函数里调用好

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-16 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
状态机定时器法按键消抖,在定时器中断里面调用按键扫描子程序好还是在主函数里调用好
9 `( q$ a& W& ^5 l  j1 G7 _$ v$ p
我的主函数用while循环ad转换和更新1602显示,每循环一次409ms左右,扫描程序放在哪好?
% z6 b5 y$ {/ _! Y8 W- V2 E$ H

该用户从未签到

2#
发表于 2019-4-16 15:19 | 只看该作者
循环一次409ms?这个程序得多大啊?- E0 ]' k, o4 _" b4 W. ^2 b
假设使用16M主频,单周期指令是 1/16M = 62.5ns; T) Y0 }) [7 x* m/ W' L
一次循环执行的单周期指令 409ms/62.5ns = 6544000条" S  Q4 @) F6 {1 i  T& L
假设编译器效率为80%,转换为C语言就是 6544000 * 0.8 = 5235200. E3 X7 W3 Q9 e9 u
显然,这是不可能的,那么你的程序设计上一定有问题!!!
5 i* P- r( V/ I所以,不要把delay这样的函数放在程序的主干道上....延时的方法很多,这是最差的一种

点评

是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪  详情 回复 发表于 2019-4-16 15:32

该用户从未签到

3#
 楼主| 发表于 2019-4-16 15:32 | 只看该作者
gaoxings 发表于 2019-4-16 15:191 r! a2 w- L9 K! y
循环一次409ms?这个程序得多大啊?
, A+ J- i8 X% R! j4 G假设使用16M主频,单周期指令是 1/16M = 62.5ns
  l: k. u+ r9 `8 z  e一次循环执行的单周 ...
( X2 J, G2 i) {7 V6 g9 J$ W
是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪# V9 J; \9 H9 |) d/ _

点评

40ms也是有问题的,delay不能写在主干道,否则严重限制程序的性能。 如果使用的是矩阵键盘,那么通常使用一个定时器来扫描,一般做在定时器中断内,前提是这个定时器不是频繁中断的类型,否则影响主循环。我最近一  详情 回复 发表于 2019-4-16 15:59

该用户从未签到

4#
发表于 2019-4-16 15:34 | 只看该作者
409ms也太骚了吧

该用户从未签到

5#
发表于 2019-4-16 15:59 | 只看该作者
小黄豆 发表于 2019-4-16 15:32
! M' k* R) ^1 j  J" \& R1 d: I是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪
5 j$ _5 y  A: Q8 g
40ms也是有问题的,delay不能写在主干道,否则严重限制程序的性能。) L7 e" ~; t& R2 {! R! O2 \! `/ g
如果使用的是矩阵键盘,那么通常使用一个定时器来扫描,一般做在定时器中断内,前提是这个定时器不是频繁中断的类型,否则影响主循环。我最近一个项目使矩阵键盘用的10ms一次的扫描,就是做在中断内。执行的语句就是按键按下,去抖计时,时间到产生按下键值,时间超过一定的值,产生按住值,如果放开,产生释放动作,这些动作要进入队列,中断内只做加入队列操作,主循环负责去除按键值进行处理。2 ]6 x$ R) w4 {: {
如果是简单IO输入按键,我通常是做成外部中断,一旦产生外部中断,说明有按键操作,然后开始去抖扫描,还是使用定时器中断。' Q0 Z6 n" Q: b9 x' z
还有一种,如果是简单应用程序,可以不使用任何中断,就在主循环内查询IO口的状态,产生按键之后,置好标志,开始去抖,去抖可以使用一个计时器作为时间参考,会很准。但是如果循环一次40ms,貌似没执行两次按键信号就消失了。去抖时间一般是10~30ms。这时候给人的感觉就是按键不是很灵敏。9 u% T+ T# f( Y+ g0 C: `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-23 11:02 , Processed in 0.093750 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表