Arduino程序设计(十一)8×8 共阳极LED点阵显示(74HC595)

8×8 共阳极LED点阵显示

  • 前言
  • 一、74HC595点阵模块
    • 1、74HC595介绍
    • 2、74HC595工作原理
    • 3、1088BS介绍
    • 4、74HC595点阵模块
  • 二、点阵显示实验
    • 1、点阵显示初探
    • 2、点阵显示进阶
    • 3、点阵显示高阶
      • 3.1 点阵显示汉字(方法1)
      • 3.2 点阵显示汉字(方法2)
  • 补充


前言

  • 本文主要介绍8×8 共阳极LED点阵显示实验,分别是:
  • 1、介绍74HC595点阵模块;
  • 2、点阵显示指定行列LED;
  • 3、点阵显示汉字。

一、74HC595点阵模块

  • 由1个8x8共阳极点阵1088BS和2个74HC595组成,通过SPI方式与单片机通信。

1、74HC595介绍

  • 74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

  • (1)74HC595D引脚介绍及工作范围
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • (2)逻辑图:
    在这里插入图片描述

  • (3)时序图:
    在这里插入图片描述

  • (4)功能框图:
    在这里插入图片描述

  • 注意:74HC595的移位特性是串行输入,并行输出

2、74HC595工作原理

  • (1)74HC595引脚图

在这里插入图片描述

  • (2)74HC595D、74HC595和74HC595点阵模块的引脚对照表如下:
引脚编号74HC595D74HC59574HC595点阵模块功能介绍
15Q0QA\一位并行输出位
1~7Q1~Q7QB~QH\七位并行输出位
8GNDVSSGND电源地
9Q7’QH’\级联位,若输入位数大于8位,先进入的位会从此口连续输出,用于多片之间的级联
10MRSRCLR5V主复位,低有效,一般直接接到VCC拉高
11SH_CPSRCLKCLK移位寄存器时钟输入
12ST_CPRCLKLE存储寄存器时钟输入
13OEOEGND输出使能位,低有效,一般全程给低电平
14DSSERDI串行数据输入位
16VCCVDD5V电源5V
  • (3)74HC595工作原理介绍
    在这里插入图片描述

  • ① 在SRCLK上升沿时,来自SER的数据可以存入移位寄存器。移位寄存器只有8位,如果数据溢出,溢出的数据从QH’输出(图中用空心箭头表示)。

  • ② 在RCLK上升沿时,移位寄存器的8位数据全部传给存储寄存器(图中用虚线表示)。此时如果OE是低电平,8位数据会并行输出。

  • ③ SRCLR在低电平时可以清空移位寄存器,一般只在第一次安全上电时拉低,其它时间置高。OE在低电平时允许输出,高电平输出三态。三态既不是高电平,也不是低电平,被称为高阻态。实际应用时OE常常设为低电平。

  • ④ 假设来自于控制芯片的数据是ABCD EFGH,每个字母表示1bit数据,非0即1。那么会把高位的数字A最先存入移位寄存器,第1个数据会从QH输出,存入的第8个数据会从QA输出。

  • ⑤ QH’ 的级联作用

  • a. 应用场景:8×8 共阳极LED点阵1088BS,驱动此点阵共需要8位段选端8位位选端,共16位串行数据输入。

  • b. 移位过程:SER 的数据输入端串行输入时,在 SRCLK 的上升沿将数据移入移位寄存器内,每个 SRCLK 上升沿移入一位单bit数据,最先输入的一直向后移直到8个 SRCLK 上升沿后,移位寄存器填满,此时若数据输入端还有数据输入,下一个 SRCLK 上升沿到来时,最先输入的1bit数据就会从 QH’ 输出(此处可理解为队列,先进先出)。在RCLK的上升沿,数据会从移位寄存器进入存储寄存器中,当OE低有效时,存储寄存器中的值从 QA ~ QH 并行输出。

  • c. 级联实现:将第一片 74HC595 的 QH’ 串行输出端接到第二片的数据输入端 SER ,实现级联功能。经过16个时钟SRCLK 上升沿后,数据已经全部移位进入移位寄存器,一次共输入16位数据,那么第一位输入的串行数据会在第二片 74HC595 芯片的 QH 输出,此时给一个上升沿的 SRCLK 信号就可以将信号移入存储寄存器,OE 信号持续给低, 即可输出。

