【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…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...