数码管
就算有多个数码管被点亮也显示相同的数字
数码管原理图
译码器原理图
高低位表示
数码管LED3显示3
#include <REGX52.H>
void main()
{
//高低位顺序: C B A
P2_4=0; //C
P2_3=1; //B
P2_2=0; //A
P0=0x4F; //显示3
while(1)
{
}
}
运行效果
指定第几个LED显示数字几
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
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];
}
void main()
{
//第三个LED显示5
Nixie(3, 5);
while(1)
{
}
}
运行效果
多位数码管显示不同数字
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
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, 1);
Nixie(2, 2);
Nixie(3, 3);
}
}
注意: 需要进行消影操作, 否则会显示错乱
未消影: 位选-->段选-->位选-->段选-->位选-->段选
上一次的段选结果会直接到下一位置导致显示错乱
消影: 位选-->段选-->清0-->位选-->段选-->清0-->位选-->段选