LED屏

来源:互联网 发布:人工智能行业龙头股 编辑:程序博客网 时间:2024/04/28 08:51


2011-02-10 15:15:56   来源:与非网
关键字:LED显示屏 TC35i 单片机 Proteus
  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”
                     <CR>(该号码因地区不同而设置不同)。
                (2)设置短消息格式AT+CMGF=0<CR>(0代表PDU格式)。
                (3)设置短消息存放的位置AT+CPMS=“SM”<CR>(SM表示将短消息存放在SIM卡中)。
                (4)设置短信到达通知AT+CNMI=1,1,0,0,1<CR>。此命令可使模块在短消息到达后向单片机发送指令<CR>+CMTI:“SM”,INDEX(信息存储位置)<CR>。
  系统操作过程中,单片机通过AT命令控制TC35i模块接收或发送短消息。命令格式如下:
                 (1)读取短消息指令AT+CMGR=INDEX<CR>。
                 (2)发送短消息指令AT+CMGS=<length><CR>。
                 (3)删除短消息指令AT+CMGD=INDEX<CR>。
                 (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 06 4F 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 06 4F 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 06 4F 60 59 7D 00 21”,仿真电路中的LED屏幕将显示“你好!”。而单片机发给TC35i模块的AT命令串将在“串口调试助手”的接收窗口里实时显示出来。如果不正确,则可以借助Proteus软件中的虚拟串口终端等虚拟仪器和图表进行代码级跟踪调试。

  将仿真成功的电路稍加修改后,制作出电路实物,将程序固化到实物的单片机芯片中,得到的实物运行结果与Proteus的仿真结果完全一致。

  基于移动数据的LED显示屏,使用移动通信网络实时更新LED显示屏的内容,避免了原有系统铺设线路或建造专用无线收发装置的麻烦,有效降低了系统成本,对远离办公场所、特别是室外LED显示屏幕的设计提供了一种新思路。同时,在开发此系统过程中,充分利用嵌入式系统软硬件设计仿真平台Proteus软件的强大功能,进行系统虚拟开发,成功后再进行实际制作,大大提高了开发效率,降低了开发成本,对单片机及嵌入式系统的开发具有实用意义。
参考文献
[1] 诸昌钤.LED显示屏系统原理及工程技术[M].成都:电子科技大学出版社,2002.
[2] 张明波.基于单片机的点阵LED显示系统的设计[J].微计算机信息,2007,2(2):85-86.
[3] Siemens TC35i Terminal User Guide[DB/0l].http://www.siemens.com/wm.
[4] 倪升跃.Proteus——一种集单片机模拟和SPICE分析于一身的软件[J].电子世界,2004(12):38-39.
[5] 黄夙绚.Proteus与Ultra Edit、Keil的联合使用[J].无线电,2005(7):36-37.
(本文转自电子工程世界:http://www.eeworld.com.cn/wltx/2011/0210/article_3669.html)