51单片机———LED点阵屏显示图形动画

单片机上的一小块屏幕就是LED点阵屏,与数码管一样,内部由LED灯组成,只是点阵屏使用的LED灯更多,LED灯呈矩形分布而非“8”字形;并且点阵屏和数码管一样,有两种接法共阳极和共阳极;

16*16LED点阵屏的原理图如下:

可以看到,这种每行或每列都连接在1个I/O口的方式与矩阵键盘一样,所以我们需要进行行扫描或者逐列扫描,也就是坐标的方式,就能够点亮我们想要点亮的灯。从原理图可以看出,每一行LED都连接到POS这个网络标号上,而POS这个网络标号连接到J28和J34。行为二极管的阳极,列为二极管的阴极。

每一列LED都连接到NEG这个网络标号上, 而原理图上没有相应的I/O口对应NEG,这是为什么?———试想,如果每一行每一列都通过I/O扣进行直接控制,那么这里就需要4*8=32个I/O口。为了减少I/O口的使用,这时候就需要用到移位寄存器74HC595

串行输入并行输出:1个1个输入,多个同时发出;

SER:串行数据输入引脚(也就是我们是通过SER把数据1个1个地输入进去)

SRCLK : 移位寄存器时钟引脚,上升沿时(给高电平时),移位寄存器中的bit 数据整体后移(图                 中灰色向下箭头方向),并接受新的bit
RCLK :  存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器(图中灰色向右箭头)

整个过程就是:通过SER往里面放数据,SERCLK给高电平一次,就把数据向下移动一位,然后再往里面放入数据,就这样一直循环,直到8个数据位全部装满,RCLK赋予高电平,锁存,把8位数据同时传送出去给QA——QH(就等于给枪上八颗子弹然后同时发射出去一样)

问题来了,如果我输入第9位数据,此时第1位数据就会被挤掉,传送给QH' ,也就是多片级联,此时的QH'就充当下一个74HC595的SER,继续存入数据:

可以看到74HC595模块内有4块芯片,也就是多片级联;74HC595(C)的输出连接到 LED 点阵前 8 列,74HC595 (D)的输出连接到 LED 点阵后 8 列。图上的 NEGx 是网络标号,与 LED 点阵列相 连。74HC595 需要用到的控制管脚 RCLK、SRCLK、SER 并未直接连接到 51 单片机 的 IO 上,而是连接到 J24

所以,如果要想 51 单片机能够控制 74HC595 输出数据,就必须将单片机管脚通过 导线连接到 J24 端子上。因此需使用 3 根杜邦线将单片机的管脚与 J24 端子连接。 由于 74HC595 模块电路是独立的,所以使用任意单片机管脚都可以

我们需要下图那样通过杜邦线进行连接,也就是说单片机的三根引脚控制J24,也就是通过电脑向74HC595模块输入数据,74HC959(A)和(B)控制的是点阵屏的行,(C)和(D )控制的是点阵屏的列。所以我们只需要向模块输入4组字节,也就是利用4块芯片就能控制LED点阵屏,行是阳极应该给予高电平,列是阴极给予低电平:

那么在程序当中我们应该怎么样去给SER输入数据:

首先进行声明之后,我们创建一个名为_74HC595_WriteByte的子函数,这里子函数里面的第一步程序是为了提取出第八位数据,也就是最高位(因为我们要进行移位的操作,所以我们要从高位开始),这里可能会有疑问:SER不是位数据吗?而赋值号右端进行按位与操作得到的不是一个字节么?

按位与&是只有当两个对应位都为1时,结果才为1,否则结果为0(比如1010 0000 & 1110 0011,那么最后结果输出就是1010 0000),0x80转化为二进制是1000 0000,也就是说Byte无论是什么,其只要与0x80进行按位与操作,最后的结果只能是1000 0000 或者0000 0000,也就是只有最高位在变化,SER是位数据,赋值号右边只有不等于0,那么SER就等于1;也就是说,如果赋值号右边是1000 0000(0x80)时,SER = 1;如果赋值号右边最终结果是0000 0000时,SER= 0;就是通过这样的方式把Btye的第八位数据提取出来,第八位数据是1的话就输出1,第八位数据是0的话就输出0,接下来的Byte的每一位提取我们都使用这个方法,也就是利用到按位与的掩码操作。

单片机引脚默认高电平,所以我们需要在主函数中将Rclk置0先,才能给它高电平;

注意:这里的Rclk如果定义成RCLK就会出现重复定义的情况,因为头文件里有相应的RCLK的定义了

接下来Byte的第八位数据提取完成,我们要提取Btye的第七位数据:

如此循环,就能提取出Byte的第六位第五位第四位.....

所以我们考虑到,添加一个循环:

这样循环8次就相当于把每一位都移放好了,都放在移位寄存器里面了,接下来我们就需要使Rclk锁存,将它同时输出:

