靜态數位管為七位數字顯示另加以為小數點顯示位,共八個LED燈管組成。
使用八個IO口分别控制八個LED燈。
動态數位管:
使用三八譯碼器由三個IO口來調配八個八位數位管,另加八個IO來控制目前八位數位管的顯示。
三八譯碼器:為000—111八個狀态(000,001,010,011,100,101,110,111)。
實際上八個數位管并不是同時顯示,但是因為在一定的時間變化上,人眼識别不到,便可達到八個八位數位管同時顯示的效果。
注:此原理也可用于調節LED燈管的亮度,使用PWM軟信号控制LED燈的亮度。人眼并不會觀察到LED燈閃爍,而是随占空比的增大而觀察到LED燈變暗。
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//段選信号
void delay(unsigned int i)
{
while(i--);
}
void Display(unsigned long int u)
{
unsigned int i,a;
for(i=0;i<8;i++)
{
switch(i)
{
case(0):
LSA=1;LSB=1;LSC=1; break;//顯示第0位
case(1):
LSA=0;LSB=1;LSC=1; break;//顯示第1位
case(2):
LSA=1;LSB=0;LSC=1; break;//顯示第2位
case(3):
LSA=0;LSB=0;LSC=1; break;//顯示第3位
case(4):
LSA=1;LSB=1;LSC=0; break;//顯示第4位
case(5):
LSA=0;LSB=1;LSC=0; break;//顯示第5位
case(6):
LSA=1;LSB=0;LSC=0; break;//顯示第6位
case(7):
LSA=0;LSB=0;LSC=0; break;//顯示第7位
}
a = u%10;
u = u/10;
P0=smgduan[a];//将段選信号賦給P0
delay(50);
P0=0x00;
}
}
void main()
{
while(1)
{
Display(12345670);
}
}