:31020简介
点阵式电子显示屏是集微电子技术、计算机技术和信息处理技术于一体的大型显示屏系统。由于其色彩鲜艳、动态范围宽、亮度高、寿命长、工作稳定可靠,已成为许多显示媒体和户外工作显示器的理想选择。同时也可广泛应用于军事、火车站、酒店、体育、新闻、金融、证券、广告、交通等诸多行业。
目前大多数LED点阵显示系统都有自己的字体。其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动。这种方法虽然方便,但显示只能按照预先设计的进行。实际上经常会遇到一些有特殊要求的动态显示,比如电梯运行中指示箭头的上下移动,一些智能仪表的幅度的条形显示,广告中厂家的商标显示。这时,一般的显示系统很难满足要求。
另外,由于存储器本身的限制,其特殊的字符或图案往往难以显示,显示的内容也不能随意改变。介绍了一种由PC机和单片机控制的LED显示系统的通信方法。这种方法可以实时控制显示内容(包括汉字和特殊图标),从而实现闪烁、滚动、打字等各种动态显示效果。这种方法还可以调整动态显示的速度,用户可以在PC上预览显示效果,显示内容可以即时修改。此外,标准的RS232/485转换模块还可以实现显示系统的远程控制。
2、系统硬件设计
本系统的主要硬件设计是下位机单片机的显示控制部分。上位机(PC)与单片机显示控制部分的接口是标准的RS232通信方式。如果需要远程监控,只需要RS232/485转换模块。这部分有成熟的电路设计,就不赘述了。
具体的LED显示控制电路如图1所示。整个电路由单片机89C52、点阵数据存储器6264、列驱动电路ULN2803、行驱动电路TIP122、移位寄存器4094及辅助电路组成。用该电路设计的电子屏幕可以显示10个汉字,需要40个88的LED点阵模块,组成一个16160的矩形点阵。由于AT89C52只有8k的存储空间,而且显示的内容是由PC机控制的,所以无法事先将显示的内容做成点阵存储在单片机中,只有PC机可以将点阵数据即时传送给单片机,存储在缓冲区6264中。
电路的显示采用逐行扫描方式。工作时,MCU从缓存中取出第一行20字节的待显示点阵数据,然后通过列点阵数据输入端的端口P1.2串行输入到列移位寄存器,数据输入的顺序与显示内容的顺序相反。然后将行点阵选通端P1.3置1,即行移位寄存器的D置高电平,STR使能(4094的所有OE引脚都接+5V电平),这样就可以同时并行输出列移位寄存器中的数据来选通该行。延迟一段时间后,将显示下一行点阵数据。需要注意的是,一次只能选通一行数据,即汉字或字符的显示要通过连续的逐行扫描来实现。
3、显示和控制的设计
在设计的PC机控制的多单片机显示系统中,PC机实现的主要功能包括单片机显示子系统的选择、显示方式(包括静态、闪烁、滚动、打字等。)、滚动方向(包括上下滚动和左右滚动)、动态显示速度调整(即文字闪烁频率、滚动速度、打字显示速度等。),显示内容输入和显示预览等。一般情况下,单片机通过RS232/485串口接收PC机的显示,即通过定时器中断进行行扫描。每次中断显示一行,定时中断时间为1.25毫秒
动态显示速度调整的方法通常是改变定时器的中断时间,但当显示速度很慢时,这种方法容易降低整个屏幕的刷新率,从而导致显示内容闪烁。因此,本设计采用了软计时方法,即变量被命名为软定时器在程序中设置两次动态显示之间的时间间隔。在对定时中断调用进行计数时,如果调用次数达到设定值,显示内容将会改变。为保证正常显示,将软定时器必须长于全屏显示周期。因为显示器的每行显示1。25ms,整个显示周期为20ms,考虑到余量,软定时器的设定值可以设置在30ms以上。这样的循环计数可以实现动态显示。软定时器可通过PC改变,既能调节LED动态显示的速度,又能保持显示内容流畅无闪烁。
3.1 MCU动态显示控制
上面提到的静态显示、闪烁显示、滚动显示、打字显示四种显示方式,实际上是周期性中断单片机程序进行行扫描处理的不同方法。下面将说明如何实现这四种显示模式。
对于静态显示,只需要在定时器中断处理程序中从显示缓冲区调入相应的一行显示数据,然后选择该行显示。这种循环可以显示全部内容。闪烁是相似的,除了一个软定时器应该分开。行扫描时,在行移位寄存器的D端输入全零,可以使整个屏幕不显示,保证黑屏时间等于显示时间,从而实现汉字或图标的闪烁显示。
滚动要求要显示的内容每隔一定间隔向指定方向(这里以从右向左为例)移动一列,显示屏才能显示更多的内容。因此,在下次移动显示器之前,需要改变显示缓冲区的内容,以完成相应点阵数据的移位操作。具体操作方法是:
设置一个显示缓冲区(如图2所示),应该包括两部分:一部分用于存储当前LED显示屏上显示的10个汉字点阵数据;另一部分是点阵数据预加载区,用于存储即将进入LED显示屏的一个汉字的点阵数据。滚动指针总是指向显示器最右边的原点。当滚动指针移动到要显示的点阵数据存储区中第一个汉字的第一个地址时,显示缓冲器的LED显示区是空白的,而要显示的第一个汉字的点阵数据已经存储在预载区中。当需要滚动显示时,可以在下一个扫描周期的每个行扫描中断处理程序中将显示缓冲区的相应行点阵数据左移一位,同时改变显示缓冲区的内容。(需要注意的是,这个操作要在1.25ms的中断时间内完成,这里89C52用的是22MHz的晶振,实验证明这个操作是可以实现的)。这样,在一个扫描周期后,整个汉字将左移一列,显示缓冲区的内容也将发生变化。因为预加载区保存1个汉字点阵数据,即1616点阵,所以当前显示缓冲区的内容只能移动16列。当下一次滚动到来时,滚动指针将移动到点阵数据存储区中下一个汉字的第一个地址,该汉字的点阵数据将存储在预加载区。然后重复上述操作,实现滚动显示。特殊字符或图形的显示也类似,此处不再赘述。
打字需要汉字从左到右一个个出现在显示屏上,就像打字一样。设计中可以采用以下方法:首先清空LED显示屏对应的所有显示缓冲区,即LED显示空白,然后每次a 软定时器设置动态显示时间,汉字点阵数据依次加入显示缓冲区,扫描显示,达到打字显示效果。
3.2 PC控制程序
A.通信功能的实现
在Windows环境下,利用Windows的通信API函数或VC++(或其他语言)的标准通信函数_ _inp和_ _outp可以实现PC机与单片机的通信。但以上两种方法都比较复杂,用ActiveX控件MSComm32实现起来非常方便。该控件通过事件的方式简化了串口操作的编程,可以设置串口通信的数据发送和接收,以及串口的状态和串口通信的信息格式和协议。其初始化过程如下:
一般情况下,PC机应以主从方式与多个单片机89C51系统通信。为了区分各个单片机系统,89C51可以采用串口模式3,即11位异步收发模式。该模式的有效数据为9位,其中第9位是地址/数据信息的标志位。它的作用是让从机判断发送的数据是否是地址,从而实现多机操作。但是现在因为是用MSCOMM控件来实现PC和MCU之间的通信,所以这是一个标准的10位串行通信方式,也就是这个数据的8个标准数据位,1个起始位,1个停止位。因此,这两种格式是不一致的,因此很难利用上述方案。因此,可以考虑将单片机的串口设置为工作模式1,即改为10位异步收发模式来解决问题。其沟通过程如下:
首先发送通信开始标志,然后发送要操作的MCU系统的地址,然后发送显示工作命令字,该命令字包括2个字节,前一个字节用于设置显示方式和滚动方向,后一个字节用于设置显示速度。接下来,发送显示内容的点阵数据,最后,检查数据。这种通信协议非常简单,可以解决上述问题,从而实现PC机与多单片机的主从通信,控制显示器。
需要注意的是,当显示内容需要改变时,为了避免单片机中断串行数据接收时显示屏上出现乱码,显示屏应暂时不显示(在黑屏状态)直到数据接收完成并且串行中断处理结束。
汉字字体的提取非常重要,本文中的字体数据取自UCDOS下的字体文件HZK16。关于这方面的介绍很多,参考文献[2]给出了一个更具体的VC下提取汉字的方案,所以我赢了这里就不重复了。对于提取特殊字符或图形的点阵数据,一个简单的方法可以是先做一个BMP文件,然后用一些模块软件(比如字体提取v2.1)来获取。为方便显示,点阵数据格式应为n(168),不足的数据用0数据补充。
B.动态效果模拟显示。
为了方便调整LED的显示效果,作者在PC机的控制界面上设计了LED显示屏的模拟显示,与实际显示效果完全一致。用户可以设置显示模式,调整显示速度,在界面上预览显示效果,随时修改和设置参数,非常方便简单。
所以可以先在界面上画一个虚拟的LED显示屏。由于实际显示屏是16016的点阵,所以必须在界面上设置相同的面积。
实现动态显示效果的方法与上述方法基本相似。这里,以滚动显示为例进行说明。对于需要滚动的文字,可以设置为位图格式,暂存在内存中,然后利用VC提供的位图复制函数BitBlt将位图复制到显示位置。对于特殊字符或图形,可以直接使用BitBlt函数调用到显示位置。然后在CLEDDlg类的OnTimer函数中调用这个函数,实现字符的滚动显示。此外,您还可以通过设置不同的响应时间间隔来改变字符的滚动速度。
结论
本文提出的实现LED点阵显示屏动态显示和控制的解决方案已成功应用于实际系统中。如果该系统与计算机网络相连,还可以实现对显示屏的远程控制。
标签:数据点阵显示