【51单片机系列】74HC595实现对LED点阵的控制
本文是关于LED点阵的使用,使用74HC595模块实现对LED点阵的控制。
文章目录
- 一、8x8LED点阵的原理
- 1.1 LED点阵显示原理
- 1.2 LED点阵内部结构图
- 1.3 开发板上的LED点阵原理图
- 1.4 74HC595芯片
- 二、使用74HC595模块实现流水灯效果
- 三、 使用74HC595模块控制LED点阵对角线亮
一、8x8LED点阵的原理
1.1 LED点阵显示原理
LED点阵是由发光二极管排列组成的显示器件,被广泛应用于汽车报站器、广告屏等。如下所示:

proteus中的8x8点阵如下:

通常应用较多的是8x8点阵,使用多个8x8点阵可组成不同分辨率的LED点阵显示屏,比如16x16点阵可以使用4个8x8点阵构成。
1.2 LED点阵内部结构图
8x8LED点阵内部结构图如下,这两种图片只是接法不同,要点亮LED,左图需要行置为高电平,列置为低电平;右图则需要行置为低电平,列置为高电平。

8x8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置高电平,某一列置低电平,则相应的二极管将点亮。
比如对于左图,如果要将第一个点点亮,则将第一行的⑨脚接高电平,第一列的13脚接低电平,第一个点就会点亮;如果要将第一行点亮,则第一行的⑨脚接高电平,所有列(13、3、4、10、6、11、15、16脚)接低电平,第一行就会点亮;如果要将第一列点亮,则第一列的13脚接低电平,所有行(9、14、8、12、1、7、2、5脚)接高电平,第一列就会点亮;如果要将对角线点亮,可以动态显示,首先点亮第一个点,然后点亮第2行第2列的点…这样依次循环点亮,就可以显示对角线的点。
如果要显示数字或字符,在需要的位置点亮,比如显示0(如下),可以循环点亮如下位置的LED。

1.3 开发板上的LED点阵原理图
开发板上使用了74HC595芯片实现串转并,接到LED点阵模块,原理图如下:

74HC595起到了扩展IO口的功能,从原理图可以看到74HC595使用3个IO口输入,有8个IO口输出。这8个IO口控制LED点阵的行(从第一行到最后一行分别是D7-D0),使用P0口控制LED点阵的列(从第一列到最后一列分别是P07-P00)。
比如对于如上结构图左图所示,如果要点亮第一个LED,那么P0口应该置为0x7f,D7-D0应该置为0x80。
1.4 74HC595芯片
74HC595芯片具有8为串行输入/输出或者并行输出移位寄存器,具有三态输出(高电平、低电平、高阻态)。是总线驱动的并行输出。通常用于串行输入到并行输出的数据转换。
74HC595引脚说明如下:
| 符号 | 引脚 | 描述 |
|---|---|---|
| Q0…Q7(QA…QH) | 15,1-7 | 并行数据输出 |
| GND | 8 | 逻辑地 |
| Q7’ | 9 | 串行数据输出 |
| /MR(/SRCLR) | 10 | 主复位(低电平有效),接到GND就处于复位状态,要接到电源处于高电平状态 |
| SHCP(SRCLK) | 11 | 移位寄存器时钟输入 |
| STCP(RCLK) | 12 | 存储寄存器时钟输入 |
| /OE | 13 | 输出有效(低电平有效),在开发板上有一个端子,如果要使输出有效,就短接到GND,如果要使输出无效,就短接到VCC。也可以连接到一个IO口进行控制。进行LED点阵实验时要短接到地,使输出有效。 |
| DS(SER) | 14 | 串行数据输入,输入的数据经过74HC595芯片转换为并口输出 |
| VCC | 16 | 电源 |
74HC595功能如下,H=高电平,L=低电平,↑=上升沿,↓=下降沿,Z=高阻态,NC=无变化,X=无效
| 输入 | 输入 | 输入 | 输入 | 输入 | 输出 | 输出 | 功能 |
|---|---|---|---|---|---|---|---|
| SHCP | STCP | OE | MR | DS | Q7’ | Qn | |
| X | X | L | ↓ | X | L | NC | MR为低电平时仅影响移位寄存器 |
| X | ↑ | L | L | X | L | L | 移位寄存器到输出寄存器,STCP上升沿会将数据输出 |
| X | X | H | L | X | L | Z | 清空移位寄存器,并行输出为高阻态 |
| ↑ | X | L | H | H | Q6’ | NC | 逻辑高电平移入移位寄存器状态0,包含所有的移位寄存器状态移入 |
| X | ↑ | L | H | X | NC | Qn | 移位寄存器的内容到达存储寄存器并从并口输出 |
| ↑ | ↑ | L | H | X | Q6’ | Qn’ | 移位寄存器内容移入,先前的移位寄存器的内容到达存储寄存器并输出 |
从上表可以知道,当主复位MR为高电平,输出使能OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。
74HC595的数据端:
Q0-Q7:八位并行输出端,可以直接控制数码管的8个段。
Q7’:级联输出端,可以接下一个595的SER端。
SER:串行数据输入端。
74HC595控制端说明
- /SCLR(10脚):主复位脚,低电平时清空移位寄存器,通常接VCC。
- SCK(11脚):上升沿数据寄存器移位,下降沿移位寄存器数据保持不变。
- RCK(12脚):上升沿时移位寄存器的数据进入存储寄存器,下降沿存储寄存器数据不变。
- /OE(13脚):输出使能,高电平时禁止输出。
二、使用74HC595模块实现流水灯效果
在proteus中硬件设计如下,实现的功能为使用74HC595芯片实现流水灯效果。

