首页 » 互联网 » 74HC595 芯片事理和 Arduino 运用实例_数据_引脚

74HC595 芯片事理和 Arduino 运用实例_数据_引脚

神尊大人 2024-09-20 05:19:07 0

扫一扫用手机浏览

文章目录 [+]

74HC595 大略说来便是具有8位移位寄存器和一个存储器,以及三态输出功能。
这里我们用它来掌握8个LED小灯。
我们为什么要用74HC595来掌握小灯呢?一定会有很多朋友会问这个问题,我想问的是我们假如纯挚的用Arduino掌握8个小灯的话要占用多少个I/O呢?答案是8个,但是我们的Arduino 168有几个I/O口呢?加上仿照接口也就20个吧,这8个小灯占用了太多的资源了,我们用74HC595的目的便是减少I/O口的利用数量。
用74HC595往后我们可以用3个数字I/O口掌握8个LED小灯岂不美哉。

事理解释先转一段百度百科上74HC595芯片的简介。

74HC595 芯片事理和 Arduino 运用实例_数据_引脚 74HC595 芯片事理和 Arduino 运用实例_数据_引脚 互联网

74HC595具有8位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器有相互独立的时钟。
数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

74HC595 芯片事理和 Arduino 运用实例_数据_引脚 74HC595 芯片事理和 Arduino 运用实例_数据_引脚 互联网
(图片来自网络侵删)

看不懂吧,没紧要,我们先看一下芯片的引脚图:

分别阐明一下:

GND接地,VCC接5V电源,这个就不用说了。
Q0-Q7这8根引脚是芯片的输出引脚,直接跟数码管的8段引脚相连。
对应关系要看你怎么接线和写代码时传送数据的顺序了。
DS是串行输入引脚,所谓串行便是使数据在一根旗子暗记线上按顺序一位一位地传输,就像一串糖葫芦。
这个引脚我们接到树莓派任意一个GPIO口上(输出模式)。
SHCP是移位寄存器的时钟引脚。
听上去有点繁芜,实在很大略。
74HC595内部有一个8位的移位寄存器用来保存从DS引脚输入的数据。
那么74HC595怎么知道什么时候该从DS引脚上取数据了呢?正是通过SHCP这个时钟引脚来实现的。
只有在SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据(高/低电平)并把取到的这一位数据保存到移位寄存器里。
同样的,这个引脚也接到树莓派任意一个GPIO口上。
当我们向芯片发送数据时,要先在DS引脚上准备好要传送的数据,然后制造一次SHCP引脚的上升沿(先拉低电平再拉高电平),74HC595会在这个上升沿将DS引脚上的数据存入移位寄存器D0,同时D0原来的数据会顺移到D1,D1的数据位移到D2。


D6的数据位移到D7。
而原来D7的数据已经没有地方储存了,这一位数据会被输出到引脚Q7S上。
这个引脚的浸染我们下一篇再说,本文暂时用不到这个引脚。
(把稳这里说的不是输出引脚Q0-Q7,而是指内部的8位移位寄存器里每一个“小房间”,芯片手册上并没有给这些小房间编号,这里为相识释方便进行了编号)STCP是芯片内部其余一个8位锁存寄存器的时钟引脚。
当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)。
74HC595会在这个上升沿将移位寄存器里的8位数据复制到锁存器中(锁存器里原来的数据将被更换)。
把稳,到这里为止,这8位数据还只是被保存在锁存器里,并没有输出到数码管上。
这个引脚同样连接到树莓派任意一个GPIO口上即可。
OE是输出使能引脚,在其他芯片里也很常见。
浸染是掌握锁存器里的数据是否终极输出到Q0-Q7输出引脚上。
低电平时输出,高电平时不输出(既不是高电平,也不是低电平而是高阻态,不通电)。
本例为了方便直接接在GND上使其一贯保持低电平输出数据。
MR是用来重置内部寄存器的引脚。
低电平时重置内部寄存器(MemoryReset?)。
本例为了方便直接连接在Vcc上一贯保持高电平。
Q7S引脚,串行输出引脚,本文不该用,下一篇再阐明它的浸染。
关于锁存器。
顾名思义便是将数据保存并锁定。
一旦进入了锁存器,除非断电或重置数据(MR口设置为低电平),锁存器的数据不会再改变。
好处是,当你须要更新数据时,将数据串行输入移位寄存器的过程中,锁存器里的数据不会有任何影响,也就不会有闪烁了。
一贯到移位寄存器8位数据准备完毕,再制造一次STCP的上升沿一次性更新锁存器的数据,更新输出。

关于锁存器。
顾名思义便是将数据保存并锁定。
一旦进入了锁存器,除非断电或重置数据(MR口设置为低电平),锁存器的数据不会再改变。
好处是,当你须要更新数据时,将数据串行输入移位寄存器的过程中,锁存器里的数据不会有任何影响,也就不会有闪烁了。
一贯到移位寄存器8位数据准备完毕,再制造一次STCP的上升沿一次性更新锁存器的数据,更新输出。
其余,我做了一个动画帮助你理解全体过程。

下面是我们要准备的元器件。
74HC595 直插芯片1、赤色M5 直插LED4、绿色M5 直插LED4、220Ω直插电阻8、面包板1、面包板跳线1 扎。

准备好元件我们就按下面的事理图连接电路。

此电路图看似繁芜,我们仔细剖析往后再结合参考实物就会创造很大略。
下面是参考源程序:

int latchPin = 5;int clockPin = 4;int dataPin = 2; //这里定义了那三个脚void setup (){pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT); //让三个脚都是输出状态}void loop(){for(int a=0; a<256; a++) //这个循环的意思是让a这个变量+1一贯加到到256,每次循环都进行下面的活动{digitalWrite(latchPin,LOW); //将ST_CP口上面加低电平让芯片准备好吸收数据shiftOut(dataPin,clockPin,MSBFIRST,a);//这个便是用MSBFIRST参数让0-7个针脚以高电平输出(LSBFIRST 低电平)是dataPin的参数,//clockPin的参数是变量a,前面我们说了这个变量会一次从1+1+到256,是个十进制数,// 输入到芯片后会产生8个二进制数,达到开关的浸染digitalWrite(latchPin,HIGH); //将ST_CP这个针脚规复到高电平delay(1000); //停息1秒钟让你看到效果}}

下载完程序大家就可以看到8 个小灯闪烁的美妙场景了。

相关文章

基于NS1021/1021E的车载USB技能_装备_暗记

图1给出了车载视频与数据传输的范例运用,中控主机连接前/后视摄像头、激光雷达、DSM、行车记录仪、USB Hub扩展等设备。个中主...

互联网 2025-01-17 阅读0 评论0