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

数码管的消影


未消影


代码

#include
 
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张图片

原因


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

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

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

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


如何消影


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

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


 

消影


代码

#include
 
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单片机】数据管的消影问题_第2张图片

你可能感兴趣的:(--51单片机)