技术译码显示电路实验全指南
实验概述
实验目的

- 理解核心概念: 掌握译码器和显示驱动器的基本工作原理。
- 掌握基本技能: 学会使用数字逻辑芯片(如74系列)搭建简单的数字显示电路。
- 提升实践能力: 提高电路焊接、连接、调试及故障排查的能力。
- 探索高级应用: 了解如何将多个数码管组合成多位显示系统,并掌握动态扫描技术以节省I/O口资源。
核心概念解释
-
数码管:
- 是什么: 一种用于显示数字的电子显示设备,由7个条形的LED(发光二极管)组成一个“日”字形,外加一个小数点,共8段,因此常被称为“七段数码管”。
- 类型:
- 共阳极: 所有LED的阳极连接在一起,作为公共端,要点亮某一段,需要给其对应的阴极施加一个低电平。
- 共阴极: 所有LED的阴极连接在一起,作为公共端,要点亮某一段,需要给其对应的阳极施加一个高电平。
- 本实验选择: 共阴极数码管更为常见,驱动逻辑更符合“1点亮”的直观感受。
-
译码器:
- 是什么: 一种组合逻辑电路,其功能是将输入的二进制代码“翻译”成特定的输出信号。
- 为什么需要: 微控制器(如Arduino)或计数器(如4060)输出的是4位二进制码(如
0000,0001, ... ,1001),而数码管需要的是8个独立的段选信号,译码器就充当了“翻译官”的角色。 - 核心芯片: 74LS48 或 CD4511,这两个都是BCD码(8421码)七段译码/驱动器。
- 输入: 4位BCD码(代表0-9)。
- 输出: 7个段选信号(a-g),可以直接驱动共阴极数码管。
- 额外功能: 都有灭灯输入和测试端,功能强大。
实验所需器材
- 核心芯片:
- 74LS48 或 CD4511 BCD-七段译码器 (1片)
- 共阴极七段数码管 (1个)
- 输入控制:
- 4个拨码开关 或 4个带10kΩ上拉电阻的轻触开关
- 或一块Arduino/单片机开发板
- 电源与基础元件:
- 面包板 (1块)
- 杜邦线若干
- 5V直流电源 (或USB供电)
- 电阻 (约220Ω - 330Ω, 7个,用于限流,保护数码管LED)
- 进阶实验 (可选):
- 74LS192 十进制同步加/减计数器 (1片)
- 555定时器 (1片) 或 NE555
- 电容、电阻 (用于构成时钟电路)
- 更多数码管 (用于多位数显示)
基础静态显示实验
这个实验的目标是:通过拨动开关输入0-9的数字,让数码管稳定地显示对应的数字。

