概述
- 类型:具有三态输出寄存器的 8 位移位寄存器。
- 功能:包含对 8 位 D 类存储寄存器进行馈送的 8 位串行输入 / 并行输出移位寄存器,存储寄存器具有并行三态输出,移位寄存器和存储寄存器分别有单独的时钟,可实现数据的串行输入和并行输出,方便用于扩展 I/O 口等应用。
- 可以实现6个引脚控制一个8位的数码管。比74HC573还要节省引脚,573需要8+2个引脚。
主要特性
- 宽工作电压范围:2V 至 6V。
- 高电流驱动能力:三态输出最多可驱动 15 个低功耗肖特基晶体管 - 晶体管逻辑器件(LSTTL)负载。
- 低功耗:最大供应电流为 80µA。
- 高速:典型传播延迟时间 tpd 为 13ns。
- 其他:移位寄存器具有直接清零功能,输入类型为标准 CMOS,输出类型为三态,时钟频率最大可达 24MHz,电压为 5V 时,输出驱动为 ±6mA,低输入电流为 1µA 最大值。
引脚说明
引脚名称 | 引脚编号 | 功能描述 |
---|---|---|
VCC | 16 | 电源正极(+2V~+6V) |
GND | 8 | 接地 |
SER | 14 | 串行数据输入(Shift Register Data Input) |
SRCLK | 11 | 移位寄存器时钟输入(上升沿触发数据移位) |
RCLK | 12 | 存储寄存器时钟输入(上升沿将移位寄存器数据锁存到存储寄存器) |
OE | 13 | 输出使能控制(低电平有效,高电平时输出为高阻态) |
SRCLR | 10 | 移位寄存器清零(低电平有效,正常工作时接高电平) |
QA-QH | 1-7,15 | 并行数据输出(QA=1 脚,QB=2 脚,...,QH=15 脚) |
QH' | 9 | 串行数据输出(用于级联多个 595 芯片) |
下面是 SN74HC595 芯片的引脚图及功能说明:
两位数码管引脚图
硬件连接
SN74HC595 与 Arduino 连接
SN74HC595 引脚 | Arduino 引脚 | 功能 |
---|---|---|
SER (14) | D10 | 串行数据输入 |
SRCLK (11) | D13 (SCK) | 移位寄存器时钟 |
RCLK (12) | D11 | 存储寄存器时钟(锁存) |
OE (13) | GND | 输出使能(低电平有效) |
SRCLR (10) | 5V | 移位寄存器清零(高电平有效) |
VCC (16) | 5V | 电源 |
GND (8) | GND | 地 |
SN74HC595 与数码管连接
SN74HC595 的 8 个输出引脚(QH~QB)分别连接到数码管的 7 段(a~g)。
- 共阴极数码管:SN74HC595 输出低电平点亮对应段。
数码管编码表
根据数码管类型(共阴 / 共阳),生成显示 0~9 的段码表。
示例(共阴极数码管):
plaintext
rduino 代码实现
以下是控制单个数码管显示 0~9 循环的代码:
- 硬件扩展:使用第二个 SN74HC595 控制位选,或用三极管驱动。
- 软件实现:采用动态扫描,依次点亮每个数码管,利用人眼视觉暂留效应实现同时显示。
arduino
const int LATCH_PIN = 11; // RCLK 12
const int CLOCK_PIN = 13; // SRCLK 11
const int DATA_PIN = 10; // SER 14
const int LATCH_wei_PIN = 3; // RCLK 12
const int CLOCK_wei_PIN = 4; // SRCLK 11
const int DATA_wei_PIN = 2; // SER 14
// 共阴极数码管段码表(0~9)
byte digitSegments[] = {
0x3F, // 0 0011 1111
0x06, // 1 0000 0110
0x5B, // 2 0101 1011
0x4F, // 3 0100 1111
0x66, // 4 0110 0110
0x6D, // 5 0110 1101
0x7D, // 6 0111 1101
0x07, // 7 0000 0111
0x7F, // 8 0111 1111
0x6F // 9 0110 1111
};
// 共阴极数码管位码表(0~8)
byte DulSegments[] = {
0xFF, // 0 1111 1111
0xFE, // 1 1111 1110
0xFD, // 2 1111 1101
0xFB, // 3 1111 1011
0xF7, // 4 1111 0111
0xEF, // 5 1110 1111
0xDF, // 6 1101 1111
0xBF, // 7 1011 1111
0x7F, // 8 0111 1111
};
void setup() {
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_wei_PIN, OUTPUT);
pinMode(CLOCK_wei_PIN, OUTPUT);
pinMode(DATA_wei_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
for (int j = 1; j < 5; j++) {
display_wei_Number(j);
Serial.print("数码管显示的位数是:");
Serial.println(j);
for (int i = 0; i < 10; i++) {
displayNumber(i);
Serial.print("数码管显示的数字是:");
Serial.println(i);
delay(1000); // 每秒切换一次数字
}
delay(1000); // 每秒切换一次数字
}
}
void displayNumber(int number) {
digitalWrite(LATCH_PIN, LOW); // 拉低锁存引脚,准备传输数据
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, digitSegments[number]); // 发送段码
digitalWrite(LATCH_PIN, HIGH); // 拉高锁存引脚,更新显示
}
void display_wei_Number(int number1) {
digitalWrite(LATCH_wei_PIN, LOW); // 拉低锁存引脚,准备传输数据
shiftOut(DATA_wei_PIN, CLOCK_wei_PIN, LSBFIRST, DulSegments[number1]); // 发送段码
digitalWrite(LATCH_wei_PIN, HIGH); // 拉高锁存引脚,更新显示
}
演示视频1
注意事项
- 电源稳定性:SN74HC595 工作电压为 2V~6V,建议使用 5V 电源,确保数码管亮度稳定。
- 段电流限制:每个输出引脚需串联 220Ω~470Ω 限流电阻,防止数码管过亮或损坏。
- 动态扫描频率:多位数码管扫描时,频率需高于 50Hz 以避免闪烁。
- 共阴 / 共阳选择:根据数码管类型调整段码表(共阳极需取反)。
通过以上方法,你可以利用 SN74HC595 芯片高效驱动数码管显示数字。