根据上面对74HC595的介绍,DS引脚是输入的串行数据,SHCP上升沿会进行移位寄存器的移位操作,STCP上升沿时会将数据输出到并行端口。
软件代码如下:
/*实现功能:74HC595芯片控制LED点阵实现LED流水灯的效果[2023-12-08] zoya
*/
#include "reg52.h"
#include "intrins.h"typedef unsigned char u8;
typedef unsigned int u16;sbit DS = P3^4; // 74HC595输入数据端口
sbit STCP = P3^5; // 74HC595存储寄存器端口,上升沿时移位寄存器进入存储寄存器
sbit SHCP = P3^6; // 74hc595移位寄存器端口,上升沿时移入数据// 延时函数,i=1延时10us
void Delay(u16 i)
{while(i--);
}// 74HC595芯片将输入的串行数据转换为并行数据输出
void HC595SendByte(u8 dat)
{u8 i;STCP = 1; // 高电平时存储寄存器数据保持不变SHCP = 1; // 高电平时移位寄存器数据保持不变for(i=0;i<8;i++){DS = dat >> 7; // 每次输入最高位数据dat <<= 1; // 移位后将dat数据左移一位,保证下一次移入的数据在最高位// 实现移位寄存器的时序,需要SHCP有一个上升沿,所以先将SHCP置0,然后置1SHCP = 0;_nop_(); // 空指令,不做任何操作,当做延时使用_nop_();SHCP = 1;}// 数据已经在移位寄存器了,现在将移位寄存器的数据输出到存储寄存器// STCP上升沿时将数据从移位寄存器输出到存储寄存器STCP = 0;_nop_();_nop_();STCP = 1;
}void main()
{u8 ledNum = ~0x01; // 首先点亮D0// HC595SendByte(0xff);while(1){HC595SendByte(ledNum);ledNum = _crol_(ledNum,1); // 左移,逐个点亮D0-D7Delay(50000);}
}
仿真结果:

三、 使用74HC595模块控制LED点阵对角线亮
在proteus中设计如下LED点阵,实现使用74HC595控制LED点阵对角线灯亮的功能。

代码实现如下:
/*实现功能:74HC595芯片控制LED点阵实现对角线点亮[2023-12-08] zoya
*/
#include "reg52.h"
#include "intrins.h"#define GPIO_LED P0 // LED点阵列控制IO口typedef unsigned char u8;
typedef unsigned int u16;sbit DS = P3^4; // 74HC595输入数据端口
sbit STCP = P3^5; // 74HC595存储寄存器端口,上升沿时移位寄存器进入存储寄存器
sbit SHCP = P3^6; // 74hc595移位寄存器端口,上升沿时移入数据
u8 ledNum = 0x01;// 延时函数,i=1时延时10us
void Delay(u16 i)
{while(i--);
}// 74HC595芯片将输入的串行数据转换为并行数据输出
void HC595SendByte(u8 dat)
{u8 i;STCP = 1; // 高电平时存储寄存器数据保持不变SHCP = 1; // 高电平时移位寄存器数据保持不变for(i=0;i<8;i++){DS = dat >> 7; // 每次输入最高位数据dat <<= 1; // 移位后将dat数据左移一位,保证下一次移入的数据在最高位// 实现移位寄存器的时序,需要SHCP有一个上升沿,所以先将SHCP置0,然后置1SHCP = 0;_nop_(); // 空指令,不做任何操作,当做延时使用_nop_();SHCP = 1;}// 数据已经在移位寄存器了,现在将移位寄存器的数据输出到存储寄存器// STCP上升沿时将数据从移位寄存器输出到存储寄存器STCP = 0;_nop_();_nop_();STCP = 1;
}void main()
{// 点亮LED点阵的第一个灯,P00=0,其它为1u8 dNum = ~0x01;GPIO_LED = ledNum;while(1){HC595SendByte(dNum);GPIO_LED = ledNum;Delay(200);dNum = _crol_(dNum,1);ledNum = _crol_(ledNum,1);}
}
仿真结果:

