#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
}
unsigned char NixieTubeTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void NixieTube(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=NixieTubeTable[Number];
Delay(2);
P0=0x00; //清零
}
void main()
{
while(1)
{
NixieTube(1,1);
// Delay(20);
NixieTube(2,2);
// Delay(20);
NixieTube(3,3);
// Delay(20);
}
}
数码管的消影
位选 段选 位选 段选 位选 段选…
- 数码管的信号发送的快慢:上一段的段码没有消失,下一段的位码就来到了,导致信号串在一起,需要在两段信号当中添加一个清0的信息,这样即使串了,也不会显示乱码的现象:
位选 段选 清零 位选 段选 清零 位选 段选 清零…
数码管驱动方式
- 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间(一旦程序受到阻塞,就会出现闪烁或熄灭等现象)
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
}
unsigned char NixieTubeTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void NixieTube(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=NixieTubeTable[Number];
Delay(2);
P0=0x00; //清零
}
void main()
{
while(1)
{
NixieTube(1,1);
// Delay(20);
NixieTube(2,2);
// Delay(20);
NixieTube(3,3);
// Delay(20);
}
}
- 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可