本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整。
以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅)
一些内容涉及前面的知识点,可能需要提前了解(可以翻看本人之前的文章或者去B站看UP主的视频)
目录
9-1、LED点阵屏
LED点阵屏介绍
LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等
LED点阵屏分类
按颜色:
单色

双色
全彩

按像素:8*8、16*16等(大规模的LED点阵通常由很多个小点阵拼接而成)。
—— 一般设置为8的倍数。
LED点阵屏显示原理
解释内容
①LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已。
LED点阵屏示意图:

一位数码管:

②LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同。
LED点阵屏原理图(共阳接法):
双色LED点阵屏原理图(共阳接法):

当为单色LED点阵屏时,共阴接法与共阳解法区别不大(可以通过扫描转换效果);为多色LED点阵屏时,能明显体会到区别(如上图)。
Ps:
(1)共阴接法只需要将LED倒过来,更改连接的相关线即可。
(2)引脚排序为乱序排序(实物接线就近原则),因此需要对比自己单片机的原理图,避免出错。
③LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示。
Ps:扫描概念类通于矩阵键盘扫描,利用视觉暂留效果。
8×8LED连接原理图
由上图可知,LED点阵屏一侧由P0_0~P0_7的位寄存器(I/O口)控制,另一侧一侧由DPa~DPh控制,而对应的另一侧连接到74HC595中。
由图可见,74HC595可以通过P3_4~P3_6三根线控制右边八根线,由此能极大减少I/O口占用,节省I/O口。
74HC595运行原理
74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。
板子上的74HC595

原理图介绍
右侧QA~QH为八位并行的输出端。
OE(Output Enable)为输出使能,当OE接了低电平,右侧才能输出。
(上面有一横线代表低电平有效,或下降沿有效)
RCLK(register clock)为寄存器时钟。
SRCLR(serial clear)为串行清零端,低电平时会将芯片里面数据进行清空(因此这里接VCC)。
SRCLK(serial clock)为串行时钟。
SER(serial)为串行数据。
QH’用于多片级联。
在这里使用P34~P36这三个引脚控制右边八位的输出。
运行机制解释
①当串行输出时,数据在时钟的激励下一个一个从SER的线输出;
②当并行输出时,数据直接从最右侧八个引脚同时输出外面。
步骤解释:
①写入第一个数据。
首先给SER写入数值。(假设为1)
接着将SERCLK接入高电平(上升沿),此时1会被读取进移位寄存器最上面的位置。
然后将SERCLK清零,回到默认状态(低电平)。
——单片机I/O口默认状态为高电平,因此最开始需要先设置成低电平。
②写入第二个数据。
首先给SER写入设置。(假设为0)
接着将SERCLK接入高电平(上升沿),此时0会被读取进移位寄存器最上面的位置,而最开始的1会向下移动一位。
然后将SERCLK清零,回到默认状态(低电平)。
③写入接下来的数据。
重复步骤②的原理,最终写完8个位置。

④将左边数据移入右边。
将RCLK接入高电平(一开始的I/O口为高电平,因此最开始要初始化为低电平),然后左边数据就会同一时刻被搬入右边(相当于大门被打开),并同时在右侧的输出口输出数据。

补充:多片级联的运行原理
多片级联即在QH’后再相连了与之前一样的一片运行电路。
两片级联:
当第一片的移位写满之后,就会移位到QH’内(即下一片的SER),于是再写入的值,最下面的会被推入第二片区域里面,以此类推,最终将第二片填满。(两片的SERCLK是连接在同一个I/O口上的)
当填满后,即可将RCLK接入高电平,将数据一次性输出。(两片的RCLK也是连接在一个I/O口上的)
其他的多片级联
原理跟两片级联相同,只是在QH’后加入其他的74HC595芯片进行级联,数量增多了。
作用:
通过这种方式,能将I/O口扩展(节省I/O口)——3个I/O口控制多位,但是由于是一位位推入,因此运行时间将会较缓慢。
补充:
①能否LED点阵屏两端都直接连接I/O口
即使想将连接的部分都替换为I/O口直接控制,也不可行。
因为单片机的工作模式为弱上拉模式,输出的高电平信号弱,因此会使得LED亮度低,甚至不工作。
所以需要利用74HC595使得输出高电平能力增强。
或者加入一个三极管开关,使得接入高电平时,开关导通,一头的VCC直接接入LED的正极一侧。
截自视频:
导通:
如上图所示,当给高电平时,VCC直接导通到LED部分,使得LED能正常运行。
②为什么当点阵屏多个灯亮时,灯比较昏暗
因为74HC595芯片为恒压输出,当连接的灯增多时,会使得电流变小,灯亮度变暗。
9-2、LED点阵屏显示图形&动画
代码一
实现效果:在LED点阵屏上显示一个图案(这里以笑脸为例)。
写入代码
Ⅰ、新建工程及main.c文件
方法如之前一样。
补充:C51的sfr、sbit
sfr(special function register):特殊功能寄存器声明
例:sfr P0 = 0x80;
声明P0口寄存器,物理地址为0x80
sbit(special bit):特殊位声明
例:sbit P0_1 = 0x81; 或 sbit P0_1 = P0^1;
声明P0寄存器的第1位
可位寻址/不可位寻址:
在单片机系统中,操作任意寄存器或者某一位的数据时,必须给出其物理地址,又因为一个寄存器里有8位,所以位的数量是寄存器数量的8倍,单片机无法对所有位进行编码,故每8个寄存器中,只有一个是可以位寻址的。
对不可位寻址的寄存器,若要只操作其中一位而不影响其它位时,可用“&=”、“|=”、“^=”的方法进行位操作。
具体可联系定时器的部分。
在REGX52.H文件中,能看到对应的单片机位声明。
寄存器声明:
位声明:
由上面可知,将对应的地址(后面的十六进制数)赋值给P0_0口,使得P0_0代表单片机相应部分地址。——所以可以更改对应的名字,只要地址相同,作用就相同。
(这里是在主函数文件操作的,因此使用的是P3^5之类,其代表的就是对应地址数字)
Ⅱ、编写74HC595运行函数
解释SER=Byte&(0x80>>i):
利用&运算符中有0为0,全1为1的的规则,使得直接取出Byte(十六进制数,转化为二进制进行运算)的二进制中一个位数;
然后通过移位符>>,实现取出对应的位数;
最后利用单位数变量非0即1的规则,给SER赋值,实现提取对应二进制位进行赋值。

Ⅲ、将对应寄存器初始化


本文详细介绍了单片机控制LED点阵屏显示原理与实现实时时钟的方法。涵盖LED点阵屏的连接原理、显示图形动画的技术细节,以及使用DS1302芯片实现精确时钟的功能。适合初学者和有一定基础的电子爱好者学习。
最低0.47元/天 解锁文章
2535

被折叠的 条评论
为什么被折叠?



