51单片机入门 - 驱动 8x8 LED 点阵屏

news/2024/11/22 21:13:27/

硬件型号、软件版本、以及烧录流程

  • 操作系统:Windows 10 x84-64
  • 单片机:STC89C52RC
  • 编译器:SDCC
  • 烧录软件:stcgal 1.6
  • 开发板:普中51单片机开发板A2套件(2022)

在 VS Code 中新建项目到烧录的过程:

  1. 左侧EIDE图标 - 新建项目 - 空项目 - 8位MCU项目 - 保存文件夹。
  2. 更改构建配置:SDCC;更改烧录配置:stcgal
  3. 在项目文件夹下新建 src/main.c,右键 项目资源 - 添加源文件夹 - 普通文件夹,选择 src
  4. src 目录下开发,最后点击右上角 构建烧录,单片机上电,完成烧录。

LED 点阵屏

8x8 LED 点阵屏和之前用的数码管很相似,通过交叉选择的方式来减少控制引脚,从 8 ⋅ 8 = 64 8\cdot 8=64 88=64,降到了 8 + 8 = 16 8+8=16 8+8=16 个引脚,比如控制第1行、第1列对应的引脚 A1、K1 分别为 高、低 电平,那么左上角的LED就会亮起。

74HC595 串转并模块

单片机通过 IO 引脚来和外界交互,但是这些引脚比较有限,需要对引脚进行扩展,或者说把占用引脚数较多的设备通过一些方式减少引脚数量。

  1. 38译码器。如果 8 位输出在同一时间可以只需要选择其中一位置高或置低,那么一共就只有 8 个状态:0000 0001, 0000 0010, 0000 0100, 0000 1000, 0001 0000, 0010 0000, 0100 0000, 1000 0000。这样就只需要 3 个二进制位,就足以表达 3 个状态( 2 3 = 8 2^3=8 23=8),这就是38译码器,比如在控制数码管的时候,其实并不需要让它们同时亮起,只需要反复扫描刷新,超过了人眼的刷新率,就可以让它看起来是同时亮起了。
  2. 串行转并行。如果实际需求 8 位要同时独立控制,也就是 256 个状态,这是无法使用38译码器来实现的,那么可以使用串行数据转并行数据的方法,用时间换空间的思路,将输出的一段时间的连续信号通过移位寄存器存储起来,然后同时将存储的 8 个信号直接推到 8 个引脚上,也就是并行输出。

74HC595 是一个串转并模块,将接收到的串行信号,以并行的形式输出。不过它同样要占用单片机的 3 个引脚来实现这个效果。

  • SER:单片机将高/低电平输出到 SER 引脚。
  • SRCLK:模块接收到 SRCLK 的上升沿时,读取 SER 的电平作为移位寄存器的新的输入,8 位移位寄存器整体被推动一位,溢出位给到 Q H ′ QH^\prime QH(用来级联时输出到下一块 74HC595 的 SER 端)
  • RLCK:模块接收到 RLCK 的上升沿时,将当前 8 位寄存器存储的数据一并推到 8 位输出端:QA, QB, QC, QD, QE, QF, QG, QH。

文字取模

找一个文字取模软件,设置长宽,然后在上面点出想要显示的内容即可。

把按列生成的16进制数组复制下来,粘贴到代码里面。

完整代码

