小小云提示:教程作者caterpillar是来自台湾的programmer(kinda),所以在一些专有名词的使用上会和我们这边使用的不太一样啦,不过作者也有标注出英文名称,大家自行转换哟(⁎⁍̴̛ᴗ⁍̴̛⁎)
在〈mBlock & Arduino(7)七段显示器之 HELLO!〉与〈mBlock & Arduino(17)四位数七段显示器〉都谈过七段显示器,直接使用 Arduino 来控制七段显示器的问题在于,它们会占用到 Arduino 上许多输出脚位,如果想减少 Arduino 上的脚位占用,那么可以使用 4511 或 74HC595 等驱动 IC,或者是选用市面上现成的七段显示器模组。
74HC595 工作原理
使用 74HC595,你可以使用三个脚位来控制八个输出,在正式看到 74HC595 脚位之前,可以先这么想,如果你想要最后八个输出为 10101101,那么一开始令 ST_CP 脚位为低电位,然后提供脚位 DS 高电位,如下图:
接着令 SH_CP 为高电位,将资料推入位移暂存器:
接着令 SH_CP 为低电位,DS 提供 0:
接着再令 SH_CP 为高电位,将资料推入位移暂存器,先前的 1 因此也被推进下一个暂存位置:
重复以上动作,继续将 101101 推入位移暂存器,成为以下状态:
此时令 ST_CP 为高电位,下方储存暂存器会复制位移暂存器的值:
这时储存暂存器的值就可以作为 Q0 到 Q7 脚位输出之用,接下来若要继续提供新的资料给位移暂存器,要令 ST_CP 为低电位,假设接下来又推进一个 1:
那么原先最左边的 1 被推至 Q7′,一个 74HC595 可以提供八个输出,如果想要提供 16 或更多输出,可以串接 74HC595,从上可知,串接方式就是将上一颗 74HC595 的 Q7′ 连接至下一颗 74HC595 的 DS。
连接七段显示器
实际的 74HC595 有 16 个脚位,除了上面谈到的 DS、SHCP、STCP、Q0 到 Q7 以及 Q7′ 之外,还有 VCC、GND、OE 与 MR 脚位:
OE 是指 Output Enable,设置为低电位时表示允许输出,因此在连接七段显示器时,可以直接与 GND 相连;MR 是指 Master Reset,设定为低电位时,表示清除暂存器所有资料。
之前谈到的 DS 表示 Serial data input;SHCP 表示 SHift register clock pin,又称为 Clock Pin;STCP 表示 STorage register clock pin,又称为 Latch Pin。
知道这些脚位的作用,接下来要连接七段显示器,就不是难事了,只要小心不要接错就好了,例如连接一个七段显示器:
实际上 Q0 到 Q7 脚位要怎么接,要看你的资料序列如何安排,上面这个电路图可以搭配以下的程式来依序显示 H、E、L、L、O:
注意!虽然我们没有用到七段显示器的小数点,不过,还是每次将八个数字推入暂存器,只是最后一个推入的数字是 0,以下是实际的效果:
连接多个七段显示器
如果想要连接多个七段显示器,方式之一是串接多个 74HC595,每一次都准备好足够数量的位数,例如两个七段显示器可以如下连接线路:
如此,你可以维持三个输入脚位,但可控制十六个输出;另一个方式是 74HC595 结合多合一七段显示器,例如:
这样的话,只需要一个 74HC595,不过为了控制数字的轮流显示,需要多一个脚位,像上头四个数字,就需要再用到四个脚位,不过还是比不使用 74HC595 少了五个脚位了,下面这个程式可用来控制上头的七段显示器:
同样要记得,虽然没有使用到七段显示器的小数点,我们还是一样一次推入八个数字:
底下是实际的执行效果:
当然,速度不够快,来写个在 Arduino IDE 中类似的程式:
底下是实际的执行效果:
感谢CodeData用户:caterpillar的贡献 著作权归作者所有
整理:宁波家电物联网云平台,中科极动云