3、1088BS介绍

  • (1) LED点阵屏简介:

  • 通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏、银行窗口屏、叫号屏以及停车系统等。

  • (2) 1088BS实物图:
    在这里插入图片描述

  • (3) 内部结构:
    在这里插入图片描述
    在这里插入图片描述

  • (4) LED点阵模块共阳极和共阴极区分:

  • ① 根据其内部接线方式被分为两种:共阳极(BS)和共阴极(AS)。

  • ② 共阳极即每个LED管的阳极共接在行线上,列输入的信号为1不亮,为0亮。

  • ③ 共阴极和共阳极模块相反,每个LED管的阴极共接在行线上,列输入的信号为0不亮,为1亮。

  • ④ 一般只需根据点阵第一个引脚的极性来定义,第一个引脚为阳极则为共阳,反之则为共阴。

4、74HC595点阵模块

  • (1)74HC595点阵模块实物图:
    在这里插入图片描述
  • (2)74HC595点阵模块原理图:
    在这里插入图片描述
  • (3)引脚说明与接线
  • ① 引脚说明:
74HC595点阵模块功能说明
DI串行数据输入
LE锁存器时钟输入
CLK移位寄存器时钟输入
NC空脚,不接
VCC模块供电接口,可用单片机的5V电源口供电
GND电源地
  • ② 与Arduino UNO R3开发板接线:
74HC595点阵模块Arduino UNO R3
DID8
LED9
CLKD10
VCC5V
GNDGND

二、点阵显示实验

1、点阵显示初探

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示初探的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:点亮8*8共阳极点阵的第一个LED灯,LED位置(1,1)。

代码实现:

//8*8共阳极点阵实验
//点亮8*8共阳极点阵的第一个LED灯,LED位置(1,1)#define DIO 8      //DI
#define S_CLK 10   //CLK
#define R_CLK 9   //LEvoid setup()
{pinMode(DIO, OUTPUT);pinMode(S_CLK, OUTPUT);pinMode(R_CLK, OUTPUT);
}void loop()
{//ROW 0x80 , COL 0xfeint i, dat;//i循环次数  dat需要发送的数据dat = 0xfe;//发送列值for (i = 0; i < 8; i++) //循环8次{digitalWrite(S_CLK, LOW);digitalWrite(R_CLK, LOW);if (dat & 0x01) //发送1{ digitalWrite(DIO, HIGH);}else      //发送0{ digitalWrite(DIO, LOW);}digitalWrite(S_CLK, HIGH);dat >>= 1;//数据右移}dat = 0x80;//发送行值for (i = 0; i < 8; i++) //循环8次{digitalWrite(S_CLK, LOW);digitalWrite(R_CLK, LOW);if (dat & 0x01) //发送1{ digitalWrite(DIO, HIGH);}else      //发送0{ digitalWrite(DIO, LOW);}digitalWrite(S_CLK, HIGH);dat >>= 1;//数据右移}digitalWrite(R_CLK, HIGH);
}
  • (4)实现现象:
    在这里插入图片描述

2、点阵显示进阶

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示进阶的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:8*8共阳极点阵,点亮指定行列LED。

代码实现:

//8*8共阳极点阵实验
//8*8共阳极点阵,点亮指定行列LED#define DI 8
#define CLK 10
#define LE 9int number[16]={1,0,0,1,1,1,0,0,1,0,1,0,1,0,1,1};//列数据10011100,行数据10101011void setup()
{pinMode(DI, OUTPUT);pinMode(CLK, OUTPUT);pinMode(LE, OUTPUT);
}void loop()
{digitalWrite(LE, LOW);//存储寄存器时钟输入,串行输入数据时置0for (int i = 0; i < 16; i++){DI_data(number[i]);//先发送列数据,再发送行数据}digitalWrite(LE, HIGH);//存储寄存器时钟输入,并行输出数据时置1
}void DI_data(int num)
{digitalWrite(CLK, LOW);//移位寄存器时钟输入,CLK为低电平digitalWrite(DI, num);//串行数据输入digitalWrite(CLK, HIGH);//CLK上升沿,DI发送数据
}
  • (4)实现现象:
    在这里插入图片描述

3、点阵显示高阶

3.1 点阵显示汉字(方法1)

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示汉字(方法1) 的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:不用shiftOut函数,点阵显示汉字“中”。

代码实现:

