超详细的74HC595应用指南(以stm32控制点阵屏为例子)

news2024/11/16 7:35:13

74HC595是一款常用的串行输入/并行输出(Serial-in/Parallel-out)移位寄存器芯片,在数字电子领域有着广泛的应用。它具有简单的接口和高效的扩展能力,成为了许多电子爱好者和工程师们的首选之一。本文将深入介绍74HC595芯片的功能、应用场景以及工作原理。
在这里插入图片描述

文章目录

    • 一、功能概述:
    • 二、芯片的基本介绍
    • 三、引脚及功能
    • 四、内部结构和原理
      • 内部结构:
      • 实现原理:
    • 五、多个74HC595级联
      • 连接图:
      • 连接步骤:
    • 六、点阵屏
      • 连接图:
      • 控制流程:
      • 使用STM32F103控制点阵屏
        • 1. 硬件连接:
        • 2. 控制逻辑:
        • 3. 示例代码:
    • 七、应用场景

一、功能概述:

平时我们需要实现使用单片机点亮一个LED灯,那就要使用一个配置一个单片机的GPIO口输出高电平,但是点阵屏大到广告屏少说也有几百个LED灯,先不说浪费引脚的问题,单是单片机是否有这么多个GPIO口,这种情况下74HC595就派上用场了,它可以将串行的数据输出转化成并行输出的形式,这就使用1个GPIO口就可以控制8个LED,经过级联可以实现更少的IO口,这就是这个芯片最简单,也是最广泛的应用。

二、芯片的基本介绍

74HC595芯片是一种8位移位寄存器,可以通过串行数据输入的方式将数据存储在内部的寄存器中,并通过并行数据输出的方式将数据输出到相应的输出引脚上。它还具有级联能力,可以通过多个芯片级联扩展输出位数。它的主要功能包括:

  1. 8位移位寄存器:可以存储8位二进制数据。
  2. 串行数据输入:通过SER引脚输入数据。
  3. 时钟输入:通过SRCLK引脚提供时钟信号。
  4. 数据锁存:通过RCLK引脚锁存数据。
  5. 并行数据输出:通过QA~QH引脚输出数据。

三、引脚及功能

引脚及其功能
以下是74HC595芯片的引脚及其功能的详细说明:

  1. VCC (Pin 16):

    • 功能: 正电源引脚,用于给芯片供电。
    • 连接: 将此引脚连接到正电源(通常为+5V)。
  2. GND (Pin 8):

    • 功能: 地引脚,为芯片提供电路共同的参考地。
  3. SER (Pin 14):

    • 功能: 串行输入引脚,用于输入要移位的数据。
    • 连接: 将此引脚连接到微控制器或其他输出源的数据引脚。
  4. SRCLK (Pin 11):

    • 功能: 移位寄存器时钟引脚,用于控制数据移位。
    • 连接: 将此引脚连接到微控制器或其他控制源的时钟引脚。
  5. RCLK (Pin 12):

    • 功能: 输出寄存器时钟引脚,用于锁存数据并输出到输出引脚。
    • 连接: 将此引脚连接到微控制器或其他控制源的时钟引脚。
  6. QA-QH (Pins 15-1):

    • 功能: 并行输出引脚,输出锁存的数据。
    • 连接: 这些引脚连接到目标设备,例如LED点阵屏或其他外部设备的行选引脚。
  7. OE (Pin 13):

    • 功能: 输出使能引脚,用于控制输出引脚的使能状态。
    • 连接: 根据设计需求,将此引脚连接到高电平或低电平,以使输出引脚处于使能或禁用状态。

四、内部结构和原理

内部结构:

74HC595芯片由一个移位寄存器和一个输出寄存器组成。移位寄存器用于接收串行输入数据并进行位移操作,输出寄存器用于锁存移位寄存器中的数据并提供并行输出。
在这里插入图片描述

实现原理:

在这里插入图片描述

  1. 数据输入:

    • 串行输入:输入数据通过SER引脚以串行方式输入到移位寄存器中。
    • 时钟信号:SRCLK引脚提供时钟信号,当信号上升沿到达时,移位寄存器中的数据将进行位移操作。
  2. 数据位移:

    • 移位操作:在每个时钟脉冲上升沿时,移位寄存器中的数据向左移动一位,新的数据从SER引脚输入并进入移位寄存器的最低位。
    • 串行输入:通过连续的位移操作,数据位逐渐从SER引脚传递到移位寄存器的高位。
  3. 数据锁存和并行输出:

    • 数据锁存:当需要锁存数据时,使用RCLK引脚提供一个时钟信号。在信号上升沿到达时,移位寄存器中的数据将被锁存到输出寄存器中。
    • 并行输出:输出寄存器中的数据通过并行输出引脚(QA~QH)提供,并可连接到外部设备,如LED点阵屏。每个引脚对应输出寄存器中的一个位,其状态取决于锁存的数据。

