要点: 1、切换时间要尽可能短,让有效显示时间长,这样亮度才能达到最大。 2、切换前要准备好切换的数据,这样才能减少切换执行的指令。 3、切换动作的第一步是关显示,这样切换时的数据变化才不被显示,显示才不会混乱。 4、做切换动作。 5、最后一步,是打开新一显示。 切换步骤如下(切换过程仅在条指令): 1、U3 = 全关 2、U1 = 新的显示位数据(数据事先做好,如放在变量NEX_D中,在此取用) 3、U3 = 打开新显示位(数据事先做好,如放在变量NEX_W中,在此取用) P0 = 全关 → U3.LE = 1使能 → U3.LE = 0锁存 → 关显示【消隐】 P0 = NEX_D → U1.LE = 1使能 → U1.LE = 0锁存 → 【切换显示数据】 P0 = NEX_W → U3.LE = 1使能 → U3.LE = 0锁存 → 【切换显示位】 你的错误是: dula = 1; 错误:【这时Ux打开,但数据P0是混乱的,导致短暂显示不受控】 改正:【放在正确的数据准备好之后】 P0 = table[numdu] 不佳:【C语言取数组中的数据,不止一条指令,也即占用时间长了】 最佳:【事先做 NEX_x = table[numdu],在此:P0 = NEX_x】 dula = 0【OK】 改正后: P0 = NEX_x;【切换前准备好 NEX_x = table[numdu]】 dula = 1; dula = 0; |
前两天我也遇到了,proteus上使用数码管必须消影。 当数码管切换到下一位时,这个数码管就会显示上一个数码管的数字,由于切换时间很短,一闪而过,给人一种影的感觉,为了不显示上一个数,应该在切换数码管之前把所有的灯关掉,这就是所谓的消影。 |
谢谢老哥,修改成功。请问这是段选P0口赋值和位选P0口赋值相互之间的干扰吗? 我也刚意识到,上传的代码没有注释 ![]() |
要加消影
|