注意:共阳极,两端都是阳。共阴极,两端都是阴
注意:P0是控制数码管显示什么数字,也就是控制数码管里面那些灯亮或不亮
注意:控制第几个数码管显示数字需要用下面的规则:
P2_2对应A,P2_3对应B,P2_4对应C,排列为C B A,三位数字(二进制,前面缺一补零)
右侧Y0-Y7则是对应七个数码管
如果想要LED6亮则需要:LED6对应Y5,这个5为十进制,则C(4)=1 B(2)=0 A(1)=1 4+1=5(进制),需要P2_4=1,P2_3=0,P2_2=1,这样选中了Y5,则LED6显示
数码管显示封装函数:
#include <REGX52.H>
//数码管段码表0-9的操作码
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管显示子函数,第一个参数为显示的位置,第二个是显示什么数字0-9
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()
{
Nixie(2,3); //在数码管的第2位置显示3
while(1)
{
}
}
动态数码管显示
也就是使用延迟函数分别调用多次不同位置的数码管进行显示
#include <REGX52.H>
//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时子函数
void Delay(unsigned int xms)
{
unsigned char 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; //段码清0,消影
}
void main()
{
while(1)
{
Nixie(1,1); //在数码管的第1位置显示1
// Delay(20);
Nixie(2,2); //在数码管的第2位置显示2
// Delay(20);
Nixie(3,3); //在数码管的第3位置显示3
// Delay(20);
}
}