学习冲哥视频(10):数码管动态显示——消除显示“鬼影”
1、 多位数码管显示1位的数码管显示只要控制段码就可以显示出想要的图案,属于静态显示;多位的数码管一位段码控制端是共用的,每一位有一个公共端,这时候要想显示多位的图案,就必须使用动态刷新的原理,利用人眼视觉暂留的原理,让多位同时显示。其实同一时刻只有其中的一位上在通电导通,其他位是不通电的,但是因为人眼看到的东西不会立马消失,有一小段时间是停留在视觉当中的,所以我们如果能适当的控制每一位从熄灭到再次点亮的时间,这样我们眼睛就能够看清所有位的团了。2、多位数码管显示的控制方式多位数码管的每一位显示必须有两个控制:一个是控制显示图案的段码,另一个就是它 的位码。让多位轮流显示,如果轮流显示的时间间隔不太长的话,这样我们就能看到多位数码管显示的内容了。显示次序:以四位数码管同时显示为例图10.1图10.1所示的只是个基本的编程思路,但是实际上会有个缺点就是每一位的显示会特别的暗,因为程序指令的时间太快了,而数码管中的LED还没来得及达到最亮的状态就更改了,所以在眼中残留的亮度是特别弱的。鉴于此,我们需要在每一位数码管段码位码设置完以后,延时一小段时间,让LED能够达到其最亮的状态后再执行改变,程序设计如图10.2所示:
图10.2 每一位的位码后要跟一个短延时,以保证亮起的数码管能充分点亮在视觉中形成暂留影像。这时看似挺完美的了,但是还会出现如下图(图10.3)所示的情况:
图10.3图10.3显示的情况是程序在段码2的时刻,位码却还是位码1,等到下个指令才会变为位码2,虽然一条指令的时间挺短的,但是硬件执行的速度却快于指令的执行时间,导致位1的位置上会有位2显示的内容,造成通常所说的“鬼影”。为了避免次现象发生,我们初步的想法应该就是在执行段码之前先将所有的位码“清除”,清除的意思就是对于高电平驱动位码来说就是让所有的位码都为低电平,低电平驱动位码的让所有的位码都为高电平,这样下一位的段码虽然执行了,但是因为位码一个都没驱动,位1上就不会出现位2的内容了。程序设计流程如图10.4所示:
图10.4分析到这,感觉已经挺完美的了吧,理论上是完美的,但是还需要考虑实际的情况,那就是清除位码后硬件上它也是需要时间来反应的,因为所有的硬件构造难免都会有等效电容的存在,因为存在电容,电容的特性就是两端电压不能突变,需要听过至少3-5个时间常数后才能达到更改后的状态。因此还需要完善一下图10.4所示的流程,如图10.5所示:
图10.5图10.5所示的程序设计流程是经过实践验证过可用的设计,不会出现如图10.4所示那样,清除了位码,但是还是有“鬼影”存在的现象了。有兴趣的可以按照图10.1-5那样试验一下,试验的时候设计成让数码管隔一个亮一个的方法,避免“鬼影”不明显的现象。
如何解决:实验箱上P6口控制的8个指示灯会微亮 | 强推挽 - STC 实验箱/核心功能实验板,原理图,MCU结构讨论区,大学教材 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
神农鼎 发表于 2023-11-21 19:00
如何解决:实验箱上P6口控制的8个指示灯会微亮 | 强推挽 - STC 实验箱/核心功能实验板,原理图,MCU结构 ...
我还没硬件,暂时还遇不到微亮的现象,只是通过32G的视频教学加上工作中的经验写了些内容。之前也遇到过这些现象,一般有双电源的板子在设计的时候会有您说的现象。我没很明白你说的实验箱的LED是怎么个连接原理,哪来的3.3V? 刷新时间问题吧 没有试过用位码消隐的,我一直是利用段码消隐。就是在位码刷新前,将段码置为0xFF(共阳),位码刷新后再赋值段码 遥指杏花村 发表于 2024-1-23 13:25
没有试过用位码消隐的,我一直是利用段码消隐。就是在位码刷新前,将段码置为0xFF(共阳),位码刷新后再赋值 ...
用段码和位码消隐其实都可以,我都测试过,最后完美的通过各种测试的是图10.4所示的结构,把段码和位码调换一下,清除所有位码改成清除所有段码,应该也是可以的。 是不是要先关闭显示再写入断码,最后再开启显示会解决阴影
页:
[1]