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