以上是输入1组数据的操作,我们需要的是输入4组数据,并且先输入顺序应是:HC595(D)—(A):

一、LED点阵(点亮一个点)

有了上述基础,点亮一个点只需要在主函数里面,把Btye1、2、3、4数据化即可:

比如我要点亮左上角的灯,也就是第一行第一列的灯,那么我需要给予第一行高电平,其余给0;第一列给低电平,其余给高电平。也就是Byte4 =1111 1111 (0xFF),Byte3= 1111 1110(0xFE),Byte 2 = 0000 0000(0x00),Byte1 = 0000 0001(0x01)

代码如下:

#include "Delay.H"sbit Rclk = P3^4;
sbit SRCLK = P3^5;
sbit SER = P3^6;void _74HC595_WriteByte(unsigned char Byte1,Byte2,Byte3,Byte4)
{unsigned char i;for(i=0;i<8;i++){SER = Byte4&(0x80>>i);//0x80右移i位,然后再与Byte进行按位与,再赋值给SERSRCLK = 1; //移位寄存器时钟上升沿将端口数据送入寄存器中Delay(10);SRCLK = 0;//复位Delay(10);}for(i=0;i<8;i++){SER = Byte3&(0x80>>i);SRCLK = 1;Delay(10);SRCLK = 0;Delay(10);}for(i=0;i<8;i++){SER = Byte2&(0x80>>i);SRCLK = 1; Delay(10);SRCLK = 0;Delay(10);}for(i=0;i<8;i++){SER = Byte1&(0x80>>i);SRCLK = 1; Delay(10);SRCLK = 0;Delay(10);}Rclk = 1; //存储寄存器时钟上升沿将数据同时输出到存储器中Rclk = 0;//复位}
void main()
{   SRCLK = 0;//单片机引脚默认高电平,先置0才能给它赋予高电平Rclk = 0; while(1){_74HC595_WriteByte(0x01,0x00,0xFE,0xFF);}}

二、LED点阵(显示数字)

有了上面的基础,我们知道点亮某一个LED很简单,点亮某一行或者某一列也很简单,只需要根据原理图给出4组字节即可,但是如果是实现不同行不同列位置“同时”点亮,是行不通的,就像数码管一样,普中的数码管不可能实现几个同时亮

要实现行列不同位置亮灯,需要使用动态显示的方法,也要结合扫描的方法。 在第一行亮灯一段时间以后灭掉,点亮第二行一段时间以后灭掉,点亮第三行一 段时间以后灭掉,如此点亮,直到八行全部点亮一次,在第一行点亮到最后一行 灭掉的总时间不能超过人肉眼可识别的时间,即 24 毫秒。在每一行点亮的时候, 给列一个新的数据,此时对应列的数据就可以体现在这行上要点亮的灯上。也就是说这里的“同时”只是通过闪烁的时间足够快,从而达到同时亮的效果。

点亮一个灯很简单,我们可以通过原理图判断出该输入什么数据给HC595,但是我如果想要显示数字/动画,我不可能一个灯一个灯地去判断应该输入什么数据,这里我们需要用到另外一个工具:

然后可以在这个 16*16 白色格子里面点击,点击后即会在对应位置出现 一个黑点,表示在 LED 点阵对应位置的 LED 灯点亮,未点击位置(白色)表 示 LED 点阵对应位置的 LED 灯熄灭


然后点击“取模方式”,选择 C51 格式选项,然后在点阵生成区自动会 生成数字字符对应的数据(如果是使用汇编编程,那么汇编对应的汉字数据可选择 A51 格式)。

这些数据其实就是上述描绘的数字 0 从上到下依次每行对应的列数据

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

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

相关文章

springboot集成tika解析word,pdf,xls文件文本内容

介绍 Apache Tika 是一个开源的内容分析工具包&#xff0c;用于从各种文档格式中提取文本和元数据。它支持多种文档类型&#xff0c;包括但不限于文本文件、HTML、PDF、Microsoft Office 文档、图像文件等。Tika 的主要功能包括内容检测、文本提取和元数据提取。 官网 https…

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

【postgresql】版本学习

PostgreSQL 17 Beta 2 发布于2024-06-27。 PostgreSQL 17 Beta 2功能和变更功能的完整列表&#xff1a;PostgreSQL: Documentation: 17: E.1. Release 17 ​ 支持的版本&#xff1a; 16 ( 当前版本) / 15 / 14 / 13 / 12 ​ 不支持的版本&#xff1a; 11 / 10 / 9.6 / 9.5 /…

WEB04MyBatis

Mybatis mybatis查询 准备 准备工作 在目前的数据库中添加一张数据表emp 将资料中提供的day04-01-mybatis导入的目前的工程中 修改配置文件中的数据库的账户和密码 观察实体类中的属性和数据表中的字段的对应关系 查询结果封装 查询所有 SQL语句 select * from emp; …

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级&#xff1a;Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一&#xff0c;其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏&#xff0c;使得社区、企业和开…

【MySQL04】【 redo 日志】

文章目录 一、前言二、redo 日志1. redo 日志格式2. Mini-Transaction2.1 以组的形式写入 redo 日志2.2 Mini-Transaction &#xff08;MTR&#xff09;概念 3. redo 日志写入过程3.1 redo 日志缓冲区3.3 redo 日志写入 log buffer 4. redo 日志文件4.1 redo 日志刷盘机制4.2 r…

2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模…

HCIA综合实验

学习新思想&#xff0c;争做新青年。今天学习的是HCIA综合实验&#xff01; 实验拓扑 实验需求 总部&#xff1a; 1、除了SW8 SW9是三层交换机&#xff0c;其他交换机均为2层交换机。 2、GW为总部的出口设备&#xff0c;使用单臂路由技术&#xff0c;VLAN10,20,100的网关都在GW…

Positron初尝试,新一代数据科学IDE(R+Python+...)

Introduction Positron&#xff08;正电子&#xff09;&#xff0c;是由 RStudio 母公司&#xff08;改名叫 Posit&#xff09;构建的下一代数据科学 IDE&#xff0c;一个可用于编写代码和探索数据的可扩展的多语言工具&#xff0c;并提供可重复创作和发布的熟悉环境。 主页&…

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

中英双语介绍英国伦敦(London)

中文版 伦敦简介 伦敦&#xff08;London&#xff09;是英国的首都&#xff0c;也是全球最重要的金融、文化、艺术和交通中心之一。作为一座历史悠久的城市&#xff0c;伦敦融合了现代化的城市生活与丰富的历史遗产。以下是对伦敦的详细介绍&#xff0c;包括其经济状况、高等…

Pandas 入门 15 题

Pandas 入门 15 题 1. 相关知识点1.1 修改DataFrame列名1.2 获取行列数1.3 显示前n行1.4 条件数据选取值1.5 创建新列1.6 删去重复的行1.7 删除空值的数据1.9 修改列名1.10 修改数据类型1.11 填充缺失值1.12 数据上下合并1.13 pivot_table透视表的使用1.14 melt透视表的使用1.1…

【学术会议征稿】第四届先进算法与神经网络国际学术会议(AANN 2024)

第四届先进算法与神经网络国际学术会议&#xff08;AANN 2024&#xff09; 2024 4th International Conference on Advanced Algorithms and Neural Networks 第四届先进算法与神经网络国际学术会议&#xff08;AANN 2024&#xff09;由中国石油大学&#xff08;华东&#x…

解决使用PPIO欧派云服务器时无法使用sftp的问题

首先在对外TCP端口中选择22端口&#xff1a; 在连接-端口映射中可以看到&#xff1a; 使用ssh连接云服务器&#xff0c;更新包列表并安装OpenSSH服务器&#xff1a; apt-get update apt-get install-y openssh-server 创建 SSH 运行目录&#xff1a; mkdir /var/run/sshd 设…

Xilinx原语

1. 原语介绍 原语是 Xilinx 器件底层硬件中的功能模块&#xff0c;它使用专用的资源来实现一系列的功能。相比于 IP 核&#xff0c;原语的调用方法更简单&#xff0c;但是一般只用于实现一些简单的功能。本章主要用到了 BUFG、 BUFIO、 IDDR、 ODDR、IDELAYE2 和 IDELAYCTRL。…

【算法 - 哈希表】两数之和

这里写自定义目录标题 两数之和题目解析思路解法一 &#xff1a;暴力枚举 依次遍历解法二 &#xff1a;使用哈希表来做优化 核心逻辑为什么之前的暴力枚举策略不太好用了&#xff1f;所以&#xff0c;这就是 这道题选择 固定一个数&#xff0c;再与其前面的数逐一对比完后&…

2024亚太杯中文赛B题洪水灾害的数据分析与预测原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024年第十四届 APMCM 亚太地区大学生数学建模竞赛B题洪水灾害的数据分析与预测的完整论文啦。 实在精力有限&#xff0c;具体的讲解大家可以去讲解视频&#xff1a; 2024亚太杯中文赛B题洪水灾害预测原创论文保姆级教…

QCustomPlot+ vs2022+ qt

零、printSupport 步骤一&#xff1a;下载QCustomPlot 访问QCustomPlot的官网 QCustomPlot 下载最新版本的源代码。 步骤二&#xff1a;配置项目 创建新的Qt项目&#xff1a; 打开VS2022&#xff0c;创建一个新的Qt Widgets Application项目。 将QCustomPlot源代码添加到项目…

【Python】 模型训练数据归一化的原理

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 在机器学习和深度学习中&#xff0c;数据归一化…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…