一、硬件介绍
LED数码管是一种由多个发光二极管(LED)封装在一起,形成“8”字型的显示器件。它广泛用于仪表、时钟、车站、家电等场合,用于显示数字、字母或符号。
通过控制点亮a b c d e f g dp来显示数字,本实验开发板的数码管是两个四位一体的。
二、原理图
2.1 动态数码管
从电路图中看出,动态数码管的上端分别为LED1-8,通过控制LED1-8的电平来控制某一位的数码管显示,称之为:位选;
在数码管的下方是每个LED的8个位a,b,c,d,e,f,g,dp。通过电路与 74HC245相连,通过控制74HC245的输出来控制某一数码管显示的数字,即a-dp的哪些段,称之为:段选;
位选:控制LED1-8,用于确定8个数码管的某一位;(如第一个数码管亮)。
段选:控制a,b,c,d,e,f,g,dp,用于确定某一个数码管显示的数字;(如显示的数字为6)。
其中 74HC245芯片用来增加单片机引脚的驱动能力。
2.2 74HC138译码器
其输入端为P22-P24,输出端为LED1-LED8,为一种三通道输入、八通道输出译码器,通过P22-P24控制LED1-LED8,是一种低电平有效器件。即将3位二进制(P22-P24),译码成8种输出状态,并且一共有8个输出I/O,这8位输出的特点是:同时只有一位有效、低电平表示有效,表示选中,74HC138实现了用3根线选择8根线(8选1)的功能。
2.3 消影问题
动态数码管显示存在消影问题
导致消影问题的原因如下:
-
视觉暂留效应:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间后,光的感觉才会消失,这个短暂的时间称为视觉暂留时间。在数码管动态显示中,如果刷新速度不够快,前一个显示内容的残像会在视觉上残留一段时间,导致重影现象。
-
刷新速度限制:数码管的刷新速度受到硬件和软件控制的影响。硬件上,如驱动电路的速度、锁存器的响应时间等;软件上,如控制程序的执行效率、延时函数的设置等,都会影响数码管的刷新速度。
-
数据残留:在动态显示过程中,如果前一个显示内容的数据在P0口或其他控制端口上残留,而没有及时清除,那么在下一个显示周期中,这些残留数据可能会与新数据发生冲突,导致显示异常。
解决办法:在位选和段选之间进行清零处理,即P0=0x00。
三、实验
3.1 代码示例
#include <REGX52.H>
unsigned char NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//Êý×Ö0-9void 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, unsigned char 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);}
}