蔡湘云 惠州城市职业学院 广东惠州 516001

基于51单片机控制的小型LED屏设计

蔡湘云 惠州城市职业学院 广东惠州 516001

本文设计了一种51单片机直接控制的小型LED显示屏。采用动态显示,异步扫描,数据串行输入,占用较少的接口完成控制功能。能实现显示内容水平、垂直、对角线的移动,适用于小型展示,数据内容不常变更,在生产成本上优于高端的嵌入式系统,利于节省生产成本的需求。

51单片机;小型LED显示屏;08接口

随着LED材料和工艺的不断更新, LED显示屏在短短十年内得到越来越广泛的应用,其以丰富多彩的形式在广告、证券交易、展览、交通指示等方面起到信息展示的作用。针对不同的应用场合,LED显示屏的种类繁多,大到户外播放的巨幅LED屏,小到几厘米的胸牌指示牌,他们的数据传输和电路控制的方式多样。

而伴随着LED显示屏的出现,对应的控制系统也不断更新发展,层出不穷。 LED显示屏的控制系统是基于嵌入式微处理器开发,所以单片机占有重要的一席之地。由于显示屏本身从色彩上有单色、双色、全彩等形式,在使用上还有户外、室内、大型屏、小型屏的区别,在显示上还有循环移动、覆盖、霓虹灯等效果。针对这些不同的类型需求,对控制器的运算速度、执行效率、存储容量都有不同的要求。目前,很多控制卡生产厂家采用高端嵌入式系统进行设计,这样虽然能较好的提高产品的数据处理能力,但是开发和产品成本也随之成倍的增加。

目前,单片机正在朝着高性能和多品种方向发展,而它本身具有的体积小、成本低的重要特点使它嵌入式微处理器的舞台仍受到厂家的青睐。特别在LED的小型屏上仍有广泛的应用。本文主要设计了一款基于51单片机直接控制的控制系统,主要控制对象为双基色单元板构成的LED显示屏并能实现一般的水平和垂直滚动显示。

1 LED点阵及单元板

图一 8*8LED点阵

一般的LED点阵模块由8*8个LED发光二极管方阵组成,其实物图和原理图如图一所示。只要使点阵处于正偏导通,如图即让ROW为正, COL为负则能控制对应的LED发光,通过控制对应的不同LED发光来完成各种字符和图形的显示。

显示屏一般要完成汉字符号的显示,至少需要16*16的点阵,如要完成更美观的图形文字,则可以使用更多点数的点阵。由于直接使用8*8点阵模块组合成大型显示屏,所用到的模块数量庞大,难以组装,也存在安全问题,所以LED厂商推出了组装LED显示屏的基本单元——LED单元板。通过多块单元板拼接,可以组装成不同尺寸的LED屏。本电路选用的是4块双基色64*32单元板拼接而成。

图二 单元板电路结构

2 硬件电路结构

2.1双基色单元板电路

本小型LED屏为双基色的64*32点阵,由四块单元板构成,在实际中如还需要更大的显示区域,可以在考虑单片机接口和存储空间的前提下,通过08接口扩展。一块单元板电路模块主要由32块个8*8的LED点阵、 32 块74HC595、8片4953、2片74HC138 和74HC245组成。如图二所示,图中的接口采用08接口。

在电路中,控制信号和数据信号从右端的08接口输入,在信号输入后,为了防止数据线过长,信号被衰减,所以在08接口后使用了一片用于增强信号驱动能力的芯片74HC245。电路采用的是异步显示,因此信号之后分为两部分进入控制电路。一部分是列数据信号,有RCK、 SCK、 R1、 R2,另一部分是行数据信号,有A、B、C、D、EN进入行扫描电路。如果有级联的下一个单元板,信号将再次汇入输出08接口,以供下一级联单元板使用。

2.2单元板电路原理和数据处理

本电路采用扫描方式进行显示,行信号由74HC138译码器经译码提供,但由于该芯片驱动力不足以驱动一组发光二极管,因此在输出端接上了8片4953来增强驱动能力。74HC138将A、B、 C、 D译码后产生16位输出信号,每次选通一片4953并选中其中对应的一行,如此时列信号已经送达,则此时对应行的二极管发光,显示数据。当一行显示结束后,又以同样的方法扫描下一行,全部各行都扫描一遍,就是一个扫描周期。在电路设计要考虑扫描时间要比人眼视觉暂留的临界时间短,一般要求少于18ms,就不那幺容易感觉到数据的闪烁或更替。

