文章目录
开发板上使用了 64 个红色
LED
按照行列排布组成的
8*8 LED
点阵。下面介绍
LED
点阵的使用。
一、LED点阵介绍
LED
点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。如下所示:
通常应用较多的是 8*8
点阵,然后使用多个 8*8
点阵可组成不同分辨率的 LED
点阵显示屏,比如 16*16
点阵可以使用 4 个 8*8
点阵构成。因此理解了 8*8LED
点阵的工作原理,其他分辨率的 LED
点阵显示屏都是一样的。这里以 8*8LED
点阵来做介绍。其内部结构图如下所示:
8*8
点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置 1 电平,某一列置 0 电平,则相应的二极管就亮;如要将第一个点点亮,则 1 脚接高电平 a
脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第 1 脚要接高电平,而(a
、b
、c
、d
、e
、f
、g
、h
)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第 a
脚接低电平,而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮。由此可见,LED
点阵的使用也是非常简单的。
二、硬件设计
本实验使用到硬件资源如下:
- 8*8LED 点阵模块
- 74HC595 模块
74HC595
模块、8*8LED
点阵模块电路在前面章节都介绍过,电路如下:
从上图中可以看出,74HC595
需要用到的控制管脚 SER
、RCLK
、SRCLK
直接连接到 51 单片机的 P3.4-P3.6
IO
口上,输出端则是直接连接到 LED
点阵模块的行端口上,即为 LED
发光二极管的阳极,LED
点阵的列则为发光二极管的阴极。
要想控制 LED
点阵,可以将单片机管脚按照 74HC595
芯片的通信时序要求来传输数据,这样即可控制 LED
点阵的行数据。根据 LED
发光二极管导通原理,当阳极为高电平,阴极为低电平则点亮,否则熄灭。因此通过单片机 P0
口可控制点阵列,74HC595 可控制点阵行。
三、软件设计
本节所要实现的功能是:在点阵屏上点亮一个点,上述功能实现后再显示数字和图形。
1.LED点阵(点亮一个点)
我们直接复制前面创建好的工程模板,将复制过来的模板文件夹重新命名为“11-LED点阵实验”。打开工程直接在 main.c
源文件内进行编程,main.c
内代码如下:
/*
实验名称:LED 点阵实验(点亮一个点)
接线说明:
实验现象:下载程序后,8*8LED 点阵点亮左上角第一个点
注意事项:LED 点阵旁的 J24 黄色跳线帽短接到 GND 一端
*/
#include "reg52.h"
//对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned int u16;
//定义74HC595控制管脚
sbit SER = P3^4; //串行数据输入
sbit rCLK = P3^5; //存储寄存器时钟输入
sbit SrCLK = P3^6; //移位寄存器时钟输入
//使用宏定义点阵列控制口
#define LEDDZ_COL_PORT P0
/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
*/
void delay_10us(u16 ten_us)
{
while (ten_us--);
}
/*
函 数 名 : hc595_write_data(u8 dat)
函数功能 : 向 74HC595 写入一个字节的数据,一位一位的传输
输 入 : dat:数据
输 出 : 无
*/
void hc595_write_data(u8 dat)
{
u8 i = 0;
//循环8次将一个字节写入移位寄存器
for (i=0;i<8;i++)