74HC595寄存器【物联网元器件】

一、开始之前你可能需要了解的概念

(一)什么是移位转换器?

        在嵌入式领域,移位转换器是一种用于将数据按位进行移动的电路或指令。移位转换器可以实现数据的左移、右移、循环移位等操作,常用于处理二进制数据。在嵌入式系统中,移位转换器通常用于位操作、数据压缩、加密算法等功能的实现。

移位和移位操作符:

        移位操作是指将一个二进制数在其位上进行左移或右移的操作。在计算机编程中,移位操作通常使用移位操作符来实现。常见的移位操作符包括:

左移操作符<<:通常用来将一个数的二进制表示向左移动指定的位数。

右移操作符 >>:将一个数的二进制表示向右移动指定的位数,左侧空出的位用原来的符号位填充(对于有符号数)或者用0填充(对于无符号数)。

        例如,对于一个8位二进制数 11011010,如果使用左移操作符 > 3,则结果为 00011011。移位操作符在嵌入式系统和低级编程中经常用于位操作和优化算法。

(二)什么是级联?

        级联通常指的是将多个设备或模块连接在一起,形成一个串联的系统或结构。这种连接方式可以用于实现功能的扩展、数据的传输、信号的处理等目的。级联通常用于连接多个设备或模块,使它们能够协同工作,实现更复杂的功能。例如,可以将多个传感器级联在一起,以收集更多的环境数据;也可以将多个处理器级联在一起,以提高系统的处理能力。级联在嵌入式领域中也常用于描述串行通信的方式,其中多个设备通过串行接口连接在一起,依次传输数据。级联串行通信可以简化系统设计,减少线路数量,提高数据传输效率。也可以简单理解为搭积木,但是具体使用时肯定不是简单的一加一。

(三)什么是寄存器?

        我们把主芯片当成工作台的,因为任何数据的加工和处理都要经过这里,这也是整个单片机中最繁忙的部分,当然,我们工作台大小也是有限的,当一些零件我们加工完之后,已经用不到了,就没必要在放在工作台上占用空间,这时我们当然不能把它丢掉,而是把它随手放在工作台旁边的抽屉(寄存器)上,这些临时的数据就会保存在这里,我们需要的时候再拿取也十分的便捷。总结来说就是寄存器是一种用于暂时存储数据的硬件设备。

(四)什么是锁存器?

        锁存器(Latch)是一种用于存储和传输数据的元件,通常用于数字电路中。锁存器有两种状态:锁定(Latch)和释放(Unlatch)。在锁定状态下,锁存器会存储输入的数据,并在需要时将数据传递给输出;在释放状态下,锁存器不再接受新的输入数据,并且保持输出数据不变。可以简单理解为寄存器中的“数据暂存器”。

(五)移位寄存器中三态门是什么,其作用是什么?

        在移位寄存器中,三态门(Tri-State Gate)是一种特殊的逻辑门,具有三种输出状态:高电平(1)、低电平(0)和高阻态(High-Z)。在高阻态下,三态门的输出端对外部电路呈现高阻态,即相当于断开输出端与其他电路的连接,不会对其他电路造成影响。三态门在移位寄存器中的作用是实现数据的并行输入和输出。通过控制三态门的使能端,可以选择性地将移位寄存器中的数据输出到总线上或从总线上输入数据到移位寄存器中。这种并行输入输出的方式可以实现高效的数据传输和处理,特别适用于串行-并行转换或并行-串行转换的应用场景。具体原理不理解也无所谓,不影响对后续74HC595的工作过程的理解,就暂时跳过。

(六)高位低位指什么?

        在计算机中,"高位"和"低位"通常用来描述数据在内存或寄存器中存储的位置或顺序。这个概念源自于二进制数值的表示。

  • 高位:二进制数值中的高位指的是权值较高的位,即在表示一个数时数值较大的位。在一个二进制数值中,最左侧的位是最高位,它代表着最高的权值。

  • 低位:二进制数值中的低位指的是权值较低的位,即在表示一个数时数值较小的位。在一个二进制数值中,最右侧的位是最低位,它代表着最低的权值。

举例来说,对于二进制数值 1101

  • 最高位是 1,代表权值为 8
  • 第二高位是 1,代表权值为 4
  • 第二低位是 0,代表权值为 1
  • 最低位是 1,代表权值为 1

