完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
40ms也是有问题的,delay不能写在主干道,否则严重限制程序的性能。 如果使用的是矩阵键盘,那么通常使用一个定时器来扫描,一般做在定时器中断内,前提是这个定时器不是频繁中断的类型,否则影响主循环。我最近一个项目使矩阵键盘用的10ms一次的扫描,就是做在中断内。执行的语句就是按键按下,去抖计时,时间到产生按下键值,时间超过一定的值,产生按住值,如果放开,产生释放动作,这些动作要进入队列,中断内只做加入队列操作,主循环负责去除按键值进行处理。 如果是简单IO输入按键,我通常是做成外部中断,一旦产生外部中断,说明有按键操作,然后开始去抖扫描,还是使用定时器中断。 还有一种,如果是简单应用程序,可以不使用任何中断,就在主循环内查询IO口的状态,产生按键之后,置好标志,开始去抖,去抖可以使用一个计时器作为时间参考,会很准。但是如果循环一次40ms,貌似没执行两次按键信号就消失了。去抖时间一般是10~30ms。这时候给人的感觉就是按键不是很灵敏。
最佳答案
|
|
|
|
循环一次409ms?这个程序得多大啊?
假设使用16M主频,单周期指令是 1/16M = 62.5ns 一次循环执行的单周期指令 409ms/62.5ns = 6544000条 假设编译器效率为80%,转换为C语言就是 6544000 * 0.8 = 5235200 显然,这是不可能的,那么你的程序设计上一定有问题!!! 所以,不要把delay这样的函数放在程序的主干道上....延时的方法很多,这是最差的一种 |
|
|
|
andy_wsj 发表于 2015-8-11 09:28 是40ms,打错了,就是用状态机和定时器这种方法检测按键,一般读取按键值的子程序放在哪 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
852 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
592 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
705 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
926 浏览 2 评论
657 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11998 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 21:47 , Processed in 0.550657 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号