51開發板上的數碼管是共陽極 ,
兩個鎖存器的鎖存端分別和單片機的 P2.6,P2.7 相連。
其中: U1(段選)的數據輸入端接到單片機的P0口;
U2(位選)的數據輸入端接到單片機的P2口;
動態顯示的過程是:
第一個數碼管顯示0,延遲一會,第二個顯示1,延遲一會,依次。。。 利用發光二極管的余暉和人眼視覺暫留效應,使人感覺數碼管的各位都在顯示,其實是,數碼管是一位一位的輪流顯示,人眼沒辦法分辨出來。
注意:加消影語句。
動態顯示的程序:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table1[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x90,0x88};
uchar code table2[]=
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit wela=P2^7;
sbit dula=P2^6;
uint n,m;
void delay ()
{ uint i,j;
for(i=0;i<5;i++)
for(j=0;j<100;j++);
}
void main()
{
while(1)
{
wela=1;
P2=0XFF; // 消影
P2=table2[n];
wela=0;
n++; if(n==7) n=0;
dula=1;
P0=0XFF;
P0=table1[m];
dula=0;
delay();
m++; if(m==7) m=0;
}
}
|