因此,在这个例子中,1 是高位,0 是低位。

        在计算机中,数据的存储方式可以是"大端序"(Big Endian)或"小端序"(Little Endian),这会影响高位和低位的顺序。在大端序中,高位字节存储在低地址,低位字节存储在高地址;而在小端序中,高位字节存储在高地址,低位字节存储在低地址。这种存储方式取决于计算机体系结构的设计。

二、74HC595

        74HC595是8位串行输入并行输出的移位寄存器。其使用场景通常为在调用大量LED灯时会占用大量IO口,导致引脚不足,这时我们使用这类寄存器可以起到减少引脚使用的目的,同时还可以有效控制LED的亮灭。市面上常见移位寄存器有74HC595和74HC165,和595不同的是74HC165是并行输入串行输出。

(一)引脚部分介绍

        如图所示,我们将半圆形缺口放在左手边,或者圆形标记放在左下角,这样来正视寄存器。从左下角开始,逆时针旋转,依次为1-16号引脚,其中16号引脚链接5V电源,和它对角的8号引脚接GND,1号引脚到7号引脚和15号引脚是输出引脚,9号引脚是串行输出引脚用于链接级联的移位寄存器,14号引脚是串行数据输入引脚,14号引脚在旧版中标注为DS,现在为SER,SER( Serial data )表示该引脚用于串行通信或数据传输,DS(Data Sheet)表示该引脚的功能或特性可在元件的数据手册或规格书中找到详细的信息。13号引脚控制寄存器的输出,输出使能,13号引脚低电平时寄存器开启输出,13号引脚高电平时,寄存器关闭输出。12号引脚是存储寄存器(锁存器)时钟信号引脚,当12号(RCLK)为高电平时移位寄存器(74HC595)会复制数据到锁存寄存器中,并最终将数据送到并行数据输出引脚,11号引脚(SRCLK)移位寄存器时钟引脚,上升沿时数据将移入移位寄存器,10号引脚(SRCLR)用于重置寄存器,所以74HC595的SRCLR(Shift Register Clear)引脚通常是低电平有效的,即当SRCLR引脚接地时,移位寄存器中的数据会被清除,具体根据情况看是否拉高或者接3V。

        下图来自于此型号MC74HC595A 8-Bit Serial-Input/Serial or Parallel-Output Shift Register with Latched 3-State Outputs二一年文档:

Symbol(代表)

对应时序

Pin(引脚)

Discrition(描述)

Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7

QA~QH

15, 1, 2, 3, 4, 5, 6, 7

parallel data output,并行输出

GND

8

ground (0 V),接地

Q7S

QH'

9

serial data output,串行数据输出

/M/R

/SCLR

10

master reset (active LOW),移位寄存器清除

SHCP

SCK

11

shift register clock input,移位寄存器时钟

STCP

RCK

12

storage register clock input,锁存器时钟

/O/E

/G

13

output enable input (active LOW),输出使能

DS

SI

14

serial data input,串行数据输入

VCC

16

supply voltage接5V电源

下图来自普中开发版文档:

(二)内部组成介绍

        74HC595中包含8位移位寄存器,8位数据锁存器,8位三态门,。到这里如果理解锁存器等概念将会更好理解,如果缺乏相关知识建议到开头去寻找。其实简而言之,数据锁存器就是用来存数据,移位寄存器,用来对数据进行移位,数据传输过程是从移位寄存器进入,然后通过锁存器,最终结果会推送到三态门然后输出。

