1. 点阵LED基础:从硬件结构到点亮第一个灯
点阵LED显示屏是嵌入式项目中非常常见的输出设备,尤其是在单片机学习过程中。8x8点阵由64个LED组成,排列成矩阵形式,非常适合显示简单图形、文字和动画效果。我第一次接触点阵LED是在大学电子设计课上,当时就被这种能够动态显示图案的小模块吸引住了。
点阵的硬件结构其实很简单。左侧的8个引脚连接内部LED的阳极,上侧的8个引脚连接阴极。要想点亮某个LED,只需要给对应的阳极引脚高电平,阴极引脚低电平。比如将引脚5置高电平,引脚16置低电平,就能点亮最右下角的LED小灯。
在实际电路中,我们通常使用74HC138三八译码器来控制点阵的行选通。观察电路图可以发现,点阵左侧都连接在三极管上,由LEDC0~LEDC7控制,这些信号来自74HC138的U4模块。要开启U4,需要设置ENLED = 0和ADDR3 = 0。点阵的上侧则由74HC245电路驱动,DB0~DB7对应单片机的P0.0~P0.7引脚,所以我们通过控制P0口来控制列输出。
#include<reg52.h>
sbit LED = P0^7;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main() {
ENLED = 0;
ADDR3 = 0; // 使能U4
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 1; // 经U4的Y7输出开启三极管Q21
LED = 0;
while(1);
}
这段代码展示了如何点亮单个LED。设置好译码器地址后,将P0.7置低电平,就能点亮对应的LED。这是点阵控制的最基础操作,理解了这个原理,后续的复杂显示效果就有了基础。
2. 点阵的开启与全屏点亮技巧
掌握了单个LED的控制后,我们进一步学习如何控制整行和整个点阵。开启点阵第一排LED的代码如下:
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main() {
ENLED = 0;
ADDR3 = 0; // 开启U4
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0; // 经U4的Y1输出开启三极管Q11
P0 = 0x00; // 向P0的所有IO口写入0
while(1);
}
这里通过设置译码器地址选择第一行,然后将P0口全部置低电平,这样第一行的所有LED都会点亮。实际测试时,你会发现第一排8个LED同时发光,这就是行控制的典型应用。
但要实现全屏点亮,就需要用到动态扫描技术。因为单片机IO口驱动能力有限,无法同时点亮所有LED,所以需要通过快速轮流点亮每一行,利用人眼的视觉暂留效应形成全亮的效果:
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main() {
EA = 1;
ENLED = 0;
ADDR3 = 0; // 开启U4
TMOD = 0x01; // 开启定时器模式1
TH0 = 0xFC;
TL0 = 0x67; // 定时1ms
ET0 = 1; // 使能T0中断
TR0 = 1; // 启动T0
while(1);
}
void InterruptTimer0() interrupt 1 {
static unsigned char i = 0;
TH0 = 0xFC;
TL0 =

动画编程实战:从静态显示到动态效果&spm=1001.2101.3001.5002&articleId=156187168&d=1&t=3&u=d3ea1219b24746ff854f77948bcb4e36)
454

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



