【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案

发布于:2025-09-02 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

0案例视频效果展示

0.1例子1:8*8LED点阵循环显示数字0-9

0.2例子2:8*8LED点阵通过按钮控制显示图案

1基础知识补充

1.18*8LED点阵基础知识

1.1.1物理结构

1.1.2显示原理

1.1.3驱动方式

1.1.4字形码

1.1.5软件要点(以 AT89C51 为例)

1.1.6电源与亮度

1.1.7总结

2例子1:8*8LED点阵循环显示数字0-9

2.1电路原理图

2.1.1电路组成及接线

2.2控制程序

2.2.1控制程序步骤

2.2.3源代码

3例子2:8*8LED点阵通过按钮控制显示图案

3.1电路原理图

3.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.3源代码

  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点阵

复位电路

晶振电路

排阻

LED点阵

总线收发器

2.2控制程序

2.2.1控制程序步骤

库文件

数字(0-9)对应16进制码值

主程序

INT0中断函数

2.2.3源代码

//功能: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—>按键

复位电路

晶振电路

排阻

LED点阵

总线收发器

按键

3.2控制程序

3.2.1控制程序步骤

库文件

待显示图形编码

主程序

INT0中断控制点阵屏显示函数

INT0中断函数

3.2.3源代码

//功能:每次按下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


网站公告

今日签到

点亮在社区的每一天
去签到