1. 程式人生 > >【51微控制器】資料管的消影問題

【51微控制器】資料管的消影問題

數碼管的消影

未消影

程式碼

#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;
      }        
}

執行結果

 

原因

第一個數碼管的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;   //消除位選對段選的影響
      }        
}

執行結果