MicroPython-On-ESP8266——8x8LED点阵模块(2)使用74HC595驱动
1. 使用74HC595驱动的原理
1.1. 基础回顾
上篇我们学习了8x8LED点阵屏的电路基础知识和驱动的原理,见
里面也提到了,咱们nodemcu开发板的GPIO引脚不够,只能借助74HC595、MAX7219此类IC来完成点阵屏的驱动。这里咱们先从74HC595开始来实验。
595芯片的基础原理前面文章也有做过介绍,这里还是再笼统回顾一下。
1.2. 74HC595如何使用
595输入端只需要3个GPIO,却可以输出8个GPIO状态,其实咱们就理解为把GPIO管脚扩充了。


注:
1、这个动图不是我做的,也不清楚来源,但确实很形象。如有侵权请私信通知删除,感谢原作者!
2、图上有个错误的地方,大家要留意。DS串行口推入数据的次序是Q0 -> Q1 -> Q2 -> Q3 -> Q4 -> Q5 -> Q6 -> Q7 -> Q7S(溢出位) 。如果只送了8位过去,第一个移入的位状态最终会移到Q7,最后一个移入的状态位最终停留在Q0。也就是先送高位。上图锁存器对应的引脚顺序要反向过来才对。
实际使用时,时钟引脚每跳变(先变成高电平再变回低电平)一次,就把输入数据引脚DS的状态送入位移寄存器,想送入多少个随自己定。送完位移数据后,让锁存引脚跳变一下,把位移寄存器的值整体推入锁存器,从而让输出GPIO能保持住想要的状态。
仔细品味一下上面的动图,一定要理解串入并出是怎么实现的。^_^
1.3. 多个74HC595级联使用
既然一个595能有8个GPIO输出,那咱们要控制8x8LED点阵的16个引脚,就只需要两片595就行了。595还能无限级联实现串行,本片先入先出的状态值会经过Q0位移到Q7再溢出到Q7S管脚,把Q7S接入到下一片595的DS输入数据引脚作为输入端,就能实现级联了。

不管级联了多少片,把每片的时钟引脚和锁存引脚都短接在一起,这样咱们在开发板上指定两个GPIO引脚统一进行位移跳变和锁存跳变。
也就是说按照上图来说我想要一次性控制4片75HC595的输出状态,相对于在最左侧给DS(SER)引脚要输入4*8=32个状态位,每一个状态位输入完中间进行一下位移引脚跳变,所有状态位向右移动一次。
- 第一个状态位,经历过32次位移后,电平状态移动到了第4片74HC595的QH(Q7)位移寄存器
- 第二个状态位,经历过32-1次位移后,电平状态移动到了第4片74HC595的QG(Q6)位移寄存器
- 依次。。。
- 最后一个(第32个)状态位,位移1次,输出到了第1片74HC595的QA(Q0)位移寄存器
大家排队往前走,32个小伙伴都就位后,锁存引脚跳变一下。大家集体上位进入对应的锁存寄存器,
2. 74HC595实操接线
基本电路图:

电路图比较简洁,因为把led的16个管脚用标签的形式来对应了,没有直接进行连线,要不然会交叉的很厉害,没法看。
锁存GPIO位与点阵管脚连接顺序表:
| 锁存IC | 管脚 | 控制对象 | 点阵屏管脚 |
|---|---|---|---|
| U1 |

本文介绍了使用74HC595芯片驱动8x8LED点阵屏的方法,包括原理讲解、电路连接及MicroPython代码实现。通过级联两片74HC595芯片,实现对16个GPIO的控制,从而控制8x8LED点阵屏显示图案。
使用74HC595驱动&spm=1001.2101.3001.5002&articleId=127931848&d=1&t=3&u=509069d956194831bc81ad35499b04d7)
381

被折叠的 条评论
为什么被折叠?



