基于51单片机控制的小型LED屏设计
2016-09-01蔡湘云惠州城市职业学院广东惠州516001
蔡湘云 惠州城市职业学院 广东惠州 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]邬宽明.单片机外围器件实用手册:数据传输接口器件分册.北京航空航天大学出版社