通过该移位寄存器和输出寄存器结构,74HC595允许我们通过串行输入数据并通过逐位位移的方式控制并行输出引脚,实现对外部设备的控制。通过适时提供时钟信号,可以控制数据的输入、位移和输出锁存的时机,从而实现灵活的数据控制和显示效果。

五、多个74HC595级联

连接图:

在这里插入图片描述

连接步骤:

  1. 第一步:将第一个74HC595的QH'引脚(引脚9)连接到第二个74HC595的SER(引脚14)引脚,这将建立级联连接。

  2. 第二步:连接第一个74HC595的SRCLK(引脚11)RCLK(引脚12)引脚以及第二个74HC595的SRCLK(引脚11)引脚,以相同的时钟信号驱动两个芯片。

  3. 第三步:将第一个74HC595的QA-QH引脚(引脚15-1)连接到需要控制的8位输出设备的输入引脚。

  4. 第四步:将第二个74HC595的QA-QH引脚(引脚15-1)连接到另外8位输出设备的输入引脚。

  5. 第五步:分别连接每个74HC595的VCC引脚(引脚16)到正电源(通常为+5V),并将两者的GND引脚(引脚8)连接到共同的地线。

通过这种级联连接的方式,使用两枚74HC595芯片可以实现十六位输出控制。数据通过SER引脚串行输入到第一个芯片的移位寄存器,然后逐位向第二个芯片的移位寄存器传递。通过控制时钟信号,数据被移位和锁存到输出寄存器,并通过QA-QH引脚并行输出到外部设备。这样,您就可以通过编程控制和控制信号模式来控制这十六位输出设备的状态。

六、点阵屏

点阵屏是以逐行扫面的方式进行的,要不断刷新显示数据,间隔时间很少,所以在人眼上看就是同步进行的。

连接图:

在这里插入图片描述

控制流程:

控制LED点阵屏的基本流程如下:

  • 输入要显示的图案或字符的数据,通常使用一个8x8的二维数组存储。
  • 逐行遍历二维数组,按行输出数据到74HC595的SER引脚。
  • 在每次输出数据之前,通过SRCLK引脚提供一个上升沿时钟信号,将数据移位至寄存器。
  • 在所有数据输入完成后,通过RCLK引脚提供一个上升沿时钟信号,将数据锁存到寄存器中。
  • 通过级联的74HC595芯片,逐行输出控制LED点阵屏的行选引脚。
  • 在一定的时间间隔后,刷新显示下一行的数据,通过调节刷新速度可以实现持续的动画效果。

使用STM32F103控制点阵屏

1. 硬件连接:

  • 将STM32F103的相应引脚与74HC595芯片进行连接,例如将STM32F103的GPIO引脚连接到74HC595的SER(串行数据输入)、SRCLK(移位寄存器时钟)和RCLK(锁存寄存器时钟)引脚。
  • 将74HC595芯片的输出引脚(QA-QH)连接到LED点阵屏的行选和列选引脚。

2. 控制逻辑:

  • 准备要显示的图案或字符的编码数据,将其存储到适当的变量或数组中。
  • 编写逻辑代码来控制数据的传输和控制信号的生成,以实现位移寄存器和锁存寄存器的操作。
  • 使用适当的时钟信号触发数据的位移和锁存,使数据从移位寄存器移入到输出寄存器中,并在输出寄存器中锁定。
  • 使用GPIO引脚控制数据信号的传输和时钟信号的周期性触发。

3. 示例代码:

#include "stm32f10x.h"

// 定义74HC595芯片引脚连接
#define SER_PIN    GPIO_Pin_0
#define SRCLK_PIN  GPIO_Pin_1
#define RCLK_PIN   GPIO_Pin_2
#define GPIO_PORT  GPIOA

// 字符编码数据,使用负逻辑(低电平为亮)
const uint8_t font[][8] = {
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},  // 空白字符
    {0x3E, 0x41, 0x41, 0x41, 0x41, 0x41, 0x3E, 0x00},  // 字母A
    // 添加更多字符的字模数据...
};

// 函数声明
void delay(uint32_t time);
void sendByte(uint8_t data);
void sendCommand(uint8_t cmd);
void sendData(uint8_t data);
void displayMatrix(const uint8_t matrix[8]);

int main(void) {
    // 初始化GPIO和时钟配置
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = SER_PIN | SRCLK_PIN | RCLK_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIO_PORT, &GPIO_InitStructure);

    while (1)
    {
        // 显示字符A
        displayMatrix(font[1]);
        delay(1000);  // 延时1秒
    }
}

// 延时函数
void delay(uint32_t time) {
    while (time--);
}

