LED电子显示屏幕作为一种信息显示设备,主要用于播放广告、新闻、通知、天气预报、时间、股票信息、航班信息、售票信息等,在站牌、交通路口、公交车、售票大厅、营业大厅、等候大厅、证券公司、机场、体育、气象、交通控制等场所得到了越来越多的应用,具有广阔的应用前景。
但是,传统的LED显示屏使用有线通信方式传输数据,受到地域和布线的严重限制。如果有大量的LED显示屏同时工作,为LED显示屏传输更新的数据就成为很麻烦的事,并且在没有其他附加控制设备的情况下,LED显示屏的管理部门也无法监控LED显示屏的实际运行情况。
基于移动数据的LED显示屏使用目前覆盖范围最广、最稳定的GSM/GPRS/CDMA/小灵通网络,在任何有移动网络覆盖的地方都可实时方便地通过短消息方式更新LED显示屏的内容,有效解决了LED显示屏数据更新麻烦、无法监控的困难,减轻了管理部门的工作负担。随着移动通信技术的发展及 LED显示屏幕应用范围的进一步推广,此种基于移动数据的LED显示屏幕具有较大应用价值。
1 系统构成及原理
此种基于移动数据的LED显示屏幕系统由GSM无线收发模块、MCU(单片机)、LED驱动电路、LED显示屏幕四部分组成。原理框图如图1所示。
系统的控制中心为MCU(单片机),本设计使用ATMEL公司的AT89C51芯片,它通过串口控制GSM无线模块收发移动数据,并控制LED 驱动电路及显示屏幕将需要显示的内容用适当的方式显示出来。GSM无线收发模块使用西门子公司的TC35i,配一张市面上常见的普通SIM卡,负责接收合法用户通过移动网络发过来的显示内容,并将LED显示屏的状态数据通过移动网络回传给用户。LED驱动电路及显示屏幕与传统方式基本相同[1,2],采用具有“16 PIN 08接口”的LED单元板,可拼接成需要的屏幕尺寸。
使用时,用户只需将希望在LED屏幕上显示的内容在手机或电脑上按短信格式编辑好,然后像普通短信一样发送给插在TC35i模块中的SIM卡所对应的号码。带SIM卡的TC35i模块接收到发来的短信后,首先检查短信的发送者是否为合法用户。若不是合法用户,TC35i丢弃该短信;若是合法用户,则取出要显示的内容,并按要求的方式控制LED屏幕将信息显示出来。同时,TC35i可将LED屏幕的状态数据以短信格式发送给合法用户。如此,利用移动通信网络实现了显示内容及状态数据的双向实时传输。
考虑到简便性,本文以一块32×64点阵的LED单元板显示16×16点阵的汉字为例说明系统原理。至于更大尺寸的LED屏幕,只要将类似的多块LED单元板通过“16 PIN 08接口”依次级联即可。
2 硬件实现
2.1 TC35i模块与单片机的硬件接口电路
本系统中移动数据的收发都依靠TC35i模块进行。TC35i模块集射频电路和基带处理于一体,可工作在GSM 900 MHz和DCS 1 800 MHz两个频段,使用RS232串口与MCU(单片机)连接,其RS232数据接口符合GSM07.05和GSM07.07规范,使用标准的AT命令集。模块通过50 Ω的天线连接器连接天线,还通过40引脚的ZIF连接器实现电源和SIM卡支架的连接,以及指令、数据、语音信号及控制信号的双向传输[3]。
图2显示了单片机和TC35i接口的关键部分。
需要注意,系统加电后,为使TC35i进入工作状态,必须给IGT引脚加一延时大于100 ms的低脉冲,并且电平下降持续时间不可超过1 ms。启动后,IGT应保持高电平(3.3 V)。驱动IGT时,TC35i供电电压不能低于3.3 V,否则TC35i不能激活。另外,ZIF连接座的SIMPRES引脚用来检测SIM卡是否插好,如果连接正确,则SIMPRES引脚输出高电平,否则为低电平。
2.2 单片机及LED显示驱动电路
由于通过移动网络短消息得到的只是汉字的内码,而LED屏幕显示需要汉字的点阵信息,所以在本系统中必须存放GB2312汉字点阵字库,再加上 LED屏幕显示时需要存放大量的显示数据,所以在单片机AT89C51的外围扩展了64 KB的RAM(62256)和512 KB的Flash 存储器(29F040)。其中29F040存放点阵字库(HZK16、ASC16)和Unicode转GB2312码表,62256做显示缓存。单片机收到短消息后先把待显示信息转换成GB2312码,显示时再从29F040中读出对应点阵信息存储在62256中。
单片机P1口用于控制LED屏幕的显示,其中P1.0~P1.3脚分别输出4位行选信号A、B、C、D,ABCD从0000变到1111,逐行扫描1~16行点,将显示数据依次显示出来;P1.4脚输出移位时钟信号SHCLK,使得显示数据可以依次进入LED单元板;P1.5脚输出锁存信号 STB,使得显示数据可以稳定输出;P1.6脚输出LED单元板的上16行的显示数据R1,P1.7脚输出LED单元板的下16行的显示数据R2。
32×64点阵的LED单元板用于显示16点阵的汉字时,可以显示2行,每行4个汉字。其组成电路如图3。行驱动电路使用了2片74HC138 芯片,上、下16行的列驱动电路都使用了8片74HC595芯片。具体显示时采用动态扫描方式,单片机输出的4位行选信号A、B、C、D经2片 74HCl38译码后逐行扫描LED单元板的1~16行和17~32行;上16行的显示数据R1及下16行的显示数据R2在同一移位时钟信号SHCLK的作用下分别依次打入各自的74HC595,最后在共同锁存信号STB的作用下稳定输出在74HC595的并行输出端。
在实际制作LED单元板时,往往在74HCl38芯片输出的行扫描线上再加上4953芯片以增加驱动能力。
3 程序设计
3.1 短消息收发控制
单片机通过AT命令控制TC35i模块进行初始化和短消息的收发,对短消息的控制共有3种模式:Block模式、PDU模式和Text模式。Text模式不支持中文,而使用Block模式需要手机生产厂家提供驱动支持,本系统使用PDU模式进行短消息接收和发送。
系统上电以后首先对TC35i进行初始化,内容主要包括:
(1)设置短消息中心号码AT+CSCA=“+8613800250500”
(该号码因地区不同而设置不同)。
(2)设置短消息格式AT+CMGF=0(0代表PDU格式)。
(3)设置短消息存放的位置AT+CPMS=“SM”(SM表示将短消息存放在SIM卡中)。
(4)设置短信到达通知AT+CNMI=1,1,0,0,1。此命令可使模块在短消息到达后向单片机发送指令+CMTI:“SM”,INDEX(信息存储位置)。
系统操作过程中,单片机通过AT命令控制TC35i模块接收或发送短消息。命令格式如下:
(1)读取短消息指令AT+CMGR=INDEX。
(2)发送短消息指令AT+CMGS=。
(3)删除短消息指令AT+CMGD=INDEX。
(4)SIM卡状态查询命令AT^SCKS。
接收和发送的短消息均以PDU串的数据形式被单片机处理,PDU串由数字“0”~“9”和字母“A”~“F”组成,是十六进制数或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其他信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。发送和接收的PDU串结构不完全相同。下面用2个实例说明PDU串的结构和编排方式。
例1:接收。SMSC号码是+8613800-
250500,对方号码是13851872468,消息内容是“你好!”。单片机从TC35模块读取到的PDU串是——08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 58 81 27 64 F8 00 08 30 30 21 80 63 54 80 0*F 60 59 7D 00 21。
例2:发送。SMSC号码是+8613800-
250500,对方号码是13851872468,消息内容是“你好!”。单片机向TC35模块发出的PDU串是——08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 58 81 27 64 F8 00 08 00 0*F 60 59 7D 00 21。
3.2 LED显示控制程序
LED的动态扫描功能通过使用单片机的定时器0中断实现。定时器0计数初值的设定满足每秒中断1 000次以上,每次中断扫描显示一行,这样每行在每秒钟内至少被扫描60次以上。根据人眼的视觉暂留效应,达到了较理想的显示效果。
定时器0中断服务程序:
void int0(void) interrupt 1
{
TR0=0; //关定时器T1
TL0=0x80; //设置初值的低8位
TH0=0xff; //设置初值的高8位
TR0=1; //开定时器T1
if(i<16) //i为扫描的行号,取值0~15,
//依次扫描1~16行
{
P1_5=0; //关HC595锁存
while(z<8) //z为上下各8片HC595按
//从左到右的编号,取值0~7。
//每片HC595都经8次循环,
//实现8位数据的串/并转换
{ a=disp[i*2+k];//取上16行的8位显示数据a
b=disp[i*2+k+128]; //取下16行的8位
//显示数据b
if(z%2!=0) k+=32-1;
else k++;
while(j<8) //循环8次,将a通过P1.6
//脚依次移入上面的HC595,
//将b通过P1.7脚依次
//移入下面的HC595
{
P1_4=0; //将P1.4口线拉低,
//产生移位脉冲SHCLK
if((a&au)>0) //假串口P1.6,输出上16行
//的显示数据a
P1_6=1;
else
P1_6=0;
if((b&au)>0) //假串口P1.7,输出下16行
//的显示数据b
P1_7=1;
else
P1_7=0;
P1_4=1; //将P1.4口线置高,产生移位
//脉冲SHCLK
au=au<<1;
j++;
}
j=0;
au=0x01;
z++;
}
k=0;
z=0;
}
P1=(P1&0xf0)|i; //通过P1.0~P1.3产生4位
//行扫描信号ABCD
P1_5=1; //开595锁存
i++;
if(i==16) i=0;
}
4 PROTEUS仿真实现
本设计结合使用Keil μVision2和Proteus软件实现系统的软件设计和硬件仿真调试。
Proteus软件可以仿真包括51系列在内的多种常用单片机及其外围电路(如LCD、RAM、ROM、键盘、马达、LED等),是目前最好的模拟单片机外围器件的工具。仿真时只需在Proteus软件中画好单片机的外围控制及LED显示驱动电路,然后在单片机芯片的属性中设置好晶振频率,将用 Keil C51编写的源程序生成的.HEX文件保存到芯片中,就可以仿真调试了[4,5]。仿真过程中如有硬件问题可在Proteus ISIS中直接修改,如有软件问题可在Keil μVision2中直接修改。通过Keil与Proteus的联合调试就可以得到满意的结果,避免了一开始就直接制作实物,从而缩短了系统的开发周期,降低了开发调试成本。
在Proteus软件中没有GSM模块TC35i,但可以利用Proteus提供的串口仿真功能来实现单片机与TC35i模块通信的仿真调试。具体电路如图4所示。单片机的串口(P3.0、P3.1脚)通过串行接口器件COMPIM连接TC35i模块(图中未画出TC35i模块)。首先在仿真主机上利用虚拟串口软件VSPDXP(Virtual Serial Port Driver XP)设置出2个相互连接的虚拟串口COM3和COM4,再启动 “串口调试助手”软件,将其中的串口设置为COM4,波特率选择为4 800 b/s,然后将Proteus仿真电路中的COMPIM器件的串口设置为COM3,波特率也选择为4 800 b/s。必须注意COM3和COM4中波特率的设置值与单片机软件中的波特率设置值要相同,在此都设定为4 800 b/s,最后运行Proteus仿真,此时就可以通过“串口调试助手”软件模拟TC35i输出的数据格式向单片机发出数据了。例如,正常情况下如果从“串口调试助手”发送16进制数据串“08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 58 81 27 64 F8 00 08 30 30 21 80 63 54 80 0*F 60 59 7D 00 21”,仿真电路中的LED屏幕将显示“你好!”。而单片机发给TC35i模块的AT命令串将在“串口调试助手”的接收窗口里实时显示出来。如果不正确,则可以借助Proteus软件中的虚拟串口终端等虚拟仪器和图表进行代码级跟踪调试。
将仿真成功的电路稍加修改后,制作出电路实物,将程序固化到实物的单片机芯片中,得到的实物运行结果与Proteus的仿真结果完全一致。
基于移动数据的LED显示屏,使用移动通信网络实时更新LED显示屏的内容,避免了原有系统铺设线路或建造专用无线收发装置的麻烦,有效降低了系统成本,对远离办公场所、特别是室外LED显示屏幕的设计提供了一种新思路。同时,在开发此系统过程中,充分利用嵌入式系统软硬件设计仿真平台Proteus软件的强大功能,进行系统虚拟开发,成功后再进行实际制作,大大提高了开发效率,降低了开发成本,对单片机及嵌入式系统的开发具有实用意义。