显示系统由信号处理电路和扫描电路两大块构成,其系统原理框图如图1所示,实际电路框图如图2所示。微处理器MCU采用8 位单片机AT89C51,它通过串口接收来自PC机的待显示数据。由于PC机串行总线标准RS232 的逻辑电平与单片机电路使用的TTL电平不同,所以PC机与MCU之间的通信数据必须经过RS232 电平转换芯片MAX232进行转换。从PC机接收到的数据存放在8K字节的电可擦写内存EEPROM 28C64中,这样可方便地随时修改待显示的信息,并且在掉电情况下不至于丢失数据。由于系统软件要进行大批量的数据处理,所以扩充了单片机缓存区大小,采用了8K字节的外部静态RAM 6264。

采用双口RAM是本设计的一个主要特色。一般的RAM(如6116)只有一套地址总线、数据总线和控制总线,在同一时间只能执行同一总线操作。而标准双口RAM有左侧和右侧两套地址总线、数据总线和控制总线,可供两套总线对其进行访问。在本系统中,单片机通过共享的双口RAM IDT7132与CPLD通信,单片机将数据写入IDT7132中,而CPLD则从IDT7132中读取数据并通过扫描逻辑电路输出出去。 由于CPLD扫描模块可以达到很高的扫描速率,而单片机的运行速度则相对较低,并且两个模块间需要有大量的数据交换,为此选择双口RAM芯片IDT7132SA35JS,它的速度等级是35ns,完全满足两个模块实时通信的要求。双口RAM是两个数据模块间的数据信道,必须是共享的,它在本设计中起到了关键作用。 1.2 基于CPLD的独立扫描模块
显示部分的点阵模块采用双色LED共阴点阵模块(实际上可显示红、黄、绿三色)。 8 块8×8点阵模块连接成32×32点阵。为易于控制,将公共接口作为行控制,且行的接地引脚经过一个开关三极管接地(设计中简称行扫描管),实现对相应列的控制。因为一个行扫描管同时控制着一行中多个LED的通断,所以它承载较大电流。以每个发光二极管流过的电流为10mA计算,一个128列的点阵屏中,每个行扫描管所承受的电流是10mA×128=1.28A,为此选用高速中功率达林顿管TIP127,它的集电极吸收电流最大可达5A,保证了行的驱动能力。由于显示点阵的每一行都需要用一个三极管来控制,所以32×32点阵共需要32个TIP127。 行扫描电路采用通用数字电路译码输出来控制。在32×32点阵显示时,扫描输出需要大量的I/O埠,而ATMEL公司生产的CPLD 芯片ATF1508AS15JC84(与ALTERA公司的MAX7128SLC84-15功能及封装等完全兼容)的外部I/O埠不够用,所以采用两片CPLD,一片专用于行扫描,另一片用于读取双口RAM IDT7132中的数据并进行列扫描。 列扫描电路的功能是在选中某行时送该行对应的列数据,由于采用的是8位微处理器,一次只能送一个字节的数据,即每次只能扫描8列。本设计中,采用8550三极管矩阵驱动方式,从而节省了大量控制信号引脚资源。 独立扫描模块的功能是以双口RAM 为中介将单片机送来的资料在LED 点阵显示屏上显示出来,其电路原理图如图3所示。单片机总线将处理好的待显示数据存放在U5(双口RAM IDT7132SA35JS中,然后U6(CPLD芯片ATF1508AS15JC84,用Verilog HDL语言编写其总线读逻辑)读取存放在U5中的待显示数据并驱动显示屏。整个显示屏为128×32点阵,一次扫描一个字节即8位,为此全屏显示需要128×32÷8=512字节。将地址线A9R、A10R 接地,这样只允许访问U5中的低512K 字节。 CA0~CA8是CPLD 输出到U5中的地址总线,CD0~CD7是从U5读出数据的数据总线。 J1是行扫描信号接口,CH0~CH4 为行扫描计数器输出信号,时钟信号可从CLK 输出给行扫描计数器。 J2为列扫描控制信号V0~V7输出接口。 DR0~DR15为一色的列选通控制信号输出,由于I/O端口引脚不够,所以另一色的列选通信号采用译码电路译码输出,用J3的四线输出。 CON1为JTAG 接口,J6为时钟源选择接口,可接单片机的ALE信号,也可接有源晶振CR2的输出。有源晶振CR2相当于一信号产生电路,只要其2脚接地,4脚接电源,3脚就有额定的输出波形。 由于采用CPLD 设计扫描逻辑,所以扫描逻辑的关键不再取决于硬件连接,而是取决于芯片的设计。 1.3 基于单片机的通信与信号处理电路
本系统采用ATMEL公司的8位单片机AT89C52,主要完成数据处理、存储和通信功能,其原理图如图4所示。


2.1 主控电路CPLD芯片设计与调试


行译码器的功能较主控电路来讲相对简单,它是将主控电路的行计数器输出的6位二进制数据译成32行的行选通信号,去控制行驱动管驱动行输出。这是一个纯组合逻辑电路,使用Verilog HDL 语言描述的always语句和case 多分支语句即可实现此功能。 2.3 单片机的C程序设计
在本系统中,单片机的功能主要是负责通信与数据处理。通信即通过串口接收来自PC机的数据并存储在EEPROM中;数据处理即从EEPROM中取出数据并根据要显示的效果进行软件处理,再存放在双口RAM中。在本系统中,因单片机及外围电路只负责通信和数据处理,对实时性要求不高,因此用前后台系统进行软件设计就能达到要求。本系统采用嵌入式操作系统RTX51TNY(KEIL C平台自带的免费的微实时内核)。软件主要由PROCESS.C和SERIAL.C两个档组成。PROCESS.C包含三个任务:任务0,初始化;任务1,静态显示;任务2,左移显示。 SERIAL.C是串口中断程序$静态显示的算法较简单,只要将EEPROM中的字模数据存放到双口RAM中的特定位置即可。左移显示则需要将字模数据每个字节左移,然后存放在双口RAM的特定位置。