电路原理图
graph TD
subgraph "输入"
D0[拨码开关 D0] --> A0[74LS48 A]
D1[拨码开关 D1] --> A1[74LS48 B]
D2[拨码开关 D2] --> A2[74LS48 C]
D3[拨码开关 D3] --> A3[74LS48 D]
end
subgraph "核心芯片"
U1[74LS48] -- 段选信号 a-g --> {a, b, c, d, e, f, g}
end
subgraph "显示"
R1[220Ω] -- a --> LED_a[数码管 a段]
R2[220Ω] -- b --> LED_b[数码管 b段]
R3[220Ω] -- c --> LED_c[数码管 c段]
R4[220Ω] -- d --> LED_d[数码管 d段]
R5[220Ω] -- e --> LED_e[数码管 e段]
R6[220Ω] -- f --> LED_f[数码管 f段]
R7[220Ω] -- g --> LED_g[数码管 g段]
end
subgraph "电源与公共端"
VCC[+5V] --> U1[VCC]
GND[GND] --> U1[GND]
GND --> 数码管[COM公共端]
end
U1 -- LT(Lamp Test) --> VCC
U1 -- RBI(Ripple Blanking) --> GND
U1 -- BI/RBO(Blanking Input/Ripple Blanking Output) --> GND
电路连接步骤
- 放置芯片: 将74LS48和共阴极数码管插在面包板的两侧,确保它们不接触。
- 连接电源:
- 将74LS48的
VCC(16脚) 接到面包板的正极电源行。 - 将74LS48的
GND(8脚) 和数码管的COM公共端接到面包板的负极电源行。
- 将74LS48的
- 连接输入:
- 将4个拨码开关的一端接到正极。
- 开关的另一端分别连接到74LS48的输入引脚
A(7脚),B(1脚),C(2脚),D(6脚)。 - 重要: 74LS48的输入端悬空会表现为高电平,所以当开关断开时,输入为1;开关闭合时,输入为0,这符合BCD码的逻辑。
- 连接输出:
- 74LS48的输出引脚
a(13脚) 到g(9脚) 分别通过一个220Ω的电阻连接到数码管对应的a到g引脚。 - 查阅数据手册确认数码管引脚定义,不同厂家可能不同。
- 74LS48的输出引脚
- 使能控制引脚:
LT(Lamp Test, 3脚): 接高电平,正常工作时接高电平,用于测试所有段是否点亮。RBI(Ripple Blanking Input, 4脚): 接低电平,正常工作时接低电平。BI/RBO(Blanking Input/Ripple Blanking Output, 5脚): 接低电平,正常工作时接低电平。
实验操作与现象
- 接通电源。
- 拨动4个拨码开关,输入不同的BCD码。
0000(所有开关断开) -> 显示 00001-> 显示 10010-> 显示 21001-> 显示 9
- 尝试输入非BCD码,如
1010(10),观察数码管显示是否为乱码或不亮(取决于芯片内部逻辑)。
故障排查
- 数码管不亮:
- 检查电源是否接通(VCC和GND)。
- 检查数码管的COM公共端是否正确接地(共阴极)。
- 检查BI/RBO引脚是否被误拉高。
- 显示乱码或错误:
- 检查输入引脚的连接是否正确。
- 检查输出引脚
a-g到数码管引脚的连接是否一一对应。 - 检查220Ω电阻是否都已接入。
- 部分段不亮:
检查对应段的电阻或连接线是否接触不良。
自动计数显示实验
这个实验的目标是:利用计数器芯片和时钟电路,让数码管自动从0计数到9,循环往复。
电路原理
在实验一的基础上,我们不再用手动开关输入,而是用一个计数器来自动产生BCD码,并用一个时钟电路来驱动计数器。
- 计数器: 74LS192 (同步十进制可逆计数器),我们将其接成加法计数模式。
- 时钟源: 555定时器构成一个多谐振荡器,产生稳定的脉冲信号,作为计数器的时钟输入。
电路连接
- 保留部分: 保留74LS48和数码管及其连接。
- 添加555时钟电路:
- 按照标准的555多谐振荡器电路连接,选择合适的R1, R2, C1值来获得合适的计数速度(例如1Hz)。
- 555的输出引脚(3脚)连接到74LS192的
CLK UP(5脚)。
- 添加74LS192计数器:
VCC(16脚) 接+5V,GND(8脚) 接GND。A, B, C, D(数据预置端) 全部接GND(从0开始计数)。CLK DOWN(4脚) 接高电平(不进行减法计数)。CLEAR(14脚) 接高电平(不清零)。A, B, C, D(数据输出端) 连接到74LS48的A, B, C, D输入端。
实验现象
接通电源后,你会看到数码管上的数字从0开始,以固定的速度(由555电路决定)增加到9,然后瞬间回到0,重新开始循环。

