LED显示屏(LED display):又叫电子显示屏或者飘字屏幕。是由LED点阵组成,通过红色或绿色灯珠的亮灭来显示文字、图片、动画、视频,内容可以随时更换,各部分组件都是模块化结构的显示器件。通常由显示模块、控制系统及电源系统组成。显示模块由LED灯组成的点阵构成,负责发光显示;控制系统通过控制相应区域的亮灭,可以让屏幕显示文字、图片、视频等内容,恒舞动卡主要是播放动画的;电源系统负责将输入电压电流转为显示屏需要的电压电流。对于LED显示屏这种主动发光体一般采用CD/平方米作为发光强度单位,并配合观察角度为辅助参数,其等效于屏体表面的照度单位勒克司;将此数值与屏体有效显示面积相乘,得到整个屏体的在最佳视角上的发光强度,假设屏体中每个像素的发光强度在相应空间内恒定,则此数值可被认为也是整个屏体的光通量。一般室外LED显示屏须达到4000CD/平方米以上的亮度才可在日光下有比较理想的显示效果。普通室内LED,最大亮度在700~2000 CD/平方米左右。 单个LED的发光强度以CD为单位,同时配有视角参数,发光强度与LED的色彩没有关系。单管的发光强度从几个mCD到五千mCD不等。LED生产厂商所给出的发光强度指LED在20mA电流下点亮,最佳视角上及中心位置上发光强度最大的点。
1 显示数据组织
大多时候需要显示的区域大于或等于实际显示的区域,相等以及小于时为静态显示,图1所示的是需要显示的区域大于实际显示的区域。为了简化问题的分析,本文将显示区域高度设置为LED显示屏高度的4倍,宽度等于LED显示屏宽度,显示屏的高度为,宽度为,则显示区域高度,宽度,扫描线条数,本文以单色显示作为描述对象,且(为输出数据宽度),如图1所示。
图1 显示区域图
对于一个LED显示屏宽度为,高度为确定后,显示屏单元板的排列方式也就被确定了,单元板相邻的两条扫描线之间的距离为,显示屏有条扫描线,分别是,,…,每行对应一位显示数据,显示屏上的每一个点对应于存储器中某个字节的某一位。各扫描线的起始位置如图1所示,条扫描线分别指向,,…,。用静态显示数据组织方法分别对显示块A、B、C、D组织显示数据[2]。首先对显示块A的显示信息进行组织:
①,即当前扫描线各行与第0列相交各点的显示数据按,,…,的顺序存储在存储器的第一个存储单元中。
②值增加1,当前扫描线各行与值对应列相交各点的显示数据存储在存储器的下一个存储单元中。
③重复第 eq oac(○,2)2步的操作,将至的个数据按顺序全部存储在存储器中。
④条扫描线向下移动一行,重复第 eq oac(○,1)1至 eq oac(○,3)3步。直到移动到行时。
⑤数据组织结束。
显示区域B、C、D,分别按照A的数据组织方式去组织显示数据。组织后的显示数据块按A、B、C、D的顺序存储在RAM0里,然后将RAM0中的显示数据块A、B、C、D按B、C、D、A的顺序拷贝到RAM1中,任何两个相邻显示块的显示数据分别在两块RAM中都有相同地址存储区域。RAM0 和RAM1的显示数据与存储器的对应关系如图2所示。
图2 数据块与存储器之间的排列图
RAM(随机存取存储器)RAM -random accessmemory随机存储器。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。现代的随机存取存储器依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0.由于电容器或多或少有漏电的情形,若不作特别处理,数据会渐渐随时间流失。刷新是指定期读取电容器的状态,然后按照原来的状态重新为电容器充电,弥补流失了的电荷。需要刷新正好解释了随机存取存储器的易失性。
采用双RAM并行输出时的几种情况,如图2所示,扫描组1从到,对应显示块A,数据已组织存放在存储器中,可以直接输出显示数据;扫描组2从到,对应显示块B也已经组织好,可以直接输出。但是扫描组3,它的位置非同一般,它的扫描线分别对应着两个块A和B,第0,1,…条扫描线分别对应显示块A扫描组1的1,2,…,,而第条扫描线对就显示块B扫描组2的第0条扫描线,如果要在显示屏上显示扫描组3对应的这一屏数据,就一定要同时使用到扫描组1的第1,2,…,条扫描线和扫描组1的第0条扫描线组织的显示数据作为输出数据。由于显示块A和B的显示数据是分别组织的,这时就要取RAM0的,,…,和RAM1的位作为输出到显示屏的位数据,这就需要在两块RAM同时输出的2位中选择需要的位作为输出数据,并且这位数据是连续的位数据。
显示步骤(在此,只考虑垂直移动显示效果):双RAM技术将显示数据输出的时候,是将两块RAM中相同地址的两个数据同时输出。所以,如果设置RAM0为主存储器,RAM1为从存储器,则将两块RAM的显示数据存在一块串行存储器中的时候,偶地址单元应存储RAM0的数据,奇地址单元存储RAM1的数据,由于数据宽度为8,所以每次输出16位数据。如果显示区域中以(,)点为显示起始点,在LED屏上显示一屏显示信息,则其数据选择控制位只与、扫描线和扫描宽度有关[3]。显示区域的起始行坐标为,一块显示区域有行,则所在的块为:
这里讨论在实际显示区域的坐标没有多大意义,只须注意在当前显示块的相对坐标,就是在当前显示块的相对纵坐标,则相对坐标为(,)。动态显示的基础是静态显示,静态显示以从特定行显示一屏为特征,当显示屏从第行开始显示信息时,因为一块显示区域有个数据,则所在块显示数据的起始地址为:
一块显示区域分为个区,如图2所示,则所在的分区记作:
一区存放有个显示数据,所以所在分区地址与所在块起始地址之间的相对偏移地址为。所以,只要知道了显示信息的起始行坐标,就能得到显示数据在存储器中的存储地址。
因为,记,表示显示信息跨越两个数据块时,需要选择的数据位数。存储器输出16位数据后,从位控制选择连续的8位数据输出到显示屏。当数据从一个字节的位开始输出16位时,如,前面8位在当前显示是多余的几位数据,后面8位数据正好是要输出到显示屏的8位数据,当这16位数据串行输出到一个8位的移位寄存器中时,移位寄存器刚好可以容纳高8位数据,并将其输出显示。之后各列数据的输出情况同样如此,不需要额外的指令或电路来对输出数据进行选择输出。
只是在每行第一列数据输出前,通过单片机模拟i个时钟脉冲输出到存储器,让输出数据产生错位,使数据从位开始输出。另外有一种情况,当显示信息刚好是A、B、C、D块中的某一块时,无须产生模拟脉冲对数据进行选择,而是直接将数据输出显示。通过分析可知,SPI模块刚好具有这个功能,通过单片机额外模拟个时钟脉冲,输出到串行存储器的时钟信号端,可以使数据错位,从指定的某一位开始输出。当显示信息跨越区间时,此时如果一场显示还没有完毕,内存地址应返回到所在块的起始地址,并从起始地址开始输出显示数据,单片机模拟的脉冲数也相应发生变化[4]。
2 LED显示屏控制系统设计
为了简化电路,提高数据输出效率,本控制系统采用RAMTRON(瑞创)公司的带SPI功能模块的VRS51L3074单片机,如图3所示。VRS51L3074单片机的时钟频率为40MHz,指令周期短,处理速度快,效率可以与ARM处理器媲美,但是ARM处理器的价格要高得多。VRS51L3074单片机工作电压在3.3V左右,但是可以兼容5V[5]。
图3 LED显示屏控制电路
2.1VRS51L3074的SPI功能模块
SPI 是英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种四线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选)。
VRS51L3074单片机的SPI时钟频率可以在范围内调整,SPI时钟频率最高可以达到20MHz[6]。当VRS51L3074作为SPI主机时,可以对SPI运行控制、配置和状态监控以及其他的一些工作环境进行设置:
配置寄存器SPICONFIG:主要对片选信号控制模式、SPI中断进行设置。
状态寄存器SPISTATUS:主要用于对SPI运行状态的监控。
传输字长寄存器SPISIZE:设置传输字长,本文设置为16位,即每次输出16位数据。
控制寄存器SPICTRL:对SPI时钟速率、时钟相位/极性、片选信号,以及SPI时钟频率进行设置。
数据寄存器SPIRXTX0~ SPIRXTX3:用于对SPI接口32位收发缓冲器的访问,对数据寄存器执行写操作是将数据送入发送缓冲器中,对数据寄存器执行读操作是从接收缓冲器中取出收到的数据。SPI接口的发送和接收缓冲器都采用双缓冲结构,从硬件上减少数据冲突并提高数据传输效率。在主模式下对SPIRXTX0寄存器执行写入操作将启动SPI传输。当传输字各行长大于8时,应最后向SPIRXTX0寄存器写入。
向串行FLASH输入控制信号和数据地址后,启动串行FLASH传输数据,在SPI时钟驱动下,输出显示数据。并且可以用单片机模拟串行FLASH时钟信号控制任意位数据输出。
2.2数据选择控制电路
设计的LED显示屏控制系统如图3所示,VRS51L3074单片机内部自带精确的40MHz振荡器,不需要外部晶振电路提供系统时钟,显示数据使用内存为16Mb的SST25VF016B,这是一款具有SPI接口的8PIN串行FLASH[7]。双RAM技术输出显示数据的时候,是将两块RAM中相同地址的两个数据同时输出,所以,将两块RAM的显示数据存放在一块串行存储器中的时候,偶地址单元应存储RAM0的数据,奇地址单元存储RAM1的数据,数据输出时,每次输出16位数据。串行存储器和单片机的工作电压都在3.3V左右,但是VRS51L3074单片机可以兼容5V,简化了控制电路。控制信号和显示数据在输出到寄存器74LS164和显示屏的时候,需要用74LVC07进行电平转换。
控制系统控制显示数据输出的流程为:
①将扫描线行地址通过P2端口的低四位送给LED显示屏。
②通过显示数据在显示区域中的位置,计算显示数据在存储器中的地址,并计算出数据选择的位数。
③通过单片机P3.0口模拟移位脉冲,输出到串行FLASH时钟信号,移位脉冲数由数据选择位数决定。使输出数据产生错位,正确的选择输出显示数据。
④启动SPI读取显示数据, SPI传输字长设置为16位。模拟脉冲已经输出到串行FLASH使数据产生了错位,输出16位数据,输出到显示屏的数据在高8位,经过移位刚好可以存放在移位寄存器中,每行第一个数据输出后,以后此行各列数据都是直接输出。
⑤16位数据输出完毕后,通过P3.1脚产生一个SCK脉冲,将移位寄存器74LS164中的数据输出移入到单元板的74HC595串行移位寄存器中。
⑥重复第 eq oac(○,4)4至 eq oac(○,5)5步,直到一行数据全部输出完毕后,由P3.2 产生一个RCK脉冲,读取的一行数据将输出显示,然后扫描线下移一行。
⑦重复第 eq oac(○,1)1至 eq oac(○,6)6步。
此电路有这样几个特点:显示数据从串行FLASH输出后,不经单片机的处理,直接以“DMA”方式输出到移位寄存器74LS164,同时实现串并转换,节省数据处理时间,提高显示效率;在每场数据输出之前,通过信息在显示区域中的地址计算数据选择位数,并通过P3.0 端口模拟个脉冲输出到串行FLASH,移出位数据,数据产生错位,使输出显示的数据在16位输出数据的高8位,可以直接存放在移位寄存器中,输出到显示屏,以后同行各列的显示数据输出时,无需再进行数据选择位的判断,直接将显示数据从存储器中输出到显示屏。
存储器效率分析:
表1 存储器效率存储器
观察表1可知,在垂直移动显示使用双RAM技术组织,大大提高了存储器效率,降低了显示数据存储器的占用。当显示信息比较大时,动态数据组织使用的存储器比较大,利用率低,而采用双RAM技术正好解决这个问题。一块RAM的效率是100%,双RAM是50%,当有N块RAM时,效率为。
3 程序设计
针对图3所示控制电路,按照数据输出控制流程,编写了一段程序,随机显示一屏信息,显示数据已按顺序存储在串行FLASH中。
Flash的前身是Future Wave公司的Future Splash,是世界上第一个商用的二维矢量动画软件,用于设计和编辑Flash文档。1996年11月,美国Macromedia公司收购了Future Wave,并将其改名为Flash.在出到Flash 8以后,Macromedia又被Adobe公司收购。最新版本为:Adobe Flash Professional CS5.5.Flash通常也指Macromedia Flash Player(现Adobe Flash Player),用于播放Flash文件。Flash被大量应用于互联网网页的矢量动画设计。 因为使用向量运算﹙Vector Graphics﹚的方式,产生出来的影片占用存储空间较小。 使用Flash创作出的影片有自己的特殊档案格式﹙swf﹚, 该公司声称全世界97%的网络浏览器都内建Flash播放器﹙Flash Player﹚ Flash是Macromedia提出的"富因特网应用"(RIA)概念的实现平台
void display(unsigned int YL)
{ unsigned int i,j,p;
unsigned char line, unit_board_num, board_i;
unsigned char code *ram_point, *block_addr,* region_addr,* ram_begin_addr;
block_addr=YL/(Bw*Sw) * (Sw*Dw); //所在块的起始地址
region_addr=(YL%Sw)*Dw; /所在区的相对块的相对地址
i=YL/Sw;
region_recod=YL%Sw; //此变量记录显示数据已进入哪一区
ram_point=ram_begin_addr+block_addr+region_addr-1; // ram_begin_addr为数据起始地址
SPI_write_read(0x03); //向串行FLASH发读命令,0x03为读控制字
SPI_write_read(((ram_point & 0xffffff)》》16)); //3字节24位地址
SPI_write_read(((ram_point & 0xffff)》》8));
SPI_write_read (ram_point & 0xff);
unit_board_num=Dw/64; //计算单元板的数量
for(p=0;p
{ SCK=0; SCK=1; }
SCK=0;
for(line=0;line
{ SPISIZE=0x0f; //设置2字节16位传输方式
for( board_i=0;board_i
{ for(j=0;j《64;j++)
{ SPIRXTX0=ACC; //启动数据传输出
while((SPISTATUS & BIT1) == 0); //等待发送(接收)完成
LED_SCK=0;LED_SCK=1; //送入单元板
} }
EN=1; //换行时暂关闭
P2=((P2&0xf0)|line);
if(region_recod》=Sw)
{ ram_point=ram_begin_addr+block_addr-1;
SPISIZE=0x07;
SPI_write_read(((ram_point & 0xffffff)》》16));
SPI_write_read(((ram_point & 0xffff)》》8));
SPI_write_read (ram_point & 0xff);
region_recod=0; i++;
if(i《=7)
for(p=0;p
{ SCK=0; SCK=1; }
SCK=0; }
RCK=1; RCK=0; //产生74HC595输出锁存信号
EN=0; } //开显示
unsigned char SPI_write_read (unsigned char Wr_Rd_Data)
{ unsigned char Temp_Flag;
SPDR= Wr_Rd_Data; //启动SPI发送或接收
do //判断发送或接收是否完成
{ Temp_Flag=SPSR&0x80;
}while(Temp_Flag!=0x80);
SPSR=SPSR&0x7F; //清SPI发送或接收完成标志
return SPDR; } //返回SPI接收到的数据
结 论
本控制系统利用串行FLASH在输出数据时的特点,最大的减少了数据处理的时间,将显示数据以"DMA"方式输出到显示屏,提高显示效率,并且弥补长条显示屏在显示信息上的不足。双RAM技术大大提高了垂直移动时的存储器使用效率,所有的数据块都是按静态显示方式组织数据,所以每一块RAM的显示数据效率都是100%,双RAM的效率为50%.
本文显示数据存放在一块FLASH中,效率也为50%,相比动态显示组织方式,降低了垂直移动时显示数据存储器的占用,提高存储效率。还可以双RAM技术为基础,扩展出多RAM方式,提高显示的高度,增加每屏显示信息,进一步提高存储效率。本系统仍有改进的空间,譬如以双RAM组织显示数据后直接用两个RAM来存放不同的数据,控制显示数据直接输出,提高输出速率。