在前面章节,我们介绍过静态数码管和动态数码管显示,其中动态数码管是
一种应用非常多的显示设备,除此之外还有很多应用广泛的显示装置,比如 LED
点阵屏、LCD 液晶显示器等。我们开发板上使用了 64 个红色 LED 按照行列排布
组成的 8*8LED 点阵。本章就来介绍 LED 点阵的使用,通过本章的学习,让大家
能够在 8*8LED 点阵屏上显示信息。本章所要实现的功能是:在 8*8LED 点阵屏上
点亮一个点,上述功能实现后再显示数字图形等。学习本章可以参考前面的实验
章节内容。本章分为如下几部分内容:
1 LED 点阵介绍
2 硬件设计
3 软件设计
4 实验现象
1 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
点阵的使用也是非常简单的。
2 硬件设计:
本实验使用到硬件资源如下:
(
1)8*8LED 点阵模块
(
2)74HC595 模块
74HC595 模块、8*8LED 点阵模块电路在前面章节都介绍过,电路如下:
从上图中可以看出,74HC595 需要用到的控制管脚 SER、RCLK、SRCLK 直接连
接到 51 单片机的 P3.4-P3.6 IO 口上,输出端则是直接连接到 LED 点阵模块的行
端口上,即为 LED 发光二极管的阳极,LED 点阵的列则为发光二极管的阴极。
要想控制 LED 点阵,可以将单片机管脚按照 74HC595 芯片的通信时序要求来
传输数据,这样即可控制 LED 点阵的行数据。根据 LED 发光二极管导通原理,当
阳极为高电平,阴极为低电平则点亮,否则熄灭。因此通过单片机 P0 口可控制
点阵列,74HC595 可控制点阵行。
3.软件设计:
本章所要实现的功能是:在点阵屏上点亮一个点,上述功能实现后再显示数
字和图形。
代码很简单,与上一章核心代码是一样的,这里主要是理解如何让 LED 点阵
的左上角第一个点点亮,实际上就是将第一个点对应的行为高电平,列为低电平
即可。也就是让 74HC595 输出 0X80(
1000 0000),这样点阵第一行就是高电平,
而 P0 口输出 0X7F(
0111 1111),这样点阵第一列就是低电平,从而让 LED 点 阵第一个点点亮。
4.原始代码:
#include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; #define LEDDZ_COL_PORT P0 sbit SRCLK=P3^6; sbit rCLK=P3^5; sbit SER=P3^4; gsm[8]={0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80}; void delay_10us(u16 ten_us) { while(ten_us--); } void hc595_write_data(u16 dat) { u8 i=0; for(i=0;i<8;i++) { SER=dat>>7; dat<<=1; SRCLK=0; delay_10us(1); SRCLK=1; delay_10us(1); } rCLK=0; delay_10us(1); rCLK=1; } void main() { u8 i=0; //将 LED 点阵左边第一列设置为 0, //即 LED 阴极为低电平,其余列为 1, //即高电平,即0111 1111 LEDDZ_COL_PORT=0x7f; while(1) { //将 LED 点阵上边第一行设置为 1, //即 LED 阳极为高 电平,其余行为 0, //即低电平 hc595_write_data(0x80); } }
5.实验现象:
使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),
把编译后产生的.hex 文件烧入到芯片内,实现现象如下:8*8LED 点阵左上角显
示第一个点。