1. 首先你的定时器时间,人的视觉残留是20ms,想要用到定时器扫描数码管,那么就有两种选择: 1> 每隔20ms,定时器扫描三位数码管一次,这样的缺点是数码管消耗的电流会有点大,因为同时点亮三只数码管。要保证数码管的扫描时间小于20ms,即中断时间。 2> 每隔6.5ms,扫描一位数码管,确保在20ms内要扫描完毕三位数码管,这样的缺点是程序的设计稍微要复杂点,但是功耗会降低。 2. 你程序中的设计其实执行的是上面的第一种做法,同一时间扫描三位数码管。 3. 你STM32程序的写法,TIM3_IRQHandler(int x )中断函数居然带了参数,建议你先调通定时器的用法,快速的办法是移植别的定时器程序,在定时器中断中进行led的闪烁,先把这个调通然后再把显示函数加进去就好了。 4. 再说显示函数,你暂时不用定时器,主函数while中执行显示函数,显示正确的话,放到定时器中就好了。显示函数看着没什么大的毛病,应该是可以运行的。 |
@qmmdzd :你这函数已经成功,调用一次就显示3位。 改成调用一次就显示其中一位。调用三次完成1轮显示。
@xch :按照我这个写法延时去了有问题 我试过 去了显示就乱了 不过你说的变量改变方式用static我还没试 就把k设置为全局变量了 中断加一 依旧不行
@qmmdzd :按照k值提取对应十进制数字进行显示,去掉延时函数
@qmmdzd :很简单啊!你的程序你已经证明基本可用。 问题在DisPlayNum()之中的k 变量。 把它改成static int k=0; 每次调用+1,去掉for 循环, 0 1 2 0 1 2........
@xch :如果一次显示一位 程序该如何写呢?
@qmmdzd :一次中断显示一位数码管,定时中断显示还可以确保显示亮度均匀
@xch :坛友意思是其它两个扫描太快看不出来?那该如何解决呢
没看到中断如何显示。 是不是一次中断把3个LED都驱动了? 结果最后一个被驱动的点亮,其他应该很昏暗没看出来