在列扫描中,由于单片机的接口有限,选择使用串行传输方法,利用两根信号线R和G,将列数据一位一位的传往列驱动器74HC595。数据在单片机中先由并转串,按顺序传给列驱动器,直到全部列数据传输到位,这一行的各列才能进行并行显示。由此来看,显示必须是在列数据传输完毕后才能进行,而采用串行传输的列数据准备的时间较长,有可能会拖长整个扫描周期。因此针对这一问题,采用的是重叠处理的方法,即在这一行显示的时候,下一行的列数据开始传输,因此本电路中选择了具有锁存功能的列驱动74HC595,如图三所示。

2.3电路整体设计和构成

本电路单片机采用SST89C58,工作频率为12MHz,通过08接口控制LED显示屏,如图四所示。电路结构简洁,没有扩展存储器,适用于小型的LED显示系统。显示效果丰富、成本低廉、易于控制。

3 程序数据处理和设计

本电路采用单片机直接驱动小型LED屏,为了能实现垂直、水平、对角线滚动,设定了显示区域是显示屏的4倍。如图五所示,在所示的显示区域中,以XL、YL为LED显示屏左上角原点坐标,宽度和高度分别为LW、LH,假设显示数据的起始地址为DATA_BEGIN。则可以确定坐标XL、 YL对应于扫描线Y0起始存储单元的地址L0为:

L0=DATA_BEGIN+(DH+YL)[DH]*DW+XL

此时L0存储单元中BW位分别对应于显示区域的(XL,YL)、(XL,YL+1*SW),……(XL,YL+(BW-1)*SW)共BW个点。而L0对应BW个Y,需要将LW个数据输出。其中DW:显示区域的宽度。 DH:显示区域的高度。LW:LED显示屏的宽度。LH:LED显示屏的高度。 SW:LED显示屏的扫描宽度,这里SW=16。BW:扫描线数。

部分程序设计如下:

#include<REG51.H>

#include<Test_Data.c>

#define DW 128

#define DH 64

#define LW 64

#define LH 32

#define SW 16

#define EN_ON 1

#define EN_OFF 0

sfr CTRL_PORT=0xa0;

sfr DATA_PORT0=0x80;

sbit E=P2^5;

sbit RCK=P2^6;

sbit SCK=P2^7;

//XL:数据起始地址的x坐标

YL:数据起始地址的y坐标

Display_count:每屏显示次数,可以控制移动速度,数字越大单屏显示时间越长,移动速度越慢//

void display(unsigned int XL,unsigned int YL,unsigned int display_count)

{unsigned char line;

unsign4ed char col;

unsigned char code*ram_point;

unsigned ink k ,data_begin_addr;

for(k=0;k<display_count;k++)

{for(line=0;line<SW;line++)

{data_begian addr=Display_Font;

r a m_p o i n t=d a t a_b e g i n_ addr+YL*DW+XL+line*DW;

E=EN_ON;

for(col=LW;col>0;col--)

{DATA_PORT0=*ram_point;

ram_point++;

SCK=0;sck=1;

E=EN_OFF;

RCK=0;RCK=1;

CTRL_PORT=CTRL_PORT&0xe0;

CTRL_PORT=CTRL_PORT1line;}}}

void main(void)

{unsigned int XL,YL,count=80;

display(0,0,3000);

while(1)

{for(XL=0;XL<DW/2;XL++)

display (XL,0,count); //水平右移

for(XL=DW/2;XL>0;XL--)

display (XL,0,count); //水平左移

for(YL=0;YL<DH/2;YL++)

display (0,YL, count); //垂直移动

for(YL=DH/2;YL>0;YL--)

display (0,YL, count); //垂直移动

for(XL=0;XL<LH;XL++)

display (XL*2,XL,count); //对角线移动

for(XL=LH;XL>0;XL--)

display (XL*2,XL,count); //对角线移动

for(XL=LH;XL>0;XL--)

display (XL*2,LH-XL,count); //对角线移动

for(XL=0;XL<32;XL++)

display (XL*2,LH-XL,count); } //对角线移动

//数据文件<Test_Data.c>//

unsigned char code Display_Font[128][48]={数据省略}

图三 74HC595锁存列数据

图四 电路总体结构

图五 LED显示屏显示区域

[1]王守中.51单片机开发入门与典型实例.人民邮电出版社

[2]邬宽明.单片机外围器件实用手册:数据传输接口器件分册.北京航空航天大学出版社