‘壹’ 基于51单片机的LED点阵显示屏系统的设计与实现的论文
LED显示器是用发光二极管构成的显示器。构成方式有两大类:一是笔段字符式,一般又有三种:7段(/8段)数码管、15段(/17段)数码管和6段符号显示器;二是点阵字符式,一般有5×7、5×8、8×8和16×16等若干种点阵结构。为了适应不同电路的需要,根据构成LED显示器的发光二极管公共极的极性,有共阴极和共阳极两种形式。对共阴极数码管,公共阴极接地,当各段阳极上的电平为高电平时,该段接通亮,电平为0时,该段关断不亮。对共阳极数码管则刚好相反,高电平时不亮,低电平时亮。这种器件根据显示数位分类,可以分为一位、双位和多位LED显示器,一位LED显示器就称作LED数码管,两位以上的一般就称作LED显示器。
要实现LED的汉字显示在进行、列的扫描的同时还要对其进行供电,因为每行16个二极管点亮电流很大,普通芯片的输出电流远不能满足。下面为你提供实例参考
以16×16显示器为例,你可以用并行扩展芯片8255实现点阵的行扫描,8255可以将单片机一个8位并行I/O口扩展成16位(8255的PA口、PB口同时使用);列扫描的16位可以用两个TTL门74LS164(8位移位寄存器),74LS164再接ULN2803以对电流放大后再接16×16点阵。74LS164的移位触发端A、B可以接上一片的相邻输出端,Q1或Q7这样实现能实现多个芯片连续移位,以实现显示屏汉字从右到左或从左到右的移动显示功能。
由于网络知道不能插入图片,所以不提供图片了,将具体引脚接法告诉你:8255的D0--D7数据输入端接单片机P2.0--P2.7(任一并行I/O口),A0接P2.0,A1接P2.1,/WR接单片机的/WR,/RD接高电平,如果单片机资源足够,则片选端/CS接低电平;74LS164芯片的触发端A、B接到一起,与CK脚、CLK脚、随意接到单片机的I/O上。
‘贰’ 课程设计:单片机的8乘8LED点阵显示屏的设计
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]=
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9
0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff
};
uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar i=0,j=0,t=0,Num_Index,key,xi,yi;
//主程序
void main()
{
P1=0x80;
Num_Index=0; //从0 开始显示
TMOD=0x01; //T0 方式0
TH0=(65536-2000)/256; //2ms 定时
TL0=(65536-2000)%256;
IE=0x82;
key=0;
xi=0;
yi=0;
EX0=1;
IT0=1;
TR0=1; //启动T0
while(1);
}
//T0 中断函数
void ext_int0() interrupt 0
{
key++;
key&=0x03;
}
void LED_Screen_Display() interrupt 1
{
TH0=(65536-2000)/256; //2ms 定时
TL0=(65536-2000)%256;
switch(key)
{
case 0:
P0=0xff; //输出位码和段码
P0=~Table_of_Digits[Num_Index*8+i];
P1=_crol_(P1,1);
if(++i==8) i=0; //每屏一个数字由8 个字节构成
if(++t==250) //每个数字刷新显示一段时间
{
t=0;
if(++Num_Index==10) Num_Index=0; //显示下一个数字
}
break;
case 1:
P0=~xdat[xi];
P1=0xff;
P1=ydat[yi];
if(++t==250) //每个数字刷新显示一段时间
{
t=0;
yi++;
if(yi>7){yi=0;xi++;}
if(xi>7)xi=0;
}
break;
case 2:
P0=0xff; //输出位码和段码
P0=~Table_of_Digits[80+j];
if(j==0)P1=0x80;
P1=_crol_(P1,1);
if(++j==8) j=0; //每屏一个数字由8 个字节构成
break;
default:
key=0;
i=0;
j=0;
t=0;
xi=0;
yi=0;
Num_Index=0;
P0=0xff;
P1=0x80;
break;
}
}
‘叁’ 基于单片机的LED点阵显示设计
摘 要:由于普通LED点阵显示屏动态显示通常采用硬件扫描驱动,这在一些需要特殊显示的场合显得不够灵活。文中提出了一种利用PC机和单片机的通讯来实现显示屏灵活的动态显示和远程监控的设计方法,同时该方法还可以将显示内容在PC机上进行预览。 关键词:LED;动态显示;远程控制;显示预览
1引言 LED 点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。 目前大多数的LED点阵显示系统自带字库。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的局限,其特殊字符或图案也往往难以显示,同时显示内容也不能随意更改。本文提出一种利用PC机和单片机控制的LED显示系统通讯方法。该方法可以对显示内容(包括汉字和特殊图符)进行实时控制,从而实现诸如闪动、滚动、打字等多种动态显示效果。该方法同时还可以调节动态显示的速度,同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。另外,通过标准的RS232/485 转换模块还可以实现对显示系统的远程控制。2系统硬件设计 本 系统主要的硬件设计是下位机单片机的显示 控制部分。而上位机(PC机)与单片机显示控制部分的接口为标准RS232通讯方式。若需实现远程监控,只需增加RS232/485转换模块即可,该部分已有成熟的电路设计,故不再详细叙述。 具体的LED显示屏控制电路如图1所示。整个电路由单片机89C52、点阵数据存储器6264、列驱动电路ULN2803、行驱动电路TIP122、移位寄存器4094及附属电路组成。该电路所设计的电子屏可显示10个汉字,需要40个8×8 LED点阵模块,可组成16×160的矩形点阵。由于AT89C52仅有8k存储空间,而显示的内容由PC机控制,因此不可能预先把需要显示的内容做成点阵存在单片机中,而只能由PC机即时地把所需显示的点阵数据传给单片机并存入缓冲区6264。 该电路的显示采用逐行扫描方式。工作时,由单片机从缓冲区取出第一行需要显示的20字节点阵数据,再由列点阵数据输入端P1.2口按位依次串行输入至列移位寄存器,其数据输入的顺序与显示内容的顺序相反。然后置行点阵选通端P1.3为1,即置行移位寄存器的D为高电平,STR使能(所有4094的OE 引脚接+5V电平),从而使列移位寄存器中的数据同时并行输出以选通该行。经延时一段时间后再进行下一行点阵数据的显示。需要注意的是,每次只能选通一行数据,即要通过不断的逐行扫描来实现汉字或字符的显示。3显示与控制的设计 在笔者设计的PC机控制多单片机显示系统中,用PC机实现的主要功能包括单片机显示子系统的选择,显示方式选择(包括静态、闪动、滚动、打字等),滚动方向选择(包括上下滚动和左右滚动),动态显示速度调节(即文字闪动频率、滚动速度、打字显示速度等),显示内容输入及显示预览等。单片机一般通过 RS232/485串行接收PC机发出的显示指采用定时器中断方式进行行扫描,每次中断显示一行,定时中断时间为1.25ms,这样整屏的刷新率为 50Hz,因而无闪烁感。
实现动态显示速度调节的方法通常是改变定时器的中断时间,但是当显示速度很慢的时候,该方法容易使整屏的刷新率降低,从而使显示内容出现闪烁。因此,本设计采用一种“软定时”方法,即在程序中命名一变量作为“软定时器”,以用来设定两次动态显示的时间间隔。在对定时中断调用计数时,如果调用次数达到设定值,则改变显示内容。为保证能够正常显示,“软定时器”的设定值必须大于整屏显示周期。由于显示屏每行显示1.25ms,整屏显示周期为20ms,考虑到余量的情况,可将软定时器的设定值定在大于30ms。如此循环计数,即可实现动态显示。“软定时器”的设定值可以通过上位机PC机来改变,这样既可实现 LED动态显示的速度调节,又可保持显示内容的流畅和无闪烁感。3.1单片机动态显示控制 以上提到的静态、闪动、滚动和打字等4种显示方式,实际上是单片机定时中断程序进行行扫描处理的不同方法。下面将分别说明如何实现这4种显示方式。 静态显示只需在定时中断处理程序中从显示缓冲区调入相应的一行显示数据,然后选中该行即可实现该行的显示,如此循环,便可显示整个内容。闪动显示与此类似,不同的是要间隔一个“软定时器”的定时时间,在行扫描时,行移位寄存器的D端打入的全为0,可使得整屏不显示,以确保黑屏时间与显示时间相等,从而实现汉字或图符的闪动显示。 滚动显示要求需要显示的内容每隔一定时间向指定方向(这里以从右向左为例)移动一列,这样显示屏可以显示更多的内容。为此,需要在下次移动显示之前对显示缓冲区的内容进行更改,从而完成相应点阵数据的移位操作。具体操作方法是: 设置一个显示缓冲区(如图2所示),该区应包括两部分:一部分用来保存当前LED显示屏上显示的10个汉字点阵数据;另一部分为点阵数据预装载区,用来保存即将进入LED显示屏的1个汉字的点阵数据。滚动指针始终指向显示屏的最右边原点。当滚动指针移动到需要显示的点阵数据存储区的第1个汉字的首地址时,显示缓冲区LED显示区为空白,而预装载区已保存了第1个待显示汉字的点阵数据。当需要滚动显示时,则可在接下来的扫描周期的每个行扫描中断处理程序中,将对显示缓冲区的相应行点阵数据左移一位,同时更改显示缓冲区的内容。(需要注意的是,要确保该操作能在1.25ms的中断时间内完成。这里89C52采用22MHz晶振,实验证明可以实现该操作)。这样,在一个扫描周期后,整个汉字将左移一列,而显示缓冲区的内容也同时更改。由于预装载区保存了1个汉字点阵数据,即16×16点阵,所以当前显示缓冲区的内容只能移动16列。当下一个滚动到来时,滚动指针将移动到点阵数据存储区的下一个汉字的首地址,并在预装载区存入该汉字的点阵数据。然后重复执行上述操作便可实现滚动显示。特殊字符或图形的显示与此类似,这里不再赘述。
打字显示要求汉字在显示屏上按从左到右的顺序一个个的出现,如同打字的效果。设计时可采用如下方法:首先将LED显示屏对应的显示缓冲区全部清零,即 LED显示空白,然后每间隔一个“软定时器”设定的动态显示时间,显示缓冲区依次加入一个汉字点阵数据并进行扫描显示,这样就可达到打字显示的效果。3.2 PC机控制程序 a.通讯功能的实现 在Windows环境下,实现PC与单片机的通讯可利用Windows的通讯API函数或者利用VC++(或其它语言)的标准通讯函数_inp、_outp来实现。但上述两种方法比较繁琐,而采用ActiveX控件MSComm32来实现则非常方便。该控件用事件的方式简化了对串口操作的编程,并可设置串行通信的数据发送和接收,还可对串口状态及串口通信的信息格式和协议进行设置。其初始化程序如下: 一般情况下,PC要与多个单片机89C51系统进行主从式通讯,为了区分各单片机系统,可以使89C51采用串口工作方式3,即11位异步接收/发送方式,该方式的有效数据为9位,其中第9位为地址/数据信息的标志位,其作用是使从机据此判断发送的数据是否为地址,从而实现多机操作。但现在由于采用的是MSCOMM控件来实现PC机和单片机之间的通讯,这是一种标准的10位串口通信方式,即8位标准数据位和该数据的起始位、停止位各1位。因此二者格式不相符,故很难利用上述方案。因此可考虑将单片机串口设为工作方式1,即改为10位异步接收/发送方式来解决,其通讯流程如下: 首先发通信开始标志,接着发送需要操作的单片机系统地址,然后发送显示工作命令字,该命令包括2个字节,前一字节用于设定显示方式和滚动方向,后一字节则用于设定显示速度。再往下是传送显示内容的点阵数据,最后对数据进行校验。该通讯规约非常简便,能够较好的解决上述问题,从而实现PC机与多单片机之间的主从式通讯及对显示的控制。 需要注意的是,当显示内容需要改变时,为了避免在单片机串行中断接收数据时,显示屏出现乱码,应使显示屏暂不显示(处于“黑屏”状态),直到数据接收完全,串行中断处理结束时再显示。 汉字字模的提取非常关键,本文的字模数据取自UCDOS下的字库文件HZK16。关于这方面的介绍较多,文献〔2〕给出了较为具体的在VC下提取汉字字模的方案,这里不再赘述。对于特殊字符或图形点阵数据的提取,简便的方法可以先做一个BMP文件,然后用一些取模软件(如字模提取v2.1)来获得。为了显示方便,点阵数据的格式应为n×(16×8),不足要求的则应以0数据补充。 b.动态效果模拟显示 为了方便调节LED的显示效果,笔者在PC机的控制界面上设计了LED显示屏的模拟显示,它同实际的显示效果完全一样。用户可以设定显示的模式,并调节显示速度,然后在界面上对显示效果进行预览,同时还可以随时修改和设定参数,因而十分方便简捷。 为此,可先在界面上描绘出虚拟的LED显示屏,由于实际的显示屏为160×16点阵,故须在界面 上设定相同的区域。 实现动态显示效果的方法和以上几种基本类似,这里以滚动显示为例作一说明。对于需要滚动的文字,可以将其设置为位图格式,暂存于内存中,然后利用VC 提供的位图拷贝函数BitBlt将位图复制到显示位置。对于特殊字符或图形,则可以直接利用BitBlt函数调用到显示位置。然后在类CLEDDlg的 OnTimer函数中调用该函数,以实现文字的滚动显示。另外,也可以通过设定不同的响应时间间隔来改变文字的滚动速度。
汉字显示屏广泛应用与汽车报站器,广告屏等。本文介绍一种实用的汉字显示屏的制作,考虑到电路元件的易购性,没有使用8*8的点阵发光管模块, 而是直接使用了256个高量度发光管,组成了16行16列的发光点阵。同时为了降低制作难度, 仅作了一个字的轮流显示,实际使用时可根据这个原理自行扩充显示的字数。
1汉字显示的原理:
我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。即国标汉字库中的每一个字均由256点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字, 也可以显示在256像素 范围内的任何图形。
用8位的AT89C51单片机控制, 由于单片机的总线为8位,一个字需要拆分为2个部分。
软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到我们的程序中即可。
我们把行列总线接在单片机的i0口,然后把上面分析到的扫描代码送入总线, 就可以得到显示的汉字了。 在这个例子里,由于一共用到16行,16列, 如果将其全部接入89c51
单片机, 一共使用32条io口,这样造成了io资源的耗尽,系统也再无扩充的余地。 实际应用中我们使用4-16线译码器74ls154来完成列方向的显示。 而行方向16条线则接在
p0口和p2口。
程序清单:
ORG 00H
LOOP: MOV A,#0FFH ;开机初始化,清除画面
MOV P0,A ;清除P0口
ANL P2,#00 ;清除P2口
MOV R2,#200
D100MS: MOV R3,#250 ;延时100毫秒
DJNZ R3,$
DJNZ R2,D100MS
MOV 20H,#00H ;取码指针的初值
l100: MOV R1,#100 ;每个字的停留时间
L16: MOV R6,#16 ;每个字16个码
MOV R4,#00H ;扫描指针清零
MOV R0,20H ;取码指针存入R0
L3: MOV A,R4 ;扫描指针存入A
MOV P1,A ;扫描输出
INC R4 ;扫描指针加1,扫描下一个
MOV A,R0 ; 取码指针存入A
MOV DPTR,#TABLE ;取数据表的上半部分的代码
MOVC A,@A+DPTR
MOV P0,A ; 输出到P0
INC R0 ;取码指针加1,取下一个码。
MOV A,R0
MOV DPTR,#TABLE ;取数据表下半部份的代码
MOVC A,@A+DPTR
MOV P2,A ;输出到P2口
INC R0
MOV R3,#02 ;扫描1毫秒
DELAY2: MOV R5,#248 ;
DJNZ R5,$
DJNZ R3,DELAY2
MOV A,#00H ;清除屏幕
MOV P0,A
ANL P2,#00H
DJNZ R6,L3 ;一个字16个码是否完成?
DJNZ R1,L16 ;每个字的停留时间是否到了?
MOV 20H,R0 ;取码指针存入20H
CJNE R0,#0FFH,L100 ;8个字256个码是否完成?
JMP LOOP ;反复循环
TABLE :
;汉字“倚”的代码
db 01H,00H,02H,00H,04H,00H,1FH,0FFH
db 0E2H,00H,22H,00H,22H,0FCH,26H,88H
db 2AH,88H,0F2H,88H,2AH,0FAH,26H,01H
db 63H,0FEH,26H,00H,02H,00H,00H,00H
;以下分别输入天,一,出, 宝,刀,屠,龙,的代码,略。
end
电路中行方向由p0口和p2口完成扫描,由于p0口没有上拉电阻,因此接一个4.7k*8的排阻上拉。 如没有排阻,也可用8个普通的4.7k 1/8w电阻。为提供负载能力,接16个2n5551的NPN三极管驱动。
列方向则由4—16译码器74LS154完成扫描,它由89C51的P1.0---P1.3控制。同样,驱动部分则是16个2N5401的三极管完成的。
电路的供电为一片LM7805三端稳压器,耗电电流为100Ma左右。
采用一块12*20cm的万能电路板,应当选用质量好些的发光管,(否则有坏点现象, 更换起来较麻烦)首先将256个发光管插入电路板,注意插入方向,同时使高度一致,行方向直接焊接起来, 列方向则搭桥架空焊接,完成后用万用表测试一下如有不亮的更换掉。
然后找一个电脑硬盘的数据线, 截取所需的长度,分别将行,列线引出至电路的相关管脚即可。原理图为了简洁,故只画出了示意图,行列方向只画出了2个三极管,屏幕只画出4个发光管, 实际上发光管为256只,三极管行列方向各16只,一共32只。焊接过程认真仔细一天时间即可完成全部制作。将程序编译后烧写入89c51, 插入40pin Ic座,即可看到屏幕轮流显示:“倚天一出宝刀屠龙”。
当然,你可将程序的汉字代码部分更换为您所需要的代码即可显示你所需要的汉字
元件清单:
名称 数量 规格
4.7k 1/8w 32 电阻
4.7k*8排阻 1
2n5551 16 小功率NPN三极管
2n5401 16 小功率PNP三极管
led 256 3mm白发红高亮度
22P 2 瓷片电容
10uf/50v 1 电解电容
100uf/25v 2 电解电容
AT89C51 1 或AT89S51
40pin Ic座 1 插89c51用
12M 1 晶体
74LS154 1 或74HC154
LM7805 1 稳压IC
电源插座 1
稳压电源 1
‘肆’ 基于51单片机的16x16 led点阵显示屏设计原理与电路图
ORG0000H
AJMPBEGIN
ORG0030H
BEGIN:
MOVR0,#8
MAIN:
MOVA,R0
MOVR2,#00H
MOVSP,#60H
MOVR3,A
MOVR4,#16
MOVDPTR,#WORDTAB
START:
JNBP1.0,SLOW
JNBP1.1,SOON
MOVR1,#00H
SCAN8:
MOVA,R1
SWAPA
MOVP3,A
SWAPA
INCA
MOVR1,A
MOVA,R2
MOVCA,@A+DPTR
CJNEA,#0DDH,NEXT
AJMPMAIN
NEXT:
MOVP2,A
INCR2
MOVA,R2
MOVCA,@A+DPTR
MOVP0,A
INCR2
LCALLDELAY1400
MOVP0,#00H
MOVP2,#00H
DJNZR4,SCAN8
MOVR4,#16
DJNZR3,SCAN16
AJMPEND16
SCAN16:
MOVA,R2
CLRC
SUBBA,#32
MOVR2,A
AJMPSTART
END16:
INCDPTR
INCDPTR
MOVA,R2
CLRC
SUBBA,#32
MOVR2,A
MOVA,R0
MOVR3,A
AJMPSTART
SLOW:
LCALLDELAY20000
DECR0
JBP1.0,$
AJMPBACK
SOON:
LCALLDELAY20000
INCR0
JBP1.1,$
AJMPBACK
BACK:
LCALLDELAY20000
AJMPSTART
DELAY1400:;误差0us
MOVR6,#7FH
DL0:
MOVR7,#04H
DJNZR7,$
DJNZR6,DL0
RET
DELAY20000:;误差0us
MOVR6,#0D7H
DL1:
MOVR7,#2DH
DJNZR7,$
DJNZR6,DL1
NOP
NOP
RET
WORDTAB:
DB00H,1FH,80H,20H,40H,40H,20H,40H,10H,40H,08H,40H,04H,20H,02H,10H;
DB02H,10H,04H,20H,08H,40H,10H,40H,20H,40H,40H,40H,80H,20H,00H,1FH;
TAB:;结束码
DB0DDH
‘伍’ 基于单片机led点阵屏的设计需要用到哪些知识
ABSTRACT II
第1章 前言 1
1.1 LED电子显示屏概述 1
1.3 LED显示屏的应用示例 2
第2章 显示原理及控制方式分析 3
2.1 LED点阵模块结构 3
2.2 LED动态显示原理 4
2.3 LED常见的控制方式 4
第3章 方案设计与分析 7
3.1 显示单元 7
3.2 滚屏的实现 7
3.3 关于可扩展性 7
3.4 微控制器的考虑 7
3.5 关于点阵数据的存储方式 8
3.6 关于显示内容的更新 9
3.7 总体电路结构及工作原理 9
3.7.1 硬件电路框图 9
3.7.2 工作原理 11
第4章 硬件电路设计 13
4.1 显示单元电路设计 13
4.1.1 LED点阵模块的选择 13
4.1.2 列驱动电路设计 13
4.1.3 行驱动电路设计 14
4.2 单片机控制系统电路设计 15
4.2.1 单片机的选型 15
4.2.2 单片机系统电路设计 16
4.3 字库与单片机的接口设计 17
4.3.1 字库芯片选型 17
4.3.2 字库芯片的使用方法 17
4.3.3 字库芯片的电气特性 18
4.3.4 字库芯片与单片机的接口设计 19
4.3.5 字库芯片3.3V电源设计 20
4.3.6 5V-3.3V的电平转换电路设计 20