单片机计数器妙用,虽然真的很浪费资源,但某些情况很实用
我作为一名准新手,时常被按键消抖所烦恼,然后就想到了利用计数器去进行加减主要是最近在用单片机的rtc万年历,然后配合adc键盘,然后在没加程序的情况下,按加减总是容易加很多,就想,定时器可能是个好选择,就比如我这个万年历,再设置一个计数器,用于跳变哪个加减,配合上这个,岂不是完美,因为万年历基本不占用定时器资源,反而是个浪费,而且adc不断的检测又容易影响万年历的准确性,用上这个之后,在万年历正常使用的情况,基本mian()里面不会去防护调用
所有从某种意义上来说,这也是一种解决方法,不过目前还没想出怎么长按一直累加的操作,或许可以在定时器声明里面去把反复调用,不过这又会影响数码管的正常显示
开个系统定时器做任务调度,或系统监测,如5mS 反思自己一次,
某个按键连续10次处于按下的状态就算有效 !
如STC8/STC32的定时器0的模式三,是不可屏蔽的定时器中断,专门设计来做:
按键处理,任务调度 用 定时器0的模式三
https://img.mydigit.cn/forum/202306/04/192144ulz4lhhmn6pznw22.png
神农鼎 发表于 2023-6-5 19:00
开个系统定时器做任务调度,或系统监测,如5mS 反思自己一次,
某个按键连续10次处于按下的状态就算有效 ! ...
谢谢,谢谢,我试试 本帖最后由 18344371880 于 2023-6-5 22:35 编辑
学习了官方大佬的做法,使用了定时器3进行计数,以下就是我增加的两个定义,不过,我计数器0和1都还是采用0模式,目前使用未出现问题,明天再结合万年历试试
不过有一个重点要注意,要在main()的while里反复调用定时器3的初始化函数,初始化的话,是没有开启计数的,不然没按下的话,也32毫秒左右中断一次,谁受得了啊
attach://11650.mp4
刚刚和同事逛街去了,要不然估计现在万年历也移植完成了,确实你一个效率很高的方法
本帖最后由 18344371880 于 2023-6-5 22:55 编辑
18344371880 发表于 2023-6-5 22:33
学习了官方大佬的做法,使用了定时器3进行计数,以下就是我增加的两个定义,不过,我计数器0和1都还是采用0 ...
不对,我后来试验了一下,调用初始化没用,定时器还是在中断 问题解决了,数码管678位我加了个变量,如果还在自加说明中断还在继续,不自加说明中断停了,代码稍微改了一下
一般项目中,用一个定时器,比如定时器0,做系统定时,常用1ms,所有ms级的定时都在这个中断中处理,建议倒计时方式。
然后,按键一般是20~50ms间隔读一次,间隔时间刚好是消抖时间。每隔20~50ms设置一个标志,主程序根据标志读键,并清0标志。 梁工 发表于 2023-6-6 00:00
一般项目中,用一个定时器,比如定时器0,做系统定时,常用1ms,所有ms级的定时都在这个中断中处理,建议倒 ...
谢谢,这个确实是,不过我做这个的目的主要也就是一个设想,加上再丰富丰富各种定时器的灵活运动,不怕嘲笑,我学单片机真的是野路子的,我都觉得我为啥能学到现在这个地步,哈哈哈哈,所以现在板子有了,要玩出花来{:lol:}
页:
[1]