#include <8051.h>
#define RLCK  P3_5
#define SRCLK P3_6
#define SER   P3_4unsigned char animate[] = {0x00,0x62,0x91,0x89,0x46,0x00,0x00,0x7E,0x01,0x02,0x00,0x2F,0x00,0x00,0x32,0x49,
0x51,0x3E,0x00,0x7F,0x08,0x10,0x1F,0x00,0x10,0x7F,0x11,0x00,0x00,0x1E,0x01,0x0E,
0x01,0x1E,0x00,0x00,0x2F,0x00,0x1F,0x08,0x10,0x0F,0x00,0x06,0x09,0x09,0x7E,0x01,
0x00,0x00,};void Delay()		//@11.0592MHz
{unsigned char i;i = 200;while (--i);
}void _74HC595(unsigned char data) {for (int i = 0; i < 8; i++) {SER = data & (0x80 >> i);SRCLK = 0; // 产生上升沿,移位寄存器向下移位SRCLK = 1;}RLCK = 0;      // 产生上升沿,将寄存器的数据推到输出端RLCK = 1;
}void MatrixLED(unsigned char data, unsigned char column) {_74HC595(data);P0 = 0xFF ^ (1 << (7 - column));Delay();P0 = 0xFF;
}void main() {unsigned int cnt = 0, cnt2 = 0, offset = 5;while (1) {for (unsigned char i = 0; i < 8; i++)MatrixLED(animate[(i + offset) % 50], i);cnt++;if (cnt > 20){cnt = 0;offset = (offset + 1) % 50;}}
}

http://www.ppmy.cn/news/444367.html

相关文章

一文教你玩LED点阵屏32*64/64*64----基于STM32

以32*64点阵屏为例&#xff0c;详解LED点阵屏驱动全过程 首先要了解LED点阵屏幕的显示原理。 一般LED点阵屏在某一时间段内只能点亮某一行或者某一列&#xff0c;因为人的眼睛只有24帧速度&#xff0c;只要屏幕速度超过这个值&#xff0c;我们看到的是一个连续完整的画面。一般…

led点阵屏静态图

话不多说&#xff0c;上代码&#xff0c;前提是你已经知道各行代码的意思。跟着老师的代码走最好&#xff0c;每一行都一样&#xff0c;要不然会有意想不到的错误&#xff0c;小白阶段就不要自己创新代码了。X﹏X #include <REGX52.H> sbit RCKP3^5; //RCLK sbit SCKP3^6…

【Arduino实验11 LED点阵屏显示】

目录 一、实验目的 二、实验设备与环境 三、实验重点 四、实验难点 五、实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一、实验目的 1熟悉8*8点阵屏的原理与功能&#xff1b; 2 掌握数组变量的使用&#xff1b; 3 连接点阵屏显示电路&#x…

MCU-51:LED点阵屏

目录 一、点阵屏介绍1.1 简介1.2 分类 二、点阵屏原理2.1 点阵屏显示原理2.2 74HC595芯片介绍 三、代码演示3.1 静态笑脸3.2 动态Hello! 注意&#xff1a;一定要看 之前我们介绍了控制LED灯亮灭的操作&#xff0c;今天我们要介绍一下控制LED点阵屏亮灭的操作&#xff0c;8*8的L…

6. LED 点阵屏

点阵屏介绍 LED点阵屏由若干个独立的LED组成&#xff0c;LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽车报站器、广告屏以及公告牌等 LED点阵屏分类 按颜色&#xff1a;单色、双色、全彩 按像素&…

[入门教程]详细讲解STM32控制LED点阵屏(HUB75接口)

本文适合初级入门的同学&#xff0c;大佬请绕道。讲解怎么用stm32驱动成品LED点阵屏显示一副七色无灰度的图片&#xff0c;有灰度的图片可以入门后继续研究。 使用软硬件&#xff1a; 软件&#xff1a;Keil5&#xff0c;程序在后面会给出 硬件&#xff1a;STM32F103最小系统、…

51单片机——LED点阵屏

51单片机——LED点阵屏 LED点阵屏LED点阵屏原理74HC595串转并芯片源代码例程一&#xff1a;静态笑脸效果展示 例程二&#xff1a;笑脸->平脸->哭脸效果展示 LED点阵屏 c51的LED点阵屏其实就是一个8*8像素的屏幕&#xff0c;一共有64个发光二极管。如下图 LED点阵屏原理…

LED点阵屏相关知识与介绍

一LED点阵屏介绍&#xff1a; 1LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字&#xff0c;图片&#xff0c;视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽车报站器&#xff0c;广告屏以及公告牌等。 2LED点阵屏分类&…