目录
[1.1.5软件要点(以 AT89C51 为例)](#1.1.5软件要点(以 AT89C51 为例))
[7 硬件工程师笔试面试相关文章链接(部分链接)](#7 硬件工程师笔试面试相关文章链接(部分链接))
摘要:本文介绍了8×8 LED点阵的基本原理与应用实例。第一部分详细讲解了8×8点阵的物理结构、显示原理(采用逐行/列扫描方式)及驱动方式(单片机直接驱动或专用驱动芯片)。第二部分展示了两个具体案例:案例1实现数字0-9的循环显示,通过定时器中断控制扫描刷新;案例2通过按键控制切换显示不同图案。两个案例均包含完整的电路原理图和单片机控制程序(基于AT89C51),程序采用中断服务程序实现快速扫描,主程序负责更新显示内容。文章提供了LED点阵的字形码表、电源设计要点及软件实现方法,具有实践指导意义。
0案例视频效果展示
0.1例子1:8*8LED点阵循环显示数字0-9
例子17:8*8LED点阵循环显示数字0-9
0.2例子2:8*8LED点阵通过按钮控制显示图案
例子:8*8LED点阵通过按钮控制显示图案
1基础知识补充
1.18*8LED点阵基础知识

1.1.1物理结构
64 只 LED 按 8 行(R0-R7)×8 列(C0-C7)排列,所有阳极接行、阴极接列(或相反)。
常见封装:1088/1388/1588 等,底部两排引脚,行、列交叉分布(需查脚位图)。
1.1.2显示原理
逐行(或逐列)扫描:
① 选通行(给高电平),其余行关闭;
② 在列线上送出该行的 8 位字形码(低电平点亮/高电平熄灭,取决于共阳/共阴)。
扫描频率≥100 Hz,利用人眼暂留得到无闪烁稳定图像。
1.1.3驱动方式
单片机直接驱动:8 条行线 + 8 条列线 = 16 IO 口(加限流电阻)。
节省 IO:
行用 74HC138(3→8 译码器),列用 74HC595(8 位移位寄存器)+ 三极管或 ULN2803 增强电流。
专用驱动 MAX7219(串行输入,集成扫描、译码、恒流)。
1.1.4字形码
每个数字 0-9 占 8 Byte(每行 1 Byte)。
共阴示例(低电平点亮):
0:0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C
1:0x10,0x18,0x10,0x10,0x10,0x10,0x10,0x7C
1.1.5软件要点(以 AT89C51 为例)
定时器 0/1 产生 1 ms 中断 → 每次中断显示 1 行,8 ms 扫描整屏。
中断里:
① 关闭所有行;
② 输出列数据(P0);
③ 打开当前行(P2);
④ 行号++ & 0x07。
主循环:
每 500 ms 把缓冲区指针移向下一个数字的字形表首地址。
1.1.6电源与亮度
单行最大电流 ≈ 160 mA(20 mA × 8 LED)。
占空比 1/8,平均电流 20 mA,可直接由单片机端口(加限流)或加三极管。
1.1.7总结
8×8 点阵就是 64 只 LED 排成棋盘,用"轮流点亮某一行(列)并送对应列(行)数据"的扫描方式,在 100 Hz 以上频率下让人眼看到完整图形。
2例子1:8*8LED点阵循环显示数字0-9
实现功能:8X8LED点阵屏循环显示数字0~9,刷新过程由定时器中断完成。
本质:利用定时器中断定时刷新8×8点阵的每一行(或列),在中断服务程序中快速逐行(列)扫描并输出对应字形码,主程序只需更新显示缓冲区内容,实现数字0~9的循环滚动。
2.1电路原理图

2.1.1电路组成及接线
|------------|----------------------------------------------------------------------------------|
| 名称 | 接线 |
| AT89C51单片机 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
| 复位电路 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
| 晶振电路 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
| 排阻 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
| LED点阵 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
| 总线收发器 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P3.0-P3.7--->LED点阵 |
2.2控制程序
2.2.1控制程序步骤
库文件
数字(0-9)对应16进制码值
主程序
INT0中断函数
2.2.3源代码
objectivec
//功能:8X8LED点阵屏循环显示数字0~9,刷新过程由定时器中断完成。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]=
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00 //9
};
uchar i=0,t=0,Num_Index;
//主程序
void main()
{
P3=0x80;
Num_Index=0; //从0开始显示
TMOD=0x00; //T0方式0
TH0=(8192-2000)/32; //2ms定时
TL0=(8192-2000)%32;
IE=0x82;
TR0=1; //启动T0
while(1);
}
//INT0中断函数
void LED_Screen_Display() interrupt 1
{
TH0=(8192-2000)/32; //恢复初值
TL0=(8192-2000)%32;
P0=0xff; //输出位码和段码
P0=~Table_of_Digits[Num_Index*8+i];
P3=_crol_(P3,1);
if(++i==8) i=0; //每屏一个数字由8个字节构成
if(++t==250) //每个数字刷新显示一段时间
{
t=0;
if(++Num_Index==10) Num_Index=0; //显示下一个数字
}
}
3例子2:8*8LED点阵通过按钮控制显示图案
实现功能:每次按下K1时,会使8X8LED点阵屏循环显示不同图形。
本质:利用定时器中断定时刷新8×8点阵的每一行(或列),在中断服务程序中快速逐行(列)扫描并输出对应字形码,主程序只需更新显示缓冲区内容,实现图案的显示。
3.1电路原理图

3.1.1电路组成及接线
|------------|----------------------------------------------------------------------------------------------|
| 名称 | 接线 |
| AT89C51单片机 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| 复位电路 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| 晶振电路 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| 排阻 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| LED点阵 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| 总线收发器 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
| 按键 | XTAL1/XTAL2--->连接晶振电路 RST--->连接复位电路 P0.0-P0.7--->总线收发器/排阻 P1.0-P1.7--->LED点阵 P3.2--->按键 |
3.2控制程序
3.2.1控制程序步骤
库文件
待显示图形编码
主程序
INT0中断控制点阵屏显示函数
INT0中断函数
3.2.3源代码
objectivec
//功能:每次按下K1时,会使8X8LED点阵屏循环显示不同图形。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//待显示图形编码
uchar code M[][8]=
{
{0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1
{0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2
{0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00} //图3
};
uchar i,j;
//主程序
void main()
{
P0=0xff;
P1=0xff;
TMOD=0x01; //T0方式1
TH0=(65536-2000)/256; //2ms定时
TL0=(65536-2000)%256;
IT0=1; //下降沿触发
IE=0x83; //允许定时器0、外部0中断
i=0xff; //i的初值设为0xff,加1后将从0开始
while(1);
}
//INT0中断控制点阵屏显示
void Show_Dot_Matrix() interrupt 1
{
TH0=(65536-2000)/256; //恢复初值
TL0=(65536-2000)%256;
P0=0xff; //输出位码和段码
P0=~M[i][j];
P1=_crol_(P1,1);
j=(j+1)%8;
}
//INT0中断(定时器由键盘中断启动)
void Key_Down() interrupt 0
{
P0=0xff;
P1=0x80;
j=0;
i=(i+1)%3; //i在0,1,2中取值,因为只要3个图形
TR0=1;
}
7 硬件工程师笔试面试相关文章链接(部分链接)
更多文章可前往主页观看
1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总------(2025版)_电容或者电感对锁存器的影响-CSDN博客
https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客
https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总------器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客
https://blog.csdn.net/XU157303764/article/details/142316204
硬件工程师笔记------电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客
https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331