C51点亮LED点阵屏


木易
原创
发布时间: 2025-06-09 19:55:41 | 阅读数 0收藏数 0评论数 0
封面
使用C51语言来控制LED点阵屏(也称为字符矩阵屏)显示内容是一个很好的学习项目。LED点阵屏通常由多个LED组成,可以用来显示字符、数字或简单的图形。
1

LED点阵屏介绍

LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。 LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。

  1. 点阵屏分类

LED点阵屏有单色和双色、全彩三类,可显示红,黄,绿,橙等。LED点阵有4×4、4×8、5×7、5×8、 8×8、16×16、24×24、40×40等多种;根据图素的数目分为等,双原色、三原色等,根据图素颜色的不同所显示的文字、图像等内容的颜色也不同,单原色点阵只能显示固定色彩如红、绿、黄等单色,双原色和三原色点阵显示内容的颜色由图素内不同颜色发光二极体点亮组合方式决定,如红绿都亮时可显示黄色,假如按照脉冲方式控制二极体的点亮时间,则可实现256或更高级灰度显示,即可实现真彩色显示。

2

LED点阵屏原理图

  1. LED点阵屏的结构类似于数码管,只不过是数码管每一列的像素以"8"字型排列而已。
  2. LED点阵屏与数码管一样,有共阴和共阳两种解法,不同的接法对应的电路结构不同。
  3. LED点阵屏需要进行逐行或者逐列扫描,才能使所以LED同时显示。
3

74HC595原理

74HC595是一种常用的串行至并行转换芯片,广泛应用于LED显示板等设备中。它通过三根控制线(数据输入SER, 串行时钟SERCLK, 和存储时钟RCLK或称为锁存时钟)来接收串行数据,并通过八个引脚输出并行数据。以下是对您提供的描述进行的优化:

初始化状态:

SERCLK(串行时钟)初始状态设为低电平(0),这样可以确保在没有时钟脉冲的情况下,SER(串行数据输入)上的数据不会移动。

RCLK(存储时钟/锁存时钟)初始状态也设为低电平(0),这可以确保在没有锁存信号的情况下,移位寄存器中的数据不会传输到输出缓冲区。

操作步骤:

加载数据:当需要向74HC595发送一个新的字节数据时,首先将该字节数据逐位通过SER引脚输入。每输入一位数据后,SERCLK从低电平跳变到高电平然后再回到低电平,这个过程使数据位移入移位寄存器的一位。重复此操作八次,即可完成一个字节数据的输入。

锁存数据:一旦所有八位数据都已通过串行方式进入移位寄存器,接下来需要将这些数据稳定地传输到输出端。这时,RCLK从低电平跳变到高电平然后再回到低电平,这个脉冲使移位寄存器中的数据被锁存到输出缓冲区,并在8个输出端呈现出来。

注意事项

在每次新的数据传输之前,应确保前一次的数据已经完全锁存完毕。

4

创建工程

  1. 找到keil5图标并双击运行
  2. 打开后找到Project选项点击展开下拉框,选择New Project创建工程
  3. 弹出创建新工程的窗口后,在左上角选择新建一个文件夹的位置,并将文件夹命名为“LED点阵屏”。
  4. 接下来,在指定的位置双击进入“LED点阵屏”文件夹,并将新工程命名为“Project”,然后点击保存。
  5. 在随后出现的选择目标设备窗口中,搜索框内输入“AT89C52”找到对应的芯片型号,并选中它后点击 OK
  6. 系统会询问是否要添加启动文件,这里请选择“否”。
5

创建文件并修改文件工程

  1. 打开“Target1”目录,然后定位到“SourceGroup1”目录。
  2. 在“SourceGroup1”目录上右键点击,并从上下文菜单中选择“Add New Item”。
  3. 在弹出的创建新项对话框中,选择创建一个.C文件类型,并将其命名为main.c(作为主程序)。完成命名后,点击“Add”按钮来添加此文件。
  4. 双击以打开新创建的main.c文件。
  5. 在文件编辑器中,于代码部分的右侧点击右键,选择“插入”,并在光标处输入或插入#include <REGX52.h>这一行来加入所需的头文件。
  6. 接下来,导航至项目设置中的“Options for Target”。
  7. 在“Options for Target”的设置界面里,选择“Output”选项卡。
  8. 在“Output”设置中,确保“Create HEX File”选项已被勾选。完成后,点击“OK”以保存设置更改。
6

代码实现

#include <REGX52.H>

sbit RCK=P3^5; //RCLK
sbit SCK=P3^6; //SRCLK
sbit SER=P3^4; //SER


/**
* @brief 74HC595写入一个字节
* @param Byte 要写入的字节
* @retval 无
*/
void _74HC595_WriteByte(unsigned char Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SER=Byte&(0x80>>i); // 存入缓冲区内容
SCK=1; // 往下推一位
SCK=0; // 重置状态
}
RCK=1; // 发送缓存区内容
RCK=0; // 清空缓存区
}
/**
* 延迟函数
* @param xms 毫秒值
*/
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}

/**
* @brief LED点阵屏显示一列数据
* @param Column 要选择的列,范围:0~7,0在最左边
* @param Data 选择列显示的数据,高位在上,1为亮,0为灭
* @retval 无
*/
void MatrixLED_ShowColumn(unsigned char Column,Data)
{
_74HC595_WriteByte(Data);
P0=~(0x80>>Column);
Delay(1);
P0=0xFF;
}

void main()
{
// 初始化串行时钟为0
SCK=0;
// 初始化锁存时钟为0
RCK=0;
while(1)
{
MatrixLED_ShowColumn(0,0x78);// 01111000
MatrixLED_ShowColumn(1,0x84);// 10000100
MatrixLED_ShowColumn(2,0x82);// 10000010
MatrixLED_ShowColumn(3,0x41);// 01000001
MatrixLED_ShowColumn(4,0x41);// 01000001
MatrixLED_ShowColumn(5,0x82);// 10000010
MatrixLED_ShowColumn(6,0x84);// 10000100
MatrixLED_ShowColumn(7,0x78);// 01111000
}
}
TXT
LED点阵屏实现心形代码.txt
0B
7

烧录代码

  1. 编写完成代码后,使用Rebuild构建工程,生成.HEX文件。
  2. 点击打开选择程序文件
  3. 找到LED点阵屏目录,双击进入后,点击进入Object目录,选中Project.hex文件。
  4. 点击下载/编程,断电重启才会烧写内容。
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载