由于单片机的I/O口有限,所以采用的是一位一位显示,再循环,动态数码管显示,首先是要有一个选位的,再将要显示的数据传出,显示在数码管上,这里也是利用的一个人眼的视觉暂留的一个现象,以此达到同时显示多位数据的效果
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delayms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while (xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
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;
}
P0=NixieTable[Number];
Delayms(1);
P0=0x00;
}
void main()
{
while(1)
{
Nixie(1,1);
Nixie(2,2);
Nixie(3,3);
Nixie(4,4);
Nixie(5,5);
Nixie(6,6);
Nixie(7,7);
Nixie(8,8);
}
}
首先就是一个选位,然后是显示数据,在显示的函数体中,还有一个消影的步骤,这个是可以消除在选位过程中数据的一个显示有残影的现象。