LED 大屏幕显示器由于其醒目、内容灵活多变等特点,已经越来越多地应用于广告、信息发布、交通指示等公共场所,取得了良好效果。LED显示屏主要分为数码显示和点阵显示两大数,本文只讨论点阵显示。目前的LED显示屏基本上都是先由用户提出要求,生产厂这根据需要订做,每次都要重复设计电路和机械结构,造成资源浪费,而且若用户的需求改变,改动将十分困难。
实际上不论显示屏的大小,其原理都是相同的,因此完全可以设计出一种标准化、模块化的LED显示屏,会对不同的需要,只需要得意组合相应的模块即可。本文介绍的就是一种模块化的LED显示屏,可以根据需要灵活改变大小,并可以脱离计算机独立运行,还可以实现如闪烁、滚动显示等特效。对整体式显示屏刷新率不足发生闪烁的常见问题,在这个设计中由于被分割成小模块,不再成为问题。
1 基本原理
基本的设计思路是把整个显示屏分成若干相同大小、相同功能的显示模块,而另外用一个中央控制模块控制,同步所有显示模块的运行,实现整体协调的显示。
所以本系统主要由两部分组成:显示模块和控制模块。
显示模块实际都是相同大小的小LED驱动板,能够驱动LED阵列,具有基本的显示功能,并可以接收来自控制模块的数据和命令,此外一些常用的显示效果如闪烁、滚动等也包括在显示模块中。现有国标点阵汉字库有16×16和24×24两种,考虑到软件编写的方便和硬件的能力,我们把显示模块作为16×16点阵大小。
控制模块负责控制各显示模块,向各显示模块发送数据和命令。控制模块储存要显示的点阵数据信息,定时向各显示模块下传。控制模块上还带有小键盘和通用异步串行口,即可以用键盘操作,也可以用计算机控制,还可以用计算机更新控制模块内的数据。
显示模块和控制模块之间用总线的方式连接,我们选用了I2C总线。
整个系统的设计使用有很大的自由度:控制模块控制的显示模块数量可以改变,显示模块的排列方式也可以改变(如16个显示模块,既可以是2×8也可以是4× 4),对同一块显示屏可以保存若干条件用信息分别显示,每条信息的点阵大小可以不同,超过屏幕大小的信息可以滚动显示出来。这样基本可以满足多种多样的需求。
2 电路结构
控制模块的原理如图1所示。
采用PIC16C73作为中央控制器。该单片机内置I2C接口、串行口,而且具有比较强的口线驱动能力(每根口线25mA),使用它可以简化很多外围电路。
数据存储使用两片EEPROM:X24256共提供64K字节的数据空间,可以反复擦除重定民,掉电数据不丢失。如果全部用来显示16×16点阵的汉字,可以显示2000个左右。数据存储器与各个显示模块共用I2C总线,依靠各自的地址区分究竟是存储器还是显示模块。
小键盘外接4个限流电阻直接接到CPU的口线上,对键盘采用4×4扫描方式。
控制模块与计算机的连接使用RS232串行口,用一片MAX202做电平转换。
此外控制模块还带有一个光强度传感器,其作用是调节显示屏的亮度。由于白天和夜晚的环境光强差异很大,白天觉得合适的亮芳到了晚上可能会很刺眠,因此根据外界的光强使用这个传感器自动调节显示屏的度。这里使用的是TI公司的TLS235光频转换元件。
每个显示模块要驱动一块16×16的LED阵列,由于单片机的口线数量少,使用静态显示是不可能的,这里使用了动态扫描显示。考虑到刷新速度的因素,使用16行扫描刷新可能会有闪烁,所以使用8行扫描、32位数据的方式。
每条数据线每个时刻只对应一个发光单元,要求电流较小;而当显示屏全开的时候,8路共阳极扫描线将会对应32个发光单元,电流要求大,所以两端的驱动电路是分别设计的。数据线端使用TI公司的4片TPIC6B595。扫描端使用Allegro公司的两片2944。
显示模块与控制模块用I2C总线相连。由于显示模块的任务只是显示,所以不另外增加存储器,只有内部的RAM单元保存欲显示的点阵数据,并不停地扫描显示到 LED阵列上。诸如滚动、闪烁等显示效果只是对显示数据做额外处理,如滚动显示实际对应数据的移位操作。这些功能也编写在显示模块中,由控制模块发送命令激活这些功能。
此外需说明的是,显示模块的驱动电路与LED阵列可以看作分离的两部分,只要在驱动电路的驱动能力范围内,可以使用发光单元不同的LED阵列,如1个发光单元仅为1个LED的小型显示牌或者1个发光单元包括5~7个LED的大型显示牌等。
3 软件设计
本系统的软件包括一个部分:显示模块、控制模块和PC机。
显示模块的软件主要包括扫描显示、特效处理和I2C通信三部分。三显示模块CPU的RAM中开辟出32字节作为显示缓冲区,扫描显示程序只是定时从显示缓冲区中取数据发往移动寄存器,并设置相对应的扫描线,实现一次扫描。扫描显示并不识别缓冲区里的数据是什么。扫描是利用了人眼的图象滞留效果,如果扫描频率达到60Hz以上,对扫描频率的波动就不大敏感了,所以这里的扫描显示程序没有使用定时器中断,仅由循环完成。
特效处理是指对扫描缓冲区的数据做移位的操作,主要对应滚动显示效果。滚动时每次滚动一个像素行或列,大部分数据已经存在于显示模块中,控制模块发送滚动命令时联合国加两个字节(1行或1列)的新数据。由于使用的扫描方式是32×8的方式,因此数据存放并非完全线性,而有跳跃存储的部分,加之字符滚动显示有上下左右四个方向,要把新来的数据移入缓冲区并移出两字节的旧数据,因而需要比较繁复的RAM地址计算。
I2C通信是PIC16C73内部硬件实现的功能,比较简单,只用中断就可实现。
显示亮度的调节功能是通过调节发光单元点亮时间实现的。具体来讲,由于是扫描显示,每个发光单元最多只有1/8的时间可以点亮,如果这1/8的时间全部点亮,其效果就是最大亮度,如果在这1/8的时间内仍有部分时间不亮,则总体的显示亮度就下降。显示模块从控制模块接收环境亮度数据,调节这个点亮时间的比例,以实现调节亮度的功能。
控制模块程序包括与显示模块的I2C通信,与EEPROM的I2C通信,与计算机的串行通信,数据的地址计算,外界光强度检测几个部分。
两个I2C通信部分和串行通信由硬件支持,比较容易。外界光强度传感器直接把光强转化成频率送入CPU,所以只要定时计数即可。比较复杂的部分是数据的地址计算。由于本系统的自由度、数据使用索引的办法在EEPROM中存储,地址计算逻辑上简单但实现起来比较繁复,要对每个显示模块发送不同的内容。对于滚动显示的情况则更加复杂。
如果是静态显示,则控制模块仅接收到命令后传送一次数据就进入空闲等待:如果是闪烁、滚动等显示,则需要定时从EEPROM中取数据发生各显示模块。
PC机部分的程序主要是点阵编辑功能和RS232通信功能。点阵编辑不仅可以写各种字体的字符,还可以绘制简单图形;RS232通信不仅包括所有可以用键盘实现的功能外,还可以直接在显示屏上显示图形而不用先保存到控制模块中,实现即时的信息发布。
本系统对常用的LED大屏幕显示装置作了规范化、模块化的有益尝试,并已应用在交通状况显示场合,取得了良好效果,证明该设计是合理可行的。由于设计时为使用保留了很大自由芳,使得它可以灵活组合运用于各种不同需求的场合,而不必重复设计,有效节约了资源。由于最初本系统对应一个比较小的显示屏,怕以选用了 I2C总线,如果要做相当大的显示零还可以换成RS485等总线,提供更大的扩展余地。此外基于这个设计思路,还可以进一步开发彩色LED大屏幕显示屏等产品。