74HC595级联介绍篇(一)

在说74HC595级联前,先从datasheet中了解下这款常用逻辑芯片,以Nexperia的74HC595为例。

看下datasheet中的描述图1:

 

图1

先来大概翻译下datasheet中对74HC595的总体概述:

74HC595是一个8位串行输入,可串行或并行输出的移位寄存器存储寄存器和三态输出。

移位寄存器和存储寄存器时钟都是分开的。

该设备具有串行输入(DS)和串行输出(Q7S)来级联和异步复位输入MR的功能。

当MR为低电平时复位移位寄存器,即将移位寄存器数据清零。

在移位寄存器时钟(SHCP)的上升沿时,DS上的数据会被移入移位寄存器,在存储寄存器时钟(STCP)上升沿时,移位寄存器里的数据传输到存储寄存器,当输出使能OE为低时,存储寄存器里的数据就会并行输出。

当OE为高电平时输出为高阻态。

 

 

从前面概述中可以大概了解74HC595工作流程,下面结合datasheet中的功能框图图2加深理解:

 

 

 

图2

从功能框图中可以看出,引脚10、11、14都是作用在移位寄存器的,被传输的数据先进入移位寄存器,再通过STCP将移位寄存器的数据存入存储寄存器,最后通过输出使能端\OE使能数据并行输出,引脚9Q7S用于级联。

 

再来看看该片子的的真值表图3:

图3

从真值表中可以看出其逻辑关系,主要使用红框部分。

 

 

对于一个芯片我们除了要关心起功能,还要知道芯片的引脚定义,要不然如何进行电路连接呢?当然了,这些信息datasheet中都有给出。如图4为595的引脚定义:

 

图4

 

74HC595的介绍就到这里,下面讲单片595是如何驱动的,595级联留在下一篇文章讲。

我们知道74HC595是将数据串转并的,也就是数据(8bit)串行输入,并行输出。串行并行这些概念就不多说了,不清楚的自行查资料。

使用步骤:

1、先把要传输的数据(8bit)从引脚14DS输入到74HC595

2、将从DS上的数据串行移入移位寄存器,需要时钟驱动,即引脚11(SHCP)每产生一个上升沿,DS上的数据往移位寄存器送入一位,先送低位,后送高位,经过8个上升沿后,8bit全部送入移位寄存器了。

3、将移位寄存器里的数据送入存储寄存器,引脚12(STCP)产生一个上升沿后,该操作就完成了。

4、引脚13(OE)为低电平,则步骤3送入存储寄存器的8bit数据(一个字节)就在Q7-Q0并行输出,并输出的数据会被所存起来。

注意:数据并行输出后,只要没有数据更新进来,原输出的数据保持不变,就是所谓的锁存(数据被锁存住)。在完成步骤123后,只要步骤4还没使能,输出都是保持不变的(这里是有误的,输出不是保持不变,不使能,输出是呈高阻态),当OE一使能,新的数据就输出,覆盖旧输出。

 

最后以图片的形式简单描述将0x11并行输出的过程:

0x11转为二进制是 0001 0001,串转并过程如图5和图6:

图5

图6

 

  • 84
    点赞
  • 332
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
以下是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`函数中,我们初始化引脚,并在一个无限循环中不断发送数据。你可以根据需要修改代码中的引脚定义和延时时间。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值