百科知识

数码管显示0到9的段码全攻略

数字显示屏在电子技术领域中占据着重要的地位,其工作原理主要依赖于对数码管不同引脚电流的控制。通过精确调节电流的通断状态,数码管内部的发光二极管会发出光芒,从而将数字信息直观地呈现出来。这种显示方式不仅可以用于展示时间、日期、温度等数值型数据,还广泛应用于需要直观显示信息的各种电器设备中,尤其是家电产品,如空调、热水器、冰箱等。这些设备之所以普遍采用数码管,主要是因为其成本效益高且操作简便。对于需要更复杂显示功能的场合,则可能会选择液晶显示屏或荧光显示屏等。

数码管,也被称为LED数码管,通常由7个或8个LED灯段组成,其中8段数码管还会额外包含一个小数点。这意味着,要显示一个完整的数字,需要同时控制8个LED灯段。根据LED连接方式的不同,数码管可以分为共阴型和共阳型两种。

共阳数码管的设计特点是将所有发光二极管的阳极连接在一起,形成一个公共阳极(COM端口)。在使用共阳数码管时,公共阳极(COM)通常连接到+5V电源。只有当某个字段发光二极管的阴极为低电平时,该字段才会发光;如果阴极为高电平,则该字段不亮。

相比之下,共阴数码管则是将所有发光二极管的阴极连接在一起,形成公共阴极(COM端口)。共阴数码管在使用时,公共阴极(COM)通常连接到地线(GND)。只有当某个字段发光二极管的阳极为高电平时,该字段才会发光;如果阳极为低电平,则该字段不亮。

当特定电压施加到数码管的某个段上时,该段就会发光,从而形成我们能够看到的数字形状。例如,要显示数字“2”,需要同时点亮A、B、G、E、D段,而F、C、DP段则保持熄灭状态。因此,标准的LED数码管可以显示的数字和字符包括0到9、A到F等。

LED数码管的引脚定义

当然,市面上还存在一些更为复杂的数码管类型,但由于其复杂性,这里不再详细展开介绍。

要使数码管显示出特定的数字,其实非常简单,只需对不同的LED段施加适当的电压即可。然而,设想一下,如果需要显示如“13:08”这样的时间,我们需要控制20个LED点亮,12个LED熄灭。如果每个LED都连接单独的线路,那么总共需要32条线路,这在实际应用中显然是非常低效的。

因此,数码管的驱动方式设计得非常灵活,主要分为静态驱动和动态驱动两种。

静态显示驱动:

静态驱动,也称为直流驱动,是指每个数码管的每个段码都由单片机的I/O端口直接驱动,或者通过BCD码二-十进制译码器进行驱动。静态驱动的优点在于编程简单,显示亮度高,但缺点是会占用大量的I/O端口。例如,驱动5个数码管进行静态显示就需要5×8=40根I/O端口。一个89S51单片机只有32个可用的I/O端口,因此在实际应用中往往需要增加译码驱动器,这增加了硬件电路的复杂性。

动态显示驱动:

数码管的动态显示接口是单片机中应用最为广泛的一种显示方式。动态驱动是将所有数码管的8个显示笔划(a,b,c,d,e,f,g,dp)的同名端连接在一起,同时为每个数码管的公共极(COM)增加位选通控制电路。位选通由各自独立的I/O线控制。当单片机输出字形码时,所有数码管都会接收到相同的字形码,但实际显示哪个数码管取决于单片机对位选通(COM)端电路的控制。因此,只有被选通的数码管会显示字形,未被选通的数码管则不会亮。通过分时轮流控制各个数码管的COM端,使各个数码管依次受控显示,这就是动态驱动的原理。在轮流显示的过程中,每位数码管的点亮时间通常为1~2毫秒。由于人的视觉暂留现象以及发光二极管的余辉效应,只要扫描速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。动态显示的效果与静态显示相同,但可以显著节省I/O端口数量,并且降低功耗。

在实际应用中,绝大多数数码管都采用动态显示方式,尽管人眼无法察觉到其动态特性。但我们可以通过手机相机来验证这一点。当我们将手机相机的快门速度调慢时,拍下的数码管照片会显示完整的数字;而当快门速度调快到一定值时,拍下的数字则会显得不完整,这也就证明了数码管采用了动态显示驱动方式。

快门速度1/24秒时拍下的照片

快门速度1/625秒时拍下的照片

接下来,我们将重点介绍一种八位的LED数码管模块的结构和驱动方式。

八位数码管显示模块

一个八位的数码管总共包含64个LED,由于无法用64个I/O引脚直接控制,因此需要一个专门的驱动芯片。这个模块采用的是MAX7219芯片,它是一种高度集成的串行输入/输出共阴极显示驱动器。MAX7219能够连接微处理器与8位数字的7段数字LED显示,也可以用于连接条形图显示器或64个独立的LED。该芯片内部包含一个B型BCD编码器、多路扫描回路、段字驱动器,以及一个8×8的静态RAM,用于存储每个数据。只需3个I/O口就能驱动8位数码管,极大地提高了效率。整个模块的电路图如下:

主要参数:

工作电压:DC 5V规格尺寸:82×15mm引脚定义:

VCC:连接电源正极GND:连接电源负极DIN:串行数据输入端口CS:位选端CLK:时钟序列输入端下面,我们将通过Arduino UNO来驱动8位数码管模块。

硬件设备:

Arduino UNO控制器 × 18位数码管模块 × 1电源 × 1杜邦线 × 若干接线图:

将驱动模块的DIN、CS、CLK分别连接到Arduino的12、11、10数字引脚上,并连接电源和接地线。

程序:

在编写程序之前,我们需要了解一位数码管对应显示各个数字字符的段码。可以通过编写一个小程序来查询这些段码。例如,数字“2”的正码为5B,反码为A4,分别对应共阳和共阴数码管。

数字“2”的段码查询