// 发送一个字节到74HC595芯片
void sendByte(uint8_t data) {
    uint8_t i;
    for (i = 0; i < 8; i++) {
        GPIO_ResetBits(GPIO_PORT, SRCLK_PIN);  // 时钟信号置低
        if ((data & 0x80) == 0x80)
            GPIO_SetBits(GPIO_PORT, SER_PIN);  // 输出数据为1
        else
            GPIO_ResetBits(GPIO_PORT, SER_PIN);  // 输出数据为0
        data <<= 1;
        GPIO_SetBits(GPIO_PORT, SRCLK_PIN);  // 时钟信号置高,数据移位
    }
}

// 发送命令到74HC595芯片(锁存数据)
void sendCommand(uint8_t cmd) {
    GPIO_ResetBits(GPIO_PORT, RCLK_PIN);  // 时钟信号置低
    sendByte(cmd);  // 发送数据
    GPIO_SetBits(GPIO_PORT, RCLK_PIN);  // 时钟信号置高,锁存数据
}

// 发送数据到74HC595芯片(显示数据)
void sendData(uint8_t data) {
    GPIO_SetBits(GPIO_PORT, RCLK_PIN);  // 时钟信号置高
    sendByte(data);  // 发送数据
    GPIO_ResetBits(GPIO_PORT, RCLK_PIN);  // 时钟信号置低
}

// 显示一个8x8点阵图案
void displayMatrix(const uint8_t matrix[8]) {
    uint8_t row;
    for (row = 0; row < 8; row++) {
        sendData(matrix[row]);
    }
}

七、应用场景

  1. 数码管驱动:通过级联多个74HC595芯片,可以实现大规模数码管的驱动,使用较少的GPIO引脚输出更多的信息。
  2. LED点阵控制:通过级联多个74HC595芯片,可以实现对LED点阵的控制,从而显示各种图像和文字。
  3. 扩展IO端口:通过级联多个74HC595芯片,可以有效地扩展单片机的IO端口,用于连接更多的外部设备。
  4. 按键输入:通过74HC595芯片的串行输入功能,可以实现连续多个按键的输入,减少单片机的引脚占用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

019 - STM32学习笔记 - Fatfs文件系统(一) - FatFs文件系统初识

019 - STM32学习笔记 - Fatfs文件系统&#xff08;一&#xff09; - FatFs文件系统初识 最近工作比较忙&#xff0c;没时间摸鱼学习&#xff0c;抽空学点就整理一点笔记。 1、文件系统 在之前学习Flash的时候&#xff0c;可以调用SPI_FLASH_BufferWrite函数&#xff0c;将数…

【Terraform学习】Terraform-AWS部署快速入门(快速入门)

Terraform-AWS部署快速入门 实验步骤 连接到 Terraform 环境 SSH 连接到Terraform 环境(名为MyEC2Instance的实例) 在 Amazon Web Services &#xff08;AWS&#xff09; 上预置 EC2 实例 用于描述 Terraform 中基础结构的文件集称为 Terraform 配置。您将编写一个配置来定义…

【视觉SLAM入门】5.1 非线性最小二乘理论 ------线搜索,信赖域,最速/牛顿下降法,高斯牛顿,LM等原理推导

"天之道也" 0. 引入1. 最速下降法2. 牛顿法3. (实用)G-N法4. (实用)L-M方法5. 总结 注意&#xff1a; 上一节得到的最小二乘问题&#xff0c;本节来讨论---- 求解非线性最小二乘问题 \color {red}求解非线性最小二乘问题 求解非线性最小二乘问题 0. 引入 求解这个简…

el-upload上传图片和视频,支持预览和删除

话不多说&#xff0c; 直接上代码&#xff1a; 视图层&#xff1a; <div class"contentDetail"><div class"contentItem"><div style"margin-top:5px;" class"label csAttachment">客服上传图片:</div><el…

【spring】spring bean的生命周期

spring bean的生命周期 文章目录 spring bean的生命周期简介一、bean的创建阶段二、bean的初始化阶段三、bean的销毁阶段四、spring bean的生命周期总述 简介 本文测试并且介绍了spring中bean的生命周期&#xff0c;如果只想知道结果可以跳到最后一部分直接查看。 一、bean的…

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…

无人机影像配准并发布(共线方程)

无人机影像 DEM 计算四个角点坐标&#xff08;刚性变换&#xff09; 像空间坐标&#xff08;x,y,-f&#xff09; 像空间坐标畸变纠正 deltax,deltay 已知(x,y)&#xff0c;求解(X,Y, Z)或者(Lat,Lon) 这里的Z是DEM上获取的坐标和Zs为相机坐标的高程&#xff0c;如果均为已…

水文章——推荐一个视频播放器和一个图片查看器

视频播放器——PotPlayer http://www.potplayercn.com/ 图片查看器——JPEGVIEW https://www.bilibili.com/video/BV1ZY411P7fX/?spm_id_from333.337.search-card.all.click&vd_sourceab35b4ab4f3968642ce6c3f773f85138