多位数动态扫描显示
这是在实际应用中最常见的技术,因为它极大地节省了微控制器的I/O口,显示一个4位数“1234”,如果静态驱动,需要4*8=32个I/O口;而动态扫描只需要8个段选口 + 4个位选口 = 12个I/O口。
核心原理
“视觉暂留效应”,快速地轮流点亮每一位数码管,并送出对应的数据,只要切换速度足够快(>50Hz),人眼就会感觉所有数码管是同时点亮的。
- 段选线: 连接所有数码管对应的a, b, c... 引脚,所有数码管的同名段是并联在一起的。
- 位选线: 每个数码管的COM公共端独立引出,用于控制当前点亮的是哪一位。
电路连接 (以2位为例)
- 段选部分:
- 将两个数码管的
a引脚并联,b引脚并联,...,g引脚并联。 - 将这7组并联的引脚通过7个220Ω电阻,连接到一个74LS48的输出端。
- 74LS48的输入端由Arduino控制。
- 将两个数码管的
- 位选部分:
- 将第一个数码管的COM端连接到一个NPN三极管(如8050)的集电极,三极管的发射极接地,基极通过一个1kΩ电阻连接到Arduino的一个数字引脚(如D2)。
- 将第二个数码管的COM端连接到另一个NPN三极管的集电极,基极通过1kΩ电阻连接到Arduino的另一个数字引脚(如D3)。
- 原理: 当Arduino给D2一个高电平时,第一个三极管导通,第一个数码管的公共端被拉到地(共阴极),第一个数码管可以被点亮,第二个数码管同理。
- 控制:
- Arduino的8个数字引脚连接到74LS48的4个输入端和3个使能端(或直接用8个口控制段选,省去译码器,更灵活)。
- 另外2个数字引脚连接到位选三极管的基极。
Arduino 伪代码示例
// 定义引脚
const int segmentPins[] = {2, 3, 4, 5}; // 连接到74LS48的 A, B, C, D
const int digitPins[] = {6, 7}; // 控制第一个和第二个数码管
// 要显示的数字
int number = 42; // 显示 "42"
void setup() {
// 设置所有引脚为输出
for (int i = 0; i < 4; i++) {
pinMode(segmentPins[i], OUTPUT);
}
for (int i = 0; i < 2; i++) {
pinMode(digitPins[i], OUTPUT);
}
digitalWrite(digitPins[0], HIGH); // 初始关闭所有位
digitalWrite(digitPins[1], HIGH);
}
void loop() {
// 分解数字
int tens = number / 10;
int ones = number % 10;
// 显示十位
displayNumber(tens);
digitalWrite(digitPins[0], LOW); // 打开第一个数码管
delay(5); // 延时,控制亮度
digitalWrite(digitPins[0], HIGH); // 关闭第一个数码管
// 显示个位
displayNumber(ones);
digitalWrite(digitPins[1], LOW); // 打开第二个数码管
delay(5);
digitalWrite(digitPins[1], HIGH); // 关闭第二个数码管
}
// 辅助函数:将数字0-9转换为BCD码并输出
void displayNumber(int num) {
// 这里需要根据你的连接方式,将num转换为4位BCD码
// 如果num=4,BCD码是0100
// 然后通过digitalWrite(segmentPins[0], HIGH)...来设置
// 这部分逻辑需要根据你的具体电路实现
// 简化版:直接使用Arduino的数字口控制,不使用74LS48
// byte segments = ...; // 定义0-9的段码表
// for(int i=0; i<4; i++){
// digitalWrite(segmentPins[i], (segments >> i) & 0x01);
// }
}
实验现象
两个数码管会交替显示“4”和“2”,由于切换速度很快,看起来就像是稳定地显示着“42”。
总结与思考
通过这三个由浅入深的实验,你已经全面掌握了技术译码显示电路的核心技术:
- 基础: 理解了译码器如何将二进制码转换为驱动信号。
- 应用: 学会了如何将计数器与显示电路结合,实现自动化。
- 进阶: 掌握了动态扫描技术,这是现代电子设备(如时钟、计算器)显示数字的基石。
进一步可以探索的方向:
- 使用驱动芯片: 学习使用MAX7219或TM1637等专用数码管驱动芯片,它们集成了译码、扫描、亮度控制等功能,使用极其方便。
- 驱动点阵屏: 将原理扩展到8x8点阵屏,可以实现更复杂的图形和文字显示。
- 与传感器结合: 将温度传感器(如DS18B20)的数值通过动态扫描电路显示出来,制作一个数字温度计。