(三)工作时序图:

        首先,SCK(SHIFT CLOCK,SRCLK引脚,11号引脚)是移位寄存器时钟输入引脚对应时序,用于控制数据的移位操作,我们在使用时该引脚链接对应的IO口;SI(Serial Input,DS引脚,SER引脚,14号引脚)是串行数据输入引脚对应的时序,用于接收要传输到寄存器中的数据,使用时接对应的IO口;RCK(Register Clock)存储寄存器(锁存器)时钟,用于控制将移位寄存器中的数据存储到存储寄存器中的时钟信号,每次当RCK上升沿时,数据就会进行一次存储,可以通过时序图看到一次完整的周期是九个Tick;/SCLR(Shift Register Clear,SHCP引脚,10号引脚),通常表示移位寄存器清除信号,斜杠表示信号为负逻辑,即当引脚接收到低电平信号时,会清除移位寄存器中的数据;/G(Output Enable,/OE引脚,13号引脚)斜杠表示信号为负逻辑,即当引脚接收到低电平信号时,输出被使能,这里的输出是将数据从存储寄存器输出到对应的输出管脚0到7;当移位寄存器数据满了8位之后,新进的低位数据会将高位数据寄出移位寄存器,而多出来的高位数据会通过Q7S(对应9号引脚)输出到下一个级联的寄存器,也就是就好引脚接下一个寄存器的串行输入口。

        到此,我们已经明确各行时序分别代表着什么了,我们正式开始进行一个周期的循环:第一行时钟时序,不断进行着周期一致的电平跳变,紧接着第一个发生变化的,SI高电平,这表示数据输入了,对比时钟行可知,数据输入到移位寄存器这一过程持续了一个Tick,即时钟时序高低电平一格完整的周期,随后RCK(存储寄存器时钟)开始跳变,在7.5个周期QH‘会进行响应,在前八个上升沿时,数据会依次写入存储寄存器(锁存器),然后在全部输入完之后再进行一次置为高电平,也就是第九次跳变,这样数据才是真正的输出了,至于有人要问为什么?就告诉他看时序图去,时序图上这么画的;/SCLR置低清除数据,所以可以看到过程中它一直处于高电平,/G斜杠表示信号为负逻辑,即当引脚接收到低电平信号时,输出被使能,可以看到在时序图中,整个过程它一直保持低电平状态,如果将它置为高电平,QA到QH无论外面发生什么是都不会做出反应的。最后的最后可以再操作一下/SCLR将数据清空。

(四)级联接线

图片来自B站Up主:@金善愚;

这就是学习过程的全部理解,很荣高兴和大家进行分享,如果内容对你理解有帮助的话欢迎点赞收藏,如果有疑问或者发现问题欢迎评论交流,之后我会使用stm32标准库进行实际操作,感兴趣的朋友可以关注一下,更新后可以及时收到消息。谢谢大家。

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是74HC595级联的C语言程序示例: ```c #include <stdio.h> #include <wiringPi.h> // 定义74HC595芯片的引脚连接 #define DATA_PIN 0 // 连接到74HC595的SER(串行数据输入)引脚 #define LATCH_PIN 2 // 连接到74HC595的RCLK(锁存时钟)引脚 #define CLOCK_PIN 3 // 连接到74HC595的SRCLK(移位寄存器时钟)引脚 // 向74HC595芯片发送一个字节的数据 void shiftOut(uint8_t data) { for (int i = 0; i < 8; i++) { digitalWrite(CLOCK_PIN, LOW); // 将移位寄存器时钟引脚置低,准备发送数据 // 将数据的最低位写入串行数据输入引脚 digitalWrite(DATA_PIN, data & 0x01); digitalWrite(CLOCK_PIN, HIGH); // 将移位寄存器时钟引脚置高,将数据写入移位寄存器 data >>= 1; // 将数据右移一位,准备发送下一位数据 } } // 将数据发送到所有级联的74HC595芯片 void updateShiftRegisters() { digitalWrite(LATCH_PIN, LOW); // 将锁存时钟引脚置低,准备发送数据 // 通过移位寄存器发送每个芯片的数据 for (int i = 0; i < 8; i++) { shiftOut(0x00); // 发送一个字节的0,表示关闭所有输出 } digitalWrite(LATCH_PIN, HIGH); // 将锁存时钟引脚置高,将数据加载到输出引脚 } int main() { wiringPiSetup(); // 初始化WiringPi库 pinMode(DATA_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); while (1) { // 向74HC595芯片发送数据 updateShiftRegisters(); // 延时一段时间,观察输出结果 delay(1000); } return 0; } ``` 这个程序使用了WiringPi库来控制GPIO引脚。在代码中,我们定义了74HC595芯片的引脚连接,然后实现了两个函数,一个用于向74HC595芯片发送一个字节的数据,另一个用于将数据发送到所有级联的74HC595芯片。在`main`函数中,我们初始化引脚,并在一个无限循环中不断发送数据。你可以根据需要修改代码中的引脚定义和延时时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒雒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值