//8*8共阳极点阵实验
//不用shiftOut函数,点阵显示汉字“中”#define DI 8
#define CLK 10
#define LE 9uint8_t ROW[8][8] = {{0, 1, 1, 1, 1, 1, 1, 1}, //第一列{1, 0, 1, 1, 1, 1, 1, 1}, //第二列{1, 1, 0, 1, 1, 1, 1, 1}, //第三列{1, 1, 1, 0, 1, 1, 1, 1}, //第四列{1, 1, 1, 1, 0, 1, 1, 1}, //第五列{1, 1, 1, 1, 1, 0, 1, 1}, //第六列{1, 1, 1, 1, 1, 1, 0, 1}, //第七列{1, 1, 1, 1, 1, 1, 1, 0}  //第八列
};uint8_t COL[8][8] = {           //汉字“中”{0, 0, 0, 1, 0, 0, 0, 0}, //第一行{0, 0, 0, 1, 0, 0, 0, 0}, //第二行{1, 1, 1, 1, 1, 1, 1, 0}, //第三行{1, 0, 0, 1, 0, 0, 1, 0}, //第四行{1, 1, 1, 1, 1, 1, 1, 0}, //第五行{0, 0, 0, 1, 0, 0, 0, 0}, //第六行{0, 0, 0, 1, 0, 0, 0, 0}, //第七行{0, 0, 0, 1, 0, 0, 0, 0}  //第八行
};void setup()
{pinMode(DI, OUTPUT);pinMode(CLK, OUTPUT);pinMode(LE, OUTPUT);
}void loop()
{for (int z = 0; z < 8; z++){ROW_COL(z);}
}void DI_data(int num)
{digitalWrite(CLK, LOW);//移位寄存器时钟输入,CLK为低电平digitalWrite(DI, num);//串行数据输入digitalWrite(CLK, HIGH);//CLK上升沿,DI发送数据
}void ROW_COL(int k)
{digitalWrite(LE, LOW);//存储寄存器时钟输入,串行输入数据时置0for (int i = 0; i < 8; i++){DI_data(ROW[k][i]);//发送列数据}for (int j = 0; j < 8; j++){DI_data(COL[k][j]);//发送行数据}digitalWrite(LE, HIGH);//存储寄存器时钟输入,并行输出数据时置1
}
  • (4)实现现象:
    在这里插入图片描述

3.2 点阵显示汉字(方法2)

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2)点阵显示汉字(方法2) 的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:用shiftOut函数,点阵显示汉字“甲”。

代码实现:

//8*8共阳极点阵实验
//用shiftOut函数,点阵显示汉字“甲”#define LE 9   
#define CLK 10 
#define DI  8  unsigned int ROW_COL[8][2] = { //汉字“甲”{0x7f, 0x00}, //第一个字节是列数据,第二个字节是行数据{0xbf, 0x7C},{0xdf, 0x54},{0xef, 0x7C},{0xf7, 0x54}, {0xfb, 0x7C}, {0xfd, 0x10}, {0xfe, 0x10}
};void setup() 
{pinMode(LE, OUTPUT);pinMode(CLK, OUTPUT);pinMode(DI, OUTPUT); 
}void loop()
{show(ROW_COL);
}void show(unsigned int a[8][2])
{ for ( int i = 0; i < 8; i++){digitalWrite(LE, LOW);for (int j = 0; j < 2; j++){shiftOut(DI, CLK, LSBFIRST, a[i][j]);//一次向移位寄存器写入一个字节(8个位)}digitalWrite(LE, HIGH);}
}
  • (4)实现现象:
    在这里插入图片描述

补充

  • 1、不推荐使用74HC595 来驱动8x8共阳点阵,由于点阵是扫描显示,所以在一定程度上来说它只能让我们只显示一个图案,如果你需要显示动图或者滚动显示,实现起来会比较麻烦,如果想实现显示动图或者滚动显示,推荐使用max7219芯片驱动8x8共阴点阵。
  • 2、shiftOut函数介绍
  • (1)参数介绍
  • shiftOut(dataPin,clockPin,bitOrder,val)
  • ① dataPin:对于arduino板,它是输出每一位数据的引脚(如某数字口),引脚需配置成输出模式。
  • ② clockPin:为位移芯片提供时钟的脚(即指arduino板上的某个数字口),当我们准备将dataPin的数据推送出去时,发送一个高电平(当然,这个引脚须配置成输出模式)。
  • ③ bitOrder:输出位的顺序,有最高位优先(MSBFIRST)和最低位优先(LSBFIRST)两种方式。
  • ④ val:所要输出的数据值,该数据值将以byte形式输出。
  • (2)与74HC595的对应关系
  • ① dataPin:自然是要对应位移芯片的DS引脚(数据引脚),需要注意的是这些数据必须在SCK引脚(SH_CP)触发上升沿的时候才会被逐位送入位移芯片(如hc595,hc164等芯片)
  • ② clockPin:对应的是位移芯片的SH_CP引脚,负责将dataPin送来的数据一位一位的送到芯片的寄存器中,每出现一个上升沿就送一位进入寄存器。
  • ③ 补充:位移芯片还有一个ST_CP引脚RCK,这个引脚负责输出芯片中已有的数据到8个输出管脚,换句话说,如果没有它的触发,芯片是不会向外输出的,它也是上升沿触发,也就是说需要一个由低到高的电平调变来触发。
  • ④ 总结:SH_CP,负责进,ST_CP负责出,不同的是SH_CP,是逐位的输入,ST_CP一次输出。

参考资料1: 点阵模块原理学习
参考资料2: 电子设计教程49:16*16LED点阵屏驱动-74HC595的原理
参考资料3: 74HC595工作原理及FPGA实现数码管驱动方法
参考资料4: 《别再找了!这是有史以来最棒的Arduino教程系列》感谢佑來老师的奉献无私!
参考资料5: Arduino+2片74hc595 驱动8x8(共阳)点阵(1008BS)
参考资料6: Arduino中shiftOut怎么用?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

conda的安装和使用

参考资料&#xff1a; https://www.bilibili.com/read/cv8956636/?spm_id_from333.999.0.0 https://www.bilibili.com/video/BV1Mv411x775/?spm_id_from333.999.0.0&vd_source98d31d5c9db8c0021988f2c2c25a9620 目录 conda是啥以及作用conda的安装conda的启动conda的配置…

2023华为杯D题——基于Kaya模型的碳排放达峰实证研究

一、前言 化石能源是推动现代经济增长的重要生产要素&#xff0c;经济生产活动与碳排放活动密切相关。充分认识经济增长与碳排放之间的关系对转变生产方式&#xff0c;确定碳达峰、碳中和路径极为必要。本研究在对经济增长与碳排放关系现有研究梳理的基础上&#xff0c;系统地分…

【二叉树魔法:链式结构与递归的纠缠】

本章重点 二叉树的链式存储二叉树链式结构的实现二叉树的遍历二叉树的节点个数以及高度二叉树的创建和销毁二叉树的优先遍历和广度优先遍历二叉树基础oj练习 1.二叉树的链式存储 二叉树的链式存储结构是指&#xff0c;用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑…

23. 图论 - 图的由来和构成

文章目录 图的由来图的构成Hi, 你好。我是茶桁。 从第一节课上到现在,我基本上把和人工智能相关的一些数学知识都教给大家了,终于来到我们人工智能数学的最后一个部分了,让我们从今天开始进入「图论」。 图论其实是一个比较有趣的领域,因为微积分其实更多的是对应连续型的…

iOS——KVC(键值编码)

键值编码&#xff08;KVC&#xff09; KVC&#xff08;Key Value Coding&#xff09;是一种允许以字符串形式间接操作对象属性的方式。 最基本的KVC是由NSKeyValueCoding协议提供支持&#xff0c;最基本的操作属性如下&#xff1a; setValue: 属性值 forKey: 属性名&#xff…

微信小程序之项目基本结构、页面的基础及宿主环境

文章目录 前言一、基本组成结构基本组成小程序页面的组成部分JSON配置文件作用 二、页面基础pagesWXML和HTML的区别WXSS和CSS的区别小程序中js文件分类 三、小程序宿主环境总结 前言 微信小程序的项目基本结构、页面的基础及宿主环境 一、基本组成结构 基本组成 新建一个微信…

迁移 MySQL 数据到 OceanBase 集群

使用 mysqldump 将 mysql的表结构和数据同步到 OceanBase 的MySQL 租户中 Mysql数据库导出 mysqldump -h127.0.0.1 -P3306 -uroot –p --single-transaction --hex-blob --routines --events --triggers --set-gtid-purgedOFF --databases teller >teller.sql mysql> …

网络编程day05(IO多路复用)

今日任务&#xff1a; TCP多路复用的客户端、服务端&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> …

网络隔离下实现的文件传输,现有的方式真的安全吗?

在当今的信息化时代&#xff0c;网络安全已经成为了各个企业和机构不可忽视的问题。为了保护内部数据和系统不受外部网络的攻击和泄露&#xff0c;一些涉及国家安全、商业机密、个人隐私等敏感信息的企业和机构&#xff0c;通常会对内外网进行隔离&#xff0c;即建立一个独立的…

Xilinx FPGA 7系列 GTX/GTH Transceivers (4) Aurora 8b10b 递增数收发验证

第一节:Xilinx FPGA 7系列 GTX/GTH Transceivers (1)–了解了GTX硬件的基础知识 第二节:IBERT GTX --通过Ibert IP测试链路通信 第三节:aurora 8b10b single lane 4byte–学习官方历程 递增数验证 自行编写data_gen和data_check 验证aurora 8b10b SFP 1.25G 收发正确。 组…

CentOS在应用程序菜单中创建快捷方式

背景&#xff1a; 在CentOS系统中&#xff0c;安装一些应用软件的时候&#xff0c;我们可能会自定义安装路径&#xff1b;这样在安装完应用程序后&#xff0c;在“Application”下&#xff0c;可能找不到对应的快捷键&#xff1b;这是就需要手动去创建跨界方式。 应用&#xf…

CNN(九):Inception v3算法实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 理论基础 Inception v3论文 Inception v3由谷歌研究员Christian Szegedy等人在2015年的论文《Rethinking the Inception Architecture f…

ubuntu samba文件共享服务器搭建

目的&#xff1a; 为了实现Android源码在ubuntu的编译&#xff0c;在windows上进行源码的修改和验证&#xff0c;需要在ubuntu系统上搭建共享文件夹&#xff0c;这里将ubuntu的/home/用户/路径下的所有内容共享&#xff0c;方法如下 ubuntu端&#xff1a; 一、samba安装 sud…

【暴力DP】CF1409 F

Problem - F - Codeforces 题意&#xff1a; 思路&#xff1a; 首先有个很明显的结论是&#xff1a;替换的字符一定是那两个字符之一 那么替换成哪个字符贡献更大不确定&#xff0c;因此考虑DP 因为有操作次数限制&#xff0c;直接把操作放进状态里 为了计算贡献&#xff…

机器学习第十一课--K-Means聚类

一.聚类的概念 K-Means算法是最经典的聚类算法&#xff0c;几乎所有的聚类分析场景&#xff0c;你都可以使用K-Means&#xff0c;而且在营销场景上&#xff0c;它就是"King"&#xff0c;所以不管从事数据分析师甚至是AI工程师&#xff0c;不知道K-Means是”不可原谅…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

Mac配置iTerm样式终端

一、MacOs系统 MacOs中终端使用iTerm2 1. 配置oh-my-zsh oh my zsh 的地址&#xff1a; https//github.com/ohmyzsh/ohmyzsh 插件存放位置&#xff1a;~/.oh-my-zsh/plugins 下载常用的插件 git clone http://github.com/zsh-users/zsh-syntax-highlighting.git 修改配…

怎么将几张图片做成pdf合在一起

怎么将几张图片做成pdf合在一起&#xff1f;在我们平时的工作中&#xff0c;图片和pdf都是非常重要的电脑文件&#xff0c;使用也非常频繁&#xff0c;图片能够更为直观的展示内容&#xff0c;而pdf则更加的正规&#xff0c;很多重要文件大多会做成pdf格式的。在职场人的日常工…

TypeError: res.data.map is not a function微信小程序报错

从数据库查&#xff1a; 调用的是&#xff1a; 访问的springboot后端是这个&#xff1a; 打印出来如下&#xff1a; 看到是json格式的数据 [Users [id3, name刘雨昕, phone18094637788, admintrue, actionsJsonadmin, createAtSat Sep 16 10:11:20 CST 2023, tokentest], User…

深入了解队列数据结构:定义、特性和实际应用

文章目录 &#x1f34b;引言&#x1f34b;队列的定义&#x1f34b;队列的实现&#x1f34b;队列的应用&#x1f34b;练习题&#x1f34b;结语 &#x1f34b;引言 队列&#xff08;Queue&#xff09;是计算机科学中一种重要的数据结构&#xff0c;它常用于各种应用程序中&#x…