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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
状态机定时器法按键消抖,在定时器中断里面调用按键扫描子程序好还是在主函数里调用好+ k, Z( C' v- k6 }6 y9 {

& v; B1 U; Z! H) b% o$ }; c: d' _' L我的主函数用while循环ad转换和更新1602显示,每循环一次409ms左右,扫描程序放在哪好?
9 {5 g5 ?$ ^$ j8 t8 f! U6 O

该用户从未签到

2#
发表于 2019-4-16 15:19 | 只看该作者
循环一次409ms?这个程序得多大啊?- K/ |$ W0 A6 ?7 Q& c  w7 m2 S6 P
假设使用16M主频,单周期指令是 1/16M = 62.5ns
8 K+ Z$ _4 p' F- e( y一次循环执行的单周期指令 409ms/62.5ns = 6544000条
8 Q7 n1 x* |. a; O9 L  y假设编译器效率为80%,转换为C语言就是 6544000 * 0.8 = 5235200
7 v8 W5 V& k6 v( z) P1 b, g$ {1 `显然,这是不可能的,那么你的程序设计上一定有问题!!!, y# A* W7 C' x
所以,不要把delay这样的函数放在程序的主干道上....延时的方法很多,这是最差的一种

点评

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

该用户从未签到

3#
 楼主| 发表于 2019-4-16 15:32 | 只看该作者
gaoxings 发表于 2019-4-16 15:19
, u! H$ g9 c! t: Y$ Z% u6 t循环一次409ms?这个程序得多大啊?% E& ~  h! _% A  J  F0 F, M) X7 _
假设使用16M主频,单周期指令是 1/16M = 62.5ns
1 ]- ^+ u" z5 z6 U4 ^6 o一次循环执行的单周 ...

: {% \2 P& U. @) R0 I9 N' i3 M是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪1 i0 S9 r9 `; ^3 F' ?

点评

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- V* k$ ?% I/ O1 k
是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪
6 D! [* o5 g$ A% Y: |9 z
40ms也是有问题的,delay不能写在主干道,否则严重限制程序的性能。& H7 x) Z' @, k; P) b, b( J
如果使用的是矩阵键盘,那么通常使用一个定时器来扫描,一般做在定时器中断内,前提是这个定时器不是频繁中断的类型,否则影响主循环。我最近一个项目使矩阵键盘用的10ms一次的扫描,就是做在中断内。执行的语句就是按键按下,去抖计时,时间到产生按下键值,时间超过一定的值,产生按住值,如果放开,产生释放动作,这些动作要进入队列,中断内只做加入队列操作,主循环负责去除按键值进行处理。  J7 s$ {; j# a! T
如果是简单IO输入按键,我通常是做成外部中断,一旦产生外部中断,说明有按键操作,然后开始去抖扫描,还是使用定时器中断。2 j. \# @. W; J7 Z" u8 H/ W
还有一种,如果是简单应用程序,可以不使用任何中断,就在主循环内查询IO口的状态,产生按键之后,置好标志,开始去抖,去抖可以使用一个计时器作为时间参考,会很准。但是如果循环一次40ms,貌似没执行两次按键信号就消失了。去抖时间一般是10~30ms。这时候给人的感觉就是按键不是很灵敏。5 V* u3 h4 x& W3 x/ M" V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-24 01:39 , Processed in 0.125000 second(s), 29 queries , Gzip On.

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

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

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