【51单片机】数据管的消影问题

时间:2022-07-12 09:50:16

数码管的消影


未消影


代码

#include<reg52.h>

sbit wela=P2^7; //位选
sbit dula=P2^6; //段选
void main()
{
while(1)
{ //一直显示
dula=1;
P0=0x06; //显示1
dula=0;

wela=1;
P0=0xfe; //选择第一个数码管
wela=0;
}
}


运行结果


 【51单片机】数据管的消影问题

原因


第一个数码管的1显示较亮但是同时伴随着另外较弱一点段位的显示,可以看出是下面位选的影响(0xfe),然后几

个未选择的数码管亮了,可以看出是前面段选带来的影响(0x06->对应位选的就是1,4,5,6位数码管)。

其实消除影响就是把选择过的状态重新置为没有选择过的状态,段选是置为1才选中所以消除影响应该置为0,位选是

置为0才选中所以消除影响全部置为1 。


如何消影


为了消除段选对位选的影响:应该在两者之间加上P0=0xff;

为了消除位选对段选的影响:应该在两者之间加上 P0=0x00;


 

消影


代码

#include<reg52.h>

sbit wela=P2^7; //位选
sbit dula=P2^6; //段选
void main()
{
while(1)
{ //一直显示
dula=1;
P0=0x06; //显示1
dula=0;
P0=0xff; //消除段选对位选的影响
wela=1;
P0=0xfe; //选择第一个数据管
wela=0;
P0=0x00; //消除位选对段选的影响
}
}


运行结果


【51单片机】数据管的消影问题