相关文章:
【51单片机系列】74HC595实现对LED点阵的控制
本文是关于LED点阵的使用,使用74HC595模块实现对LED点阵的控制。 文章目录 一、8x8LED点阵的原理1.1 LED点阵显示原理1.2 LED点阵内部结构图1.3 开发板上的LED点阵原理图1.4 74HC595芯片 二、使用74HC595模块实现流水灯效果三、 使用74HC595模块控制LED点阵对角线亮…...
Canal笔记:安装与整合Springboot模式Mysql同步Redis
官方文档 https://github.com/alibaba/canal 使用场景 学习一件东西前,要知道为什么使用它。 1、同步mysql数据到redis 常规情况下,产生数据的方法可能有很多地方,那么就需要在多个地方中,都去做mysql数据同步到redis的处理&…...
C++的继承语法
在面向对象编程中,继承是一种强大的机制,允许一个类(子类)从另一个类(父类)继承属性和方法。C是一种支持面向对象编程的编程语言,通过其灵活而强大的继承语法,开发者可以构建更加模块…...
C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件
处理PDF文件中的内容是比较麻烦的事情,特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源,我们可以通过程序提取PDF文件中的表格,并将其保存为更易于处理和分析的格式,如txt、csv、xlsx,从而更方便地对…...
spring boot学习第五篇:spring boot与JPA结合
1、准备表,创建表语句如下 CREATE TABLE girl (id int(11) NOT NULL AUTO_INCREMENT,cup_Size varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4…...
代理IP怎么使用?Mac苹果系统设置http代理IP教程
代理IP是一种通过将请求转发到另一个服务器,以隐藏自己的真实IP地址的服务器。使用代理IP可以保护您的隐私和安全,防止被跟踪或被攻击。在本文中,我们将介绍如何在Mac苹果系统上设置http代理IP教程。 一、了解代理IP 代理IP地址是一种可以用来…...
postgresql_conf中常用配置项
在 PostgreSQL 的 postgresql.conf 配置文件中,有许多常用的配置项,这些配置项可以根据特定需求和性能优化进行调整。以下是一些常用的配置项及其作用: 1. shared_buffers 用于设置 PostgreSQL 实例使用的共享内存缓冲区大小。增加此值可以…...
使用MfgTool烧写前需准备的文件
一. 简介 本文我们就来学习,如何将我们编译的 uboot,zImage(内核镜像),xxx.dtb设备树文件,还有制作的根文件系统,这四个文件烧写到开发板中,最后 开发板能正常启动。 本文这里使用…...
SAP UI5 walkthrough step4 XML Views
SAPUI5 指出多种VIEW类型,包括XML,HTML,JavaScript 推荐使用XML,因为可读性更高 我们提前介绍一下MVC架构。 MVC是一种软件架构模式,它包括三个主要组件:模型(Model)、视图(View)…...
Java 1对1
文章目录 前言 客户端 服务器端 输出线程端 End 前言 TCP(Transmission Control Protocol)是一种面向连接的、可靠的网络传输协议,它提供了端到端的数据传输和可靠性保证。 本程序就是基于tcp协议编写而成的。 利用 TCP 协议进行通信的…...
云服务器Centos中安装Docker
云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎,利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…...
人工智能教程(三):更多有用的 Python 库
目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在本系列的上一篇人工智能教程(二):人工智能的历史以及再探矩阵中,我们回顾了人工智能的历史,然后详细地讨论了矩阵。在…...
【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注,不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明: 9.10 C设计模式之单例模式设计 看过我之前的文章的,简单讲解过C/Q…...
Qt之QCache和QContiguousCache
一.QCache QCache在构造的时候指定了缓存中允许的最大成本,也就是如下构造函数中的参数maxCost。默认情况下,QCaches maxCost() 是100。 QCache(int maxCost = 100) ~QCache() void clear() bool contains(const Key &key) const int count() const bool insert(const …...
Django讲课笔记01:初探Django框架
文章目录 一、学习目标二、课程导入(一)课程简介(二)课程目标(三)适用人群(四)教学方式(五)评估方式(六)参考教材 三、新课讲授&#…...
JS中的闭包
闭包 闭包的概念其实很简单,就是函数A内部有一个函数B,函数B可以访问函数A的变量。也就是说闭包是指有权访问另一个函数作用域中变量的函数,利用闭包可以突破作用域链。 闭包的特性: 1、函数内再嵌套函数 2、内部函数可以引用外层的参数和变…...
深度学习在计算机视觉中的应用
深度学习在计算机视觉中的应用 摘要:本文介绍了深度学习在计算机视觉领域的应用,包括目标检测、图像分类、人脸识别等。通过分析深度学习在计算机视觉中的实际应用案例,阐述了深度学习在计算机视觉中的优势和未来发展趋势。 一、引言 计算…...
模板与泛型编程
函数模板 显示实例化 区别定义与声明 T是模板形参 int是模板实参 inpunt是函数形参 3是函数实参 显示实例化 模板必须实例化可见 翻译单元一处定义原则 与内联函数异同 引入原因:函数模板是为了编译器两个阶段的处理 内联函数是为了能在编译期展开 模板实参的类…...
【Fastadmin】一个完整的轮播图功能示例
目录 1.效果展示: 列表 添加及编辑页面同 2.建表: 3.使用crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示: 列表 添加及编辑页面同 2.建表: 表名:fa_x…...
Ribbon 饥饿加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
