简介
七段数码管(seven-segment display)为常用显示数字的电子器件。因为借由七个发光二极管以不同组合来显示数字,所以称为“七划管”、“七段数码管”、“七段显示器”,由于所有灯管全亮时所表示的是“8”,所以又称“8字管”、“8字显示器”。数码管的发光颜色由管中充的低压气体决定,氖加上一些汞或氩,一般为橙色或绿色。
多数七段数码管还会在右下角附加一个表示小数点的灯管,因此也称八段管,如下图所示:
构造
一般的七段数码管拥有八个发光二极管(三横四纵)用以显示十进制0至9的数字外加小数点,也可以显示英文字母,包括十六进制中的英文 A 至 F(b、d 为小写,其他为大写)。现时大部分的七段数码管会以斜体显示。
除七段数码管外,还有十四及十六划等添加额外斜向笔划的显示器;但由于点阵显示器(英语:Dot-matrix)价格的下跌,这些“多划管”已基本上被后者取代。
四位数码管
单个数码管只能显示一个数字(字母),功能受限。所以常常将多个数码管封装起来,如右图所示,常用的为4位数码管。
原理图分析
数码管的电路原理图如下:
按照 LED 的连接方式可以分为共阴极(CC)和共阳极(CA),如上图右侧的 LED 原理图。共阴极的数码管需要单片机的 I/O 口给段选引脚高电平才能点亮,而往往单片机的引脚电流输出能力不足,所以要借助驱动芯片(或缓冲器等,如 74HC245)才能正常点亮数码管。而共阳极只需要单片机的 I/O 口给段选引脚低电平即可点亮,且单片机的引脚灌电流远大于拉电流,所以共阳极的数码管应用更加的广泛。
注意: 由于每段都是由LED组成,故实际电路中应该串联限流电阻,一般接一个8P排阻。
段选和位选
在数码管的控制中有段选和位选两个概念:
- 段选: 针对单个数码管而言,选择要点亮数码管中 a、b、c、d、e、f、g、dp 哪些段。一般通过给 IO 引脚赋值实现。
- 位选: 针对多个数码管而言,选择点哪个数码管,即控制公共端的电平。
仔细观察数码管的段选顺序,按 a、b、c、d、e、f、g、dp 逆时针排列,依次对应字节的低位至高位。因此,我们可以给出共阴极数码管的字形码编码表。
字形码 | dp g f e d c b a | 十六进制 |
---|---|---|
0 | 0011 1111 | 0x3F |
1 | 0000 0110 | 0x06 |
2 | 0101 1011 | 0x5B |
3 | 0100 1111 | 0x4F |
4 | 0110 0110 | 0x66 |
5 | 0110 1101 | 0x6D |
6 | 0111 1101 | 0x7D |
7 | 0000 0111 | 0x07 |
8 | 0111 1111 | 0x7F |
9 | 0110 1111 | 0x6F |
如果是共阳极,其编码表刚好是共阴极的按位取反(~)。其实可以看出,数码管对显示字母并不友好,一般用于显示数字,在电梯楼层显示,计算器显示中应用广泛。
从上述一系列分析中我们得到,数码管相当于 LED 的堆叠,它对 IO 口资源的消耗是巨大的。如果要同时显示多个数字,除了采用芯片(如38译码器)来节约 IO 口,还可以采用不同的显示方式实现。数码管有两种驱动显示方式:静态显示和动态显示。
-
静态显示: 即每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。优点是编程简单,显示亮度高,缺点是占用I/O端口过多,这显然是致命的。
-
动态显示: 利用人眼暂留效应,分时轮流控制 COM端(位选),每个数码管的点亮时间为1ms~2ms,因为频率很快,仿佛所有数码管都是同时点亮的,这即是动态的含义。优点的节省大量IO口,功耗低,缺点是亮度不及静态显示方式,但可以通过降低限流电阻的阻值来提高亮度。
驱动芯片
我们需要时刻清楚一点,单片机适合用于控制,它可以输入输出电平,但他的工作电流却很小,或许单片机驱动单独一个 LED 是足够的,但当 LED 数量多起来时,它便无能为力了,更别提驱动大功率的灯泡或是电机了。这些功率比较大的外设往往需要外接电源,通过驱动芯片来提供电流和能量,单片机提供信号指令。
74HC138译码器和数码管连接
{-----此处需要原理图-----}
将各数码管相同的段选连在一起,由一组八个 GPIO 统一控制,这样每个数码管显示的字符都是一样的。如何使不同数码管显示不同的字符?
只需要给出位选信号指定不同的数码管点亮即可。虽然位选端共有 8 个引脚,但实际上我们只需要每次点亮一个数码管,即只有8种情况,那么完全可以用 3 个引脚来控制这 8 种输出,这就是 38 译码器的实现机理。
观察 38 译码器的原理图,其中 、 为使能端, 高电平有效, 低电平有效(即原理图上横线的含义)。其真值表如下(因为是共阴极数码管,所以 Y 端为低电平时数码管被点亮:
A0 | A1 | A2 | Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
74HC245
{-----此处需要原理图-----}
主要用于提升单片机 IO 口的驱动电流。一般 IO 口的输出电流为20mA,这个电流大小仅仅点亮一颗LED是没有问题的,但对于驱动数码管、点阵等多负载模块就力不从心了。
74HC245芯片可以将输出电流提升至70-80mA左右,具有8路输入和8路输出,可输出低电平、高电平、高阻态三态。其中DIR引脚用于控制输入输出方向,高电平(A => B)、低电平(B => A)。 为使能引脚,低电平输出有效。