主要毛病为:
写好的驱动 数码管动态刷新 和LED刷新 的俩个函数模块 分别单独简单用基本没毛病。
但放在定时器一起用时 两方人马都乱套了。
LED会胡乱有规律跳闪(总之不是人想要的效果,程序也没规定它这么跑)。
数码管会有鬼影重重现象,鬼影现象主要体现为:在某个位选 位置确实在显示自己想要的段选数字或符号,亮度也稍大,但却在其他位选也有显示该段选,该显示亮度也稍微欠佳。
我本人遇到的情况为以下有规律的鬼影:
我想让数码管从0~1000刷新计数发现只有 7号位选有稳定显示,其他位选都是鬼影
以下为7号位选从0~10变化的显示过程:
(“—”表示无显示; 红字表示高亮的位选和段选显示正确的地方; 灰色表示鬼影显示)
位选: 0 1 2 3 4 5 6 7
— — — — — — 0 0
1 — — 1 1 1 1 1
— — 2 — — 2 — 2
— — — — 3 3 — 3
4 — — 4 4 — — 4
— 5 — — 5 — — 5
— 6 — — — — — 6
— — — 7 7 7 7 7
— — — — — — — 8
— — — — 9 — — 9
问题代码截取(工程中有修正后的源码):
数码管和LED都在定时器服务函数里刷新,定时器同时也提供了计数条件:
定时器0中断服务函数截图:
解决方案:
数码管和LED都应该放在定时器中刷新,
数码管刷新P0口段码传输的太快,超过了74hc573锁存的速度,上一次数据还没处理完
就传来了新的数据。
所以应该要加250us延时,
为何为250us ?
因为八个数码管动态扫描结束刚好8*250=2000us=2ms。
调试好的原始工程在此处下载:
https://download.csdn.net/download/qq_64257614/87776747?spm=1001.2014.3001.5503