当前位置:文档之家› Arduino 学习笔记 _74HC595

Arduino 学习笔记 _74HC595


48
20. 74HC595 实验
实验现象: 利用 74HC595 芯片实现 LED 流水灯效果。
原理与说明:
有时候限于 Arduino 本身的引脚数,无法直接控 制较多的电路。这里介绍一种扩展数字输出的芯片
——74HC595,通过此芯片,可以使用很少的引脚接
收串行信号(也就是 1 个引脚),输出的部分可以变
使用 shiftOut()这个函数的主要原因是我们需要自行输出频率变化。以 74HC595 为例,需要从 Arduino 的 clocckPin(本例中使用 Pin12)输出,这样 74HC595 才能知道 dataPin(本例中使用 Pin11)的正确读取方式。这些说明在 芯片的说明手册中都有提到。这里节录部分来进行说明。
函数 shiftOut(dataPin, clockPin, LSBFIRST, j)的目的在于 1 个执行时间内输出 第 4 个参数 j 的某一个位。1 个字符有 8 个位,若希望从高位(左边)开始,
47
第三个参数设定为 MSBFIRST;若从低位(右边)开始,则设定为 LSBFIRST。前 两个参数只是引脚定义。
74HC595 数据信号时序图 要想更加详细地了解工作原理,可以查阅 SPI(Serial Peripheral Interface)
的工作原理。而点亮的 LED 的位置需要将十进制数字转换为二进制才可以了解。
例如:
153
10011001
这时,应该是 Q0、Q3、Q4 和 Q7 这 4 颗 LED 发光。
功能的实现中使用了一个 Arduino 中的比较特殊的函数 shiftOut(dataPin, clockPin, LSBFIRST, j)。后面会给予介绍。
46
程序代码比较简单,如下:
int latchPin=8; //ST_CP of 74HC595 int clockPin=12; //SH_CP of 74HC595 int dataPin=11; //DS of 74HC595
进一步,可以利用 74HC595 扩展很多很多的数字输出,靠的就是将多颗 IC
串联在一起,只需要将 SH_CP 和 ST_CP 接在一起,前一颗的 Q7’接到后一颗的
DS 上即可。
附加: A. 若将上面程序中的 loop()的 for(int data=0; data<255; data++); 修改为 for(int data=0; data<255; data*=2); 即可实现 LED 的从低位向高位的单向循环显示。 B. 若再将 shiftOut(dataPin,clockPin,LSBFIRST,data); 中的参数 LSBFIRST 修改为 MSBFIRST,则会变为从高位向低位的循环显示。
74HC595 中的 ST_CP 与 Arduino 的 Pin8 连接,同时也通过 10k 的电阻接地。 OE 接地,MR 接 5V,(注意不要接错!)LED 均分别接上 220Ω的限流电阻。DS 接 Pin11,SH_CP 接 Pin12 。
在这个例子中,实现了利用二进制显示 LED 灯的变化,8 颗 LED 共可以显 示 256 种变化。使用循环显示,每个状态停留 1 秒。
void setup() {
pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); }
void loop() {
for(int data=0; data<255; data++) {
digitalWrite(latchPin,LOW); //低电位表示启动 shiftOut(dataPin,clockPin,LSBFIRST,data); digitalWrite(latchPin,HIGH); //高电位表示停止 delay(1000); } }
为并列输出(扩展为 8 个引脚)或依旧为串行输出
给另外的电路,可以实现多颗 595 芯片组合扩展。
74HC595 的引脚如右图所示,说明如下表。
引脚编 号
名称
功能说明
1~7,15
Q0~Q7
并行输出(Parallel Output)
8
GND
接地
9
Q7’
串行输出(Serial Output)
10
MR
Master Reset, 接 5V
11
SH_CP
Shift Register Clock Input
12
ST_CP
Storage Register Clock Input
13
OE
Output Enable (active LOW)
14
DS
Serial Data Input16ຫໍສະໝຸດ Vcc5V 工作电压
若使用 Arduino 与 74HC595 沟通,只需要 3 个引脚,实现 8 个数字输出引 脚的扩展。下面的例子中给出了一个简单的控制 8 颗 LED 的电路图(图中只给 出了引脚说明符)。使用 Arduino 的 8、11 和 12 脚。
相关主题