硬件电路图:
![](https://img-blog.csdnimg.cn/img_convert/e634daf147544c358965bd959b1f1a1d.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/ec6dee99d1754d4ba31d5f5c11c5313e.jpeg)
静态数码管:
#include<REGX52.H>
//单片机的P2->74HC138->数码管LED位选
//单片机P0->74HC245->数码管段选
void main()
{
//74HC138接P2口。
//如果要让数码管LED6显示,则74Hc138的Y5要给低电平,则P2口是101,表示6.
P2_4=1;//最高位
P2_3=0;
P2_2=1;//最低位
//在LED6上显示6,
P0=0x7D; //高位到低位,0111 1101,则P0口接0x7D
while(1)
{
}
}
//创建子函数(位选,段选):switch-case 。优化程序代码。视频代码
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
switch(Location)//74Hc138译码器三个输入端,低电平有效
{
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;
}
P2 = NixieTable[Number];
}
void main(){
Niexie(5,3);
while(1){
}
}
动态数码管:
在静态数码管代码的基础上,显示多个数码管并且加延时。
消影现象(位选-段选,位选-段选,位选-段选),需要在子函数中清零(P0=0x00)
数码管驱动方式:直接扫描、专用驱动扫描
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
switch(Location)//74Hc138译码器三个输入端,低电平有效
{
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;
}
P2 = NixieTable[Number];
Delay(1); //消影
P2=0x00;//消影
}
void main(){
while(1){
Niexie(1,1);
Delay(20);
Niexie(2,2);
Delay(20);
Niexie(3,3);
Delay(20);
}
}