介绍
74HC595 是一款价格便宜的八位移位锁存器,通过三个引脚(DS、STCP、SHCP),就可以控制几乎无限量地输出。
DS是串行输入端口,每当时钟输入(SHCP)上升沿来临时,DS引脚当前电平值在移位寄存器中会移一位,连续进行8次同样的动作,就可以完成全部(Q0至Q7)移位。最后当STCP(Latch)上升沿到来时,移位寄存器的值将会被锁定在存储器里,并从Q0至Q7引脚输出。ESP32 的数字输出引脚时有限的,如果需要更多的输出的话,期中的一种方法就是通过74HC 595扩展更多的输出引脚。已达到目的。以下就通过两个列子来介绍这一个芯片的使用方法。
硬件
- ESP32开发板
- 2个74HC595
- 一块面包板
电路图
这是ESP32 驱动一个74HC595的电路图,引脚连接
[GPIO15->DS(14)]
[GPIO4->SHCP(12)]
[GPIO4->STCP(11)]
[GND->MR(10)]
[VCC->OE(13)]
代码设计
Arduino IDE包含了一个shiftout()功能,可以很方便的控制74HC595移位寄存器,对于ESP32 同样适用的。我们为了实现流水灯的效果。首先我们需要定义一个数组来存放数据,这些数据可以是16进制 、二进制、十进制。
1 | unsigned char sequence[COL_COUNT] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000}; |
然后,再使用一个for循环中的shiftout()函数把数据送到锁存器中。
1 | for (int col = 0; col < COL_COUNT; col++) |
以下是完整的代码:
1 | /******************************************************* |
ESP32 驱动两块74HC595
通过74HC595移位寄存器的级联输出端(Daisy chain),同样使用3个数据引脚来连接多个的74HC595以取得更多的输出。由于一块74HC595 可以一个字节,所以两块就可以支持2个字节。当然三块的话就是3个字节了。硬件连接方面也是很简单的,就是在上面的基础上修改就可以了
电路图2
- 74HC595(1) Q7S(9) -> 74HC595(2) DS(14)
- 74HC595(1) STCP(12) -> 74HC595(2) STCP(12)
- 74HC595(1) SHCP(11) -> 74HC595(2) SHCP(11)
代码设计
由于shiftOut()只能支持8位移,如欲取得16位移(两颗74HC595移位寄存器)的输出,那就必须分两次shiftOut()运行。
以下是完整的代码 :
1 | /******************************************************* |