如何级联移位寄存器(74HC595)

在这个项目中,我们将使用 74HC595 移位寄存器将 2 个移位寄存器级联在一起。这样级联移位寄存器现在可以控制 16 个输出。

当然您可以级联任意数量的移位寄存器。如果您要级联第三个移位寄存器,它可以控制 24 个输出。如果您级联第四个移位寄存器,它可以控制 32 个输出。

但在这个项目电路中,我们将只级联一个移位寄存器,总共有2个。

级联移位寄存器非常简单,只要您知道如何操作即可,因为 74HC595 专门设计为能够添加额外的移位寄存器。因此,只要您知道如何连接它,它就非常简单。

如上所述,优点是我们可以控制更多输出。我们将添加 一个移位寄存器,我们就可以控制 16 个输出。

我们需要为这个项目准备16个电阻器和 LED。

组件:

  • 74HC595移位寄存器
  • 16 个 LED
  • 16个220Ω电阻
  • Arduino

74HC595 移位寄存器是电子行业中最流行、应用最广泛的移位寄存器之一。单个 74HC595 可以控制 8 个输出。这意味着它可以控制例如 8 个 LED。

该移位寄存器共有16个引脚。

移位寄存器的引脚排列如下所示。

下表总结了这些引脚连接。

|-------------------|---|------------------------------------------------|
| 别针 | | 功能 |
| QA**-QH | | 移位寄存器的输出一个8个输出引脚** |
| VCC (引脚16) | | 移位寄存器电源接口 |
| GND(引脚 8) | | 移位寄存器的接地 |
| Q H '(引脚 9) | | 串行输出用于将数据移位到另一个 74HC595 移位寄存器(级联引脚) |
| CLEAR (引脚 10) | | 这会将移位寄存器中的所有位设置为 0,拉低则关闭。清除寄存器引脚 |
| SRCLK(引脚 11) | | 如果拉高,这会将移位寄存器中的所有值向前移动一位。存入引脚 |
| RCLK(引脚 12) | | 当拉高时,它会输出新的移位寄存器值。输出数据引脚(将寄存器中的数据输出到对应的管脚) |
| OE(引脚 13) | | 当接地时启用输出,当高电平时禁用输出。(常接地)使能引脚 |
| SER(引脚 14) | | 这是新串行数据的输入引脚。(接arduino 开发板管脚) |

首先我们接通电源。因此我们将移位寄存器的 两个 V CC连接到 5V arduino 端子。我们将移位寄存器的接地连接到 GND arduino 端子。这样可以为两个移位寄存器提供足够的电源。

接下来,我们将两个SRCLK (引脚 11)连接到 arduino 的数字引脚 9。

我们将RCLK(引脚 12)连接到 arduino 上的数字引脚 8。

对于第一个移位寄存器,我们将串行数据输入引脚14连接到 arduino 上的数字引脚7。第二个移位寄存器上的数据输入将与Q H '(引脚 9) 连接。

由于我们要级联一个额外的移位寄存器,因此对于移位寄存器,我们将串行数据输出线连接到第二个移位寄存器上的串行数据输入线。这样可以让数据无缝地从移位寄存器流到第二个移位寄存器,我们可以将其理解成级联形成了一个16位的移位寄存器。

最后,我们将 LED 连接到输出引脚 Q A - Q H。我们为每个 LED 连接一个限流 220Ω 电阻。

74HC595 移位寄存器有 8 个输出。这意味着您可以将最多 8 个输出设备(例如 LED 或蜂鸣器)连接到移位寄存器。

为了给 74HC595 移位寄存器供电,我们为 V CC提供 +5V ,并将 GND 连接到 arduino 上的地。

将移位寄存器连接到arduino 时,SER(引脚 14)连接到 arduino 上的数字引脚 7。通过此连接,通过我们的代码,我们将写入想要在输出端显示的数据。例如,我们可以将 11111111 写入串行数据线。每一次将移位寄存器的11管脚拉高时会将一个1移入存储寄存器,然后将其拉低,重复以上动作8次,才能将所有的数据移入寄存器中。如果是两个移位寄存器串联,这个过程就需要16次了,一旦我们完成数据的移入,下一步将移位寄存器的12管脚拉高就可以一次性将寄存器中的数据输出到输出管脚,这意味着我们将数据从存储寄存器传输到输出端,这意味着 LED 全部会亮起。

级联移位寄存器电路:

代码:

复制代码
int big=8 ; 
int push= 9; 
int datain  = 7; // 数据资料

int datainput[16]={1,0,1,0,1,0,1,0,
                   1,0,1,0,1,0,1,0};

void setup() {
  pinMode(big,OUTPUT);
  pinMode(push,OUTPUT);
  pinMode(datain,OUTPUT);
 
}

void loop() {
  digitalWrite(big,LOW);// 开启数据通道
  
  //先推上去的是最后一位也就是第八位,最后是第一位。

  for (int i=0;i<16;i++){
  	pushsomething(datainput[i]);
  } 
  //全部放入寄存器后,统一一次性输出到各个管脚。  
  digitalWrite(big,HIGH);  
}
void pushsomething(int number){
  digitalWrite(push,LOW);// 准备将一位数据存入寄存器
  digitalWrite(datain,number);//发送数据
  digitalWrite(push,HIGH);//数据存入寄存器
}
相关推荐
代码游侠18 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT1 天前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen1 天前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠1 天前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_1 天前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技1 天前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计1 天前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报1 天前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业1 天前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能1 天前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微