关于数码管的驱动方式
第一种就是单片机的直接扫描:
硬件设备简单,但会消耗大量的单片机CPU时间
这种的特点就是,一旦程序受到阻塞没来得及给单片机的数码管扫描代码,那么我们的数码管就会阻塞或者熄灭。
第二种就是专用的驱动芯片:
内部自带显存,扫描电路,单片机只需要告诉他显示什么即可。
这种芯片有一种叫做TM1640.这个使用更为方便
以下关于单片机的代码就是第一种:让单片机直接进行扫描
#include <REGX52.H>
unsigned char NixieTable[] =
{
0x3F,// 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0X07,// 7
0X7F,// 8
0X6F,// 9
0x77,// A
0x7C,// B
0x39,// C
0x5E,// D
0X79,// E
0x71,// F
0x00,// ¿Õ
};
void Delay(unsigned int xms)
{
unsigned char i,j;
i = 2;
j = 239;
do
{
while(--j);
}while(--i);
xms --;
}
void Nixie(unsigned char Location, 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];
Delay(1);
P0 = 0x00;
}
void main()
{
while(1)
{
Nixie(1,5);
Nixie(2,2);
Nixie(3,0);
Nixie(4,1);
Nixie(5,3);
Nixie(6,1);
Nixie(7,4);
}
}
其单片机的运行结果如下: