数码管是一种常用于嵌入式开发中的显示设备,能够显示数字或特定字符。它以多个 LED 段组成的形式显示信息,广泛应用于电子设备的数字显示,如电子钟、温度计、计数器等。
数码管通常由 7 段(七段显示器) 或 8 段(包括小数点) 的 LED 组成,每个段对应一个 LED。当相应段被点亮时,会形成数字0-9的形状。
共阴与共阳
数码管的驱动方式主要有两种:共阳极和共阴极。
- 共阳极:所有LED段的阳极(正极)连接在一起,通过控制各个LED段的阴极(负极)来控制其亮灭。
- 共阴极:所有LED段的阴极(负极)连接在一起,通过控制各个LED段的阳极(正极)来控制其亮灭。
举例:
对于一个共阴数码管,要点亮某一段,比如“a段”,需要将“a段”的阳极引脚置高(电压为正),而阴极已经连接到地,所以电流会通过LED流向阴极,从而点亮LED。
对于一个共阳数码管,要点亮某一段,比如“a段”,需要将“a段”的阴极引脚置低(接地),而阳极已经连接到正电压(
+5V
),这样电流就会从阳极流向阴极,通过LED,从而点亮LED。
四位数码管原理图
74HC595位移寄存器
为了解决数码管端口复用的问题引入了 74HC595 位移寄存器
74HC595 是一个 8 位移位寄存器,具备 串行数据输入(逐位输入)和 并行数据输出(一次输出 8 位)的功能。它可以通过控制输入的时钟脉冲将串行输入的数据位依次移入寄存器中,然后一次性输出 8 位数据。
也是一个将二进制数据转换为高低电平的一个工具。
引脚图
74HC595 引脚:
- LATCH_CLOCK: 锁存时钟
- SHIFT_CLOCK: 移位时钟
- A: 数据输入信号管脚
- QA~QH: 将二进制数据信号转化为高低电平输出给数码管
- SQH: 串行数据输出管脚
管脚功能定义
真值表(“↑”表示上升沿;“↓”表示下降沿)
真值表解释:
- X:表示该引脚的状态无关,处于任意状态(高电平或低电平都无影响)。
- ↑:表示上升沿,即时钟从低电平变为高电平的瞬间。
- SER:串行数据输入
- SRCLK:移位寄存器时钟
- SRCLR:移位寄存器清零
- RCLK:存储寄存器时钟信号
- OE:输出使能信号
根据表中的不同情况,移位寄存器的行为如下:
- X X X X H:当
OE
为高电平时,QA 到 QH 输出被禁用(输出处于高阻态)。 - X X X X L:当
OE
为低电平时,QA 到 QH 输出被启用,输出寄存器的数据可以通过并行输出引脚输出。 - X X L X X:当
SRCLR
为低电平时,移位寄存器的数据被清零,所有数据位变为 0。 - L ↑ H X X:当
SER
为低电平且SRCLK
时钟上升沿到来时,移位寄存器的第一级存储数据变为 0,其它级别的数据顺序右移。 - H ↑ H X X:当
SER
为高电平且SRCLK
时钟上升沿到来时,移位寄存器的第一级存储数据变为 1,其它级别的数据顺序右移。 - X X X ↑ X:当
RCLK
时钟上升沿到来时,移位寄存器中的数据存储到输出寄存器,并更新输出。
工作原理
74HC595 原理图
数据输入与移位过程
- A(数据输入):通过该引脚,74HC595 可以接收一个串行数据流。
- SHIFT_CLOCK(移位时钟):每个时钟上升沿时,串行数据通过 A 进入移位寄存器,寄存器中已有的数据则向高位位移。
- LATCH_CLOCK(存储时钟/锁存时钟):该信号用于控制何时将移位寄存器中的内容输出到并行引脚
QA
到QH
。通常移位完成后,上升沿时触发锁存操作,将寄存器中的数据输出到 Qx 引脚(Qx 泛指 QA~QH 中任意一个)。
清除与输出控制
- RESET(复位引脚):当该引脚为低电平时,移位寄存器中的所有数据将被清零。
- OE(输出使能):该引脚为低电平时,输出引脚
QA
到QH
才有效;为高电平时,输出引脚为高阻态(等效于禁用输出)。
其他
- SQH(串行数据输出端):用于级联多个 74HC595 芯片,使得可以串联多个寄存器扩展更多的 IO 端口。第一个寄存器中的数据将通过这个引脚输出串行输入到下一个 74HC595 的串行数据输入端。
串联多个 74HC595
如果要控制超过 8 个输出,可以将多个 74HC595 级联。级联时,第一个 74HC595 的 SQH
(串行输出引脚)连接到下一个 74HC595 的 A
(数据输入引脚),以此类推。这样可以通过同一个数据和时钟输入同时控制多个 74HC595,实现扩展更多的并行输出。
当 U1 八个被填满后,在传入数据就会通过 SQH 引脚被挤到 U2 中的 QA 然后依次向高位位移。
STC8H
以 74HC595 为例
原理图
实现
八个数码管分别亮7、7、、7、7、7、7、7
1 | //main.c |