1 数码管的显示原理
数码管内部是由 7 个条形的发光二极管和右下方一个圆形的发光二极管组成,这样一共有8 段线。根据显示需要,有选择性地让对应的发光二极管发光,就能实现不同的显示效果。
1.1 数码管内部结构图
由二极管的单向导电性我们知道,当二极管阳极的电压大于阴极的电压的时候,二极管就会导通。共阴极数码管是将所有发光二极管的阴极接在一起作为公共端 COM当公共端接低电平时,某一段阳极上的电平为“1”时,该段点亮,电平为“0”时,该段熄灭。
数码管显示参考表
这里建议咱们自己下去先根据数码管结构写一遍再看此表。
2 单片机中的数码管模块
74HC245
74HC245是典型的CMOS型三态缓冲门电路,八路信号收发器。由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。主要应用于大屏显示,以及其他的消费类电子产品中增加驱动。
总结:充当主控芯片的驱动的缓存器
74HC138
通过P2^2 P2^3 P2^4三个输入口来控制八位数码管的位置显示
3 静态显示
代码示例
#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()
{
Nixie(2,3);
while(1)
{
}
}
实物展示
4 动态数码管显示
相比于静态数码管,动态数码管并非实时显示多个图像,而是通断极短的延时使得人眼认定为是在实时显示,实际上数码管仍然只显示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 i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
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(2) ; //注意这里的延时,正是动态数码管的重点所在
P0=0x00;
}
void main()
{
while(1)
{
Nixie(1,1);
// Delay(20);
Nixie(6,2);
// Delay(20);
Nixie(7,3);
// Delay(20);
}
}
实物演示
~~~延时过高时