PHP数组转对象和对象转数组

PHP数组转对象和对象转数组 <?php function array_to_object($arr){$obj new stdClass();foreach ($arr as $key > $val) {if (is_array($val) || is_object($val)) {$obj->$key array_to_object($val);} else {$obj->$key $val;}}return $obj; } function o…

pdf怎么转换成word 文档?这几种方法收藏一下

pdf怎么转换成word 文档&#xff1f;PDF和Word是我们平时工作和学习中最常用的两种文档格式。PDF文档格式通常用于电子书籍、合同、申请表等需要保持原样式的文档。而Word文档则通常用于编辑和修改。但是&#xff0c;有时我们需要将PDF文档转换为可编辑的Word文档&#xff0c;以…

【Docker】在Docker大火的背后,究竟隐藏着未来科技发展的哪些大趋势

这里写目录标题 在docker大火的背后是什么新科技的发展呢&#xff1f;1.容器化技术的普及2.云原生应用的兴起3.边缘计算的发展4.容器编排和管理平台的演进5.混合云和多云架构的普及 docker三大特性轻量化可移植性可扩展性 docker被谁抢了风头呢1.风头被Kubernetes (K8S)抢了2.缺…

日撸代码300行:第54天(基于 M-distance 的推荐)

代码来自闵老师”日撸 Java 三百行&#xff08;51-60天&#xff09;“&#xff0c;链接&#xff1a;日撸 Java 三百行&#xff08;51-60天&#xff0c;kNN 与 NB&#xff09;_闵帆的博客-CSDN博客 算法是基于M-distance的推荐&#xff0c;通过用户评分矩阵对用户进行电影推荐。…

如果你在选型低代码平台,可以从这5个角度去分析抉择

研究低代码平台已有3年&#xff0c;也算是个低代码资深用户了&#xff0c;很多企业面临低代码选型上的困难&#xff0c;选平台容易&#xff0c;换平台难。下面基于个人理解给大家做一份千字的注意事项&#xff01;希望对大家在选型低代码方面有一定帮助。最终&#xff0c;正确且…

[AWD靶场搭建]

文章目录 [AWD靶场搭建]前言AWD平台搭建靶机搭建Cadinal添加靶机 连接Asteroid大屏默认ssh账号密码参考 [AWD靶场搭建] 前言 觉得好玩搭建了一下AWD靶场&#xff0c;使用了vidar-team编写的 Cardinal AWD平台搭建 这里我是在kali搭建的&#xff0c;所以我下载了这个压缩包&…

centos7搭建k8s环境并部署springboot项目

之前看了很多文章&#xff0c;都是部署后一直报错&#xff0c;百度解决后下次又忘了&#xff0c;这次决定把从头到尾的过程记录下来方便下次再看&#xff0c;部署参考文章尚硅谷Kubernetes&#xff08;k8s&#xff09;视频学习笔记_尚硅谷k8s笔记_溯光旅者的博客-CSDN博客 1、…

13年测试老鸟,接口性能测试总结整理,据说这是全网最全的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试按照不同…

支持多种通信方式和协议方便接入第三方服务器或云平台

2路RS485串口是一种常用的通信接口&#xff0c;可以支持Modbus Slave协议&#xff0c;并可接入SCADA、HMI、DSC、PLC等上位机。它还支持Modbus RTU Master协议&#xff0c;可用于扩展多达48个Modbus Slave设备&#xff0c;如Modbus RTU远程数据采集模块、电表、水表、柴油发电机…

GAN论文精读

标题:Generative Adversarial Nets 摘要: 简写:作者提出了一个framework通过一个对抗的过程&#xff0c;在这里面会同时训练两个模型。 第一个模型为生成模型G&#xff0c;是用来抓住整个数据的分布 第二个模型为辨别模型D&#xff0c;是用来估计一个样本是否从G中产生。 …

BD Biosciences通过使用Liquid UI优化SAP QM,节省了80%的处理时间,提高了 95% 的数据准确性

背景 BD 生物科学公司成立于 1897 年&#xff0c;致力于改善患者的治疗效果&#xff0c;并在一个多世纪的时间里始终坚持这一理念&#xff0c;现已涉足诊断、生物科学以及各种医疗设备和仪器系统。 挑战 手动验证数据 原因&#xff1a;使用非自动程序演示和验证数据&#xff0c…

FRR+VPP

安装 三者的结合&#xff0c;实际上编译安装好就行了&#xff0c;不需要做任何代码上的修改&#xff0c;只需要安装和配置&#xff0c;然后你就有了一台路由器。 FRRouting使用frr-8.5.2版本&#xff0c;VPP使用23.06版本&#xff0c;DPDK和lcpng是VPP的插件&#xff0c;安装…