驱动数码管
数码管原理
单位数码管
数码管中每一个段的连接都是根据就近原则牵出引脚。
4位数码管
4位数码管分为位选端(DIG)和段选端(ABCDEFGDP),由单片机控制位选端和段选端实现数码管每一位的显示。
数码管静态显示
编程思路
让第一个数码管显示指定数字。
需要分为两步。第一步,选定第一个数码管;第二步,将指定数字的段码发送给第一个数码管。
#include <REGX52.H>
unsigned char NixieTube[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_2=1;P2_3=1;P2_4=1;break;
case 2:P2_2=0;P2_3=1;P2_4=1;break;
case 3:P2_2=1;P2_3=0;P2_4=1;break;
case 4:P2_2=0;P2_3=0;P2_4=1;break;
case 5:P2_2=1;P2_3=1;P2_4=0;break;
case 6:P2_2=0;P2_3=1;P2_4=0;break;
case 7:P2_2=1;P2_3=0;P2_4=0;break;
case 8:P2_2=0;P2_3=0;P2_4=0;break;
}
P0=NixieTube[Number];
}
void main()
{
while(1)
{
Nixie(1,2);
}
}
数码管动态显示
编程思路
让8个数码管分别显示1——8共8个数字。
目前只要静态画面变化速率达到1/24秒就可以在视觉上形成动态画面,根据视觉暂留效应,每隔1ms向数码管发送位选和段选,就能在视觉上点亮8根数码管。
#include <REGX52.H>
unsigned char NixieTube[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_2=1;P2_3=1;P2_4=1;break;
case 2:P2_2=0;P2_3=1;P2_4=1;break;
case 3:P2_2=1;P2_3=0;P2_4=1;break;
case 4:P2_2=0;P2_3=0;P2_4=1;break;
case 5:P2_2=1;P2_3=1;P2_4=0;break;
case 6:P2_2=0;P2_3=1;P2_4=0;break;
case 7:P2_2=1;P2_3=0;P2_4=0;break;
case 8:P2_2=0;P2_3=0;P2_4=0;break;
}
P0=NixieTube[Number];
Delay(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);
}
}