译码器:用于将左边的三位转换为右边只有0的二进制;
数码管为共阴极;
数码管显示:
#include <REGX52.H>
unsigned int NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//数码管数字码
void Delayms(unsigned int time)
//延时函数 ms
{
unsigned char i,j;
while(time--)
{
i=2;
j=239;
do{
while(--j);
}
while(--i);
}
}
void Nixie(unsigned int Location,unsigned int Number)//why use "char";char空间最小1字节;
//Nixie(数码管显示位置,显示的数字);
{
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];//0x7d;0111 1101
Delayms(1);
P0=0x0;//消影;消除防止位选和段选间的残影
}
void main()
{
while(1)
{
Nixie(1,5);///静态数码管显示
Delayms(2);
Nixie(2,2);
Delayms(2);
Nixie(3,0);
Delayms(2);//动态数码管显示;
}
}
自己diy时可用: