数码管消影问题总结

本文总结了数码管消影的现象及原理,探讨了为何P0 = 0xff能有效消除数码管残影,并讨论了关于先写位选还是先写段选的争议及其在单片机应用中的实践。
AI助手已提取文章相关产品:
(1)消影方法1
先送段选数据后送位选数据时,需要在中间加入一条语句P0=0xff,作用是消影。现在来分析一下是怎样
产生影的?
当dula = 0后锁住了P0口的数据,即P0口仍然保持着上次的段选数据,然后再执行接下来的打开味轩锁存器
命令,原来保持在P0口的段选数据将立即通过位选锁存器直接加在数码管上,之后再次通过P0口给位选锁存
送入数据,虽然这个过程是短暂的,但是在数码管告诉显示状态下,我们仍然看到数码管出现显示混乱的

现象。

P0 = 0xff为什么能起到消影的作用?

将段选信号锁在P0口后,然后执行的就是P0 = 0xff,当打开位选锁存器后,P0口的数据0xff通过位
选锁存器直接加在数码管上,产生的效果就是:一个数码管都不会选中。之后再次通过P0口给位
选锁存器送入数据。数码管就会被重新选中,就会起到消影的作用。


(2)消影方法2
我们可以改变一下代码的顺序,从而消去数码管的影子。
我们可以这样写
dula = 1;
P0 = 0xfe;
dula = 0;
P0 = 0xff;//消影
wela = 1;
P0 = 0xde;
wela = 0


改变一下:
P0 = 0xfe;
dula = 1;
dula = 0;
P0 = 0xde;
wela = 1;
wela = 0;
之所以会产生影,主要是因为段锁存锁住的P0口的数据0xfe在位锁存打开的时候,优先比P0 = 0xde控制数码管
就是说在打开位锁存的一瞬间先执行了P0 = 0xfe,然后有执行了P0 = 0xde这就是出现影的原因
而现在我们先把段锁存锁住的P0的数据进行覆盖(即利用0xde覆盖P0覆盖掉oxfe),然后在打开位选锁存器
这样就可以消去影子。


(3)百度了一下,在上面看到对“先写位选还是先写段选的问题”答案很不一直。其实对与实物单片机

(proteus没有用过)来说先写哪个都是可以的,只要把影去掉就行。
 先写位码后段码
   void display()
{
P0 = 0xff;
wela = 1;
P0 = 0xfe;
wela = 0; 
//P0 = 0x00;
        dula = 1;
P0 = d_table[0];
dula = 0;
delay_Ms(5);
    
P0 = 0xff;
       wela = 1;
P0 = 0xfd;
wela = 0;
// P0 = 0x00;
dula = 1;
P0 = d_table[1];
dula = 0;
delay_Ms(5);

P0 = 0xff;
wela = 1;
P0 = 0xfb;
wela = 0;
// P0 = 0x00;
dula = 1;
P0 = d_table[2];
dula = 0;
delay_Ms(5);


P0 = 0xff;
wela = 1;
P0 = 0xf7;
wela = 0;
// P0 = 0x00;
dula = 1;
P0 = d_table[3];
dula = 0;
delay_Ms(5);
}  
其实,段码对位码产生影响,位码同样会对段码产生影响。这就是我写P0 = 0x00的原因。但是最后,我
发现其实写不写这句话却没有影响。原因是产生的影响被数码管上的管给覆盖住了,看不出来。但是实际
上是会产生影响的。



您可能感兴趣的与本文相关内容

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值