动态数码管显示就是在数码管中显示多个数字,利用了人眼的视觉差显示了数字,但是存在一个问题,在顺序执行显示数字和数值的设置时候,数码管的显示数据会出现错乱,因此,需要执行消影,每次在数码管上显示了一个数字之后,需要关闭数码管,再继续显示下一个数码管。
#include <8051.h>
void delayms(unsigned char t){
unsigned char i,j;
i=900;
j=t;
do{
j=t;
while (j--)
{
/* code */
}
}while(i--);
}
unsigned char NixieTable[]={
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f
};
void Nixie(unsigned char Location, unsigned char Number){
switch (Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
default:
break;
}
P0=NixieTable[Number];
delayms(1);
P0=0;
}
void main(){
// P2_4=0;
// P2_3=0;
// P2_2=0;
// P0=0x7d;
while (1)
{
Nixie(1,1);
Nixie(2,2);
Nixie(3,3);
}
}