实验六 点阵LED的图形显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六点阵LED的图形显示
一、实验目的
1.了解点阵的显示原理,掌握数模软件的使用方法。
2.进一步巩固单片机定时和中断原理在C51程序设计中的运用。
二、实验内容
通过对单片机编程来实现LED点阵的图形显示。
三、实验参考原理
3.1 点阵LED的初步认识
点阵LED显示屏作为一种现代电子媒体,具有灵活的显示面积(可分割、任意拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。
一个数码管是8个LED组成,同理,一个8*8的点阵是由64个LED小灯组成。图3-1就是一个点阵LED最小单元,一个8*8的点阵LED,图3-2是它的内部结构图。
图3-1 8*8点阵LED
3-2 8*8点阵LED结构原理图
点阵LED内部原理图如图3-2所示,图上蓝色方框外侧的就是点阵LED的引脚号,左侧的8个引脚是接的内部LED的阳极,上侧的8个引脚接的是内部LED的阴极。如果9脚是高电平,13脚是低电平的话,最左上角的那个LED小灯就会亮,用程序来实现一下,特别注意,我们现在用的74HC138是原理图上的U4。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 0;
ADDR3 = 0; //74HC138开启三极管
LED = 0; //点亮点阵的一个点
while(1); //程序停止在这里
}
同样的方法,可以点亮点阵的任意一行,74HC 138的导通点阵所用的三极管的方法和数码管很类似,那我们现在来点亮第二行整行的LED。
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 0;
ADDR3 = 0; //74HC138开启三极管
P0 = 0x00; //向P0写入0来点亮一行
while(1); //程序停止在这里
}
从这里可以发现,讲一个数码管就是8个LED小灯,一个点阵是64个LED小灯。同样的道理,还可以把一个点阵理解成8个数码管。上节课掌握了6个数码管的同时显示方法,那8个数码管,也就是点阵的8行也应该轻轻松松了,先把这个点阵全部点亮。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR3 = 0;
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0xFC;
TL0 = 0x67; //定时值初值,定时1ms
TR0 = 1; //打开定时器0
EA = 1; //打开中中断
ET0 = 1; //打开定时器0中断
while(1); //程序停止在这里,定时器运行,等待定时器中断
}
void InterruptTimer0() interrupt 1 //中断函数
{
static unsigned char j = 0;
TH0 = 0xFC; //溢出后进入中断重新赋值
TL0 = 0x67;
P0 = 0xFF; //消隐
switch(j)
{
case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; P0=0x00;break;
case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; P0=0x00;break;
case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; P0=0x00; break;
case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; P0=0x00;break;
case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; P0=0x00;break;
case 5: ADDR0=1; ADDR1=0; ADDR2=1; j++; P0=0x00;break;
case 6: ADDR0=0; ADDR1=1; ADDR2=1; j++; P0=0x00;break;
case 7: ADDR0=1; ADDR1=1; ADDR2=1; j=0; P0=0x00;break;
default: break;
} //动态刷新
}
3.2 点阵LED图形显示
LED小灯可以实现流水灯,数码管可以显示数字,那点阵LED就得来显示点花样了。
要显示花样的时候,往往要做出来一些小图形,这些小图形的数据要转换到我们的程序当中去,这个时候就需要取模软件。来给大家介绍一款简单的取模软件,这种取模软件在网上都可以下载到,大家来了解一下如何用,先看一下操作界面,如图3-3所示。
图3-3 字模提取软件界面
鼠标点一下“新建图形”,根据我们板子上的点阵,把宽度和高度分别改成8,然后点确定,如图3-4所示。