LED点阵显示屏是显示公共信息的一种重要显示终端,其中大屏幕LED点阵显示屏在许多场合得以应用。大屏幕显示所采用的技术比中小屏幕显示难度更大,因为其屏幕大、LED点数多,要求在极短的时间内刷新每个点,使得其扫描速率必须非常高,所以只有设计合理的控制电路才能达到这个要求。本文着重解决大屏幕LED点阵显示这一技术难题。通过采用自顶向下的设计思想,综合运用高速CPLD、双口RAM等技术和芯片,设计出了大、小屏幕皆适合的显示控制电路。特别是利用单片机、CPLD与双口RAM的无缝结合,将复杂的任务分配给不同的硬件处理,满足了对实时性的要求。本系统不仅给大屏幕LED点阵显示提供了优良的控制电路,而且为CPLD器件和EDA技术提供了切实的应用实例。其中,共享双口RAM的应用,为高速总线与低速总线的通信提供了一个新的解决方案。
1 硬件设计
显示系统由信号处理电路和扫描电路两大块构成,其系统原理框图如图1所示,实际电路框图如图2所示。微处理器MCU采用8位单片机AT89C51,它通过串口接收来自PC机的待显示数据。由于PC机串行总线标准RS232的逻辑电平与单片机电路使用的TTL电平不同,所以PC机与MCU之间的通信数据必须经过RS232电平转换芯片MAX232进行转换。从PC机接收到的数据存放在8K字节的电可擦写存储器EEPROM 28C64中,这样可方便地随时修改待显示的信息,并且在掉电情况下不至于丢失数据。由于系统软件要进行大批量的数据处理,所以扩充了单片机缓存区大小,采用了8K字节的外部静态RAM 6264。
本系统采用ATMEL公司的8位单片机AT89C52,主要完成数据处理、存储和通信功能,其原理图如图4所示
U4是AT89C51单片机;U3是地址锁存器,用来锁存单片机的低8位地址信号。因为要显示的数据量很大,特别是当设计复杂的显示效果时需要处理的数据量更大,而AT89C51内部缓存容量不足,所以扩展外部RAM,采用容量为8K字节的HM6264,即U7。U2是容量为8K字节的EEPROM 28C64,用来存储字模数据,而不用作程序存储器。U5是双口RAM,U1是将RS232电平转换为TTL电平的电平转换器。
PC机将欲显示的字或图形的点阵数据通过串口送到单片机,单片机将其存储在EEPROM(U2)中,然后再根据显示要求对这些数据进行特定的处理,处理完后存储在双口RAM(U5)的特定地址,供扫描模块扫描取数进行显示。为了便于编写串行通信程序,使用振荡频率为11.0592MHz的晶振CR1和C5、R1及SW1组成的复位电路。
2 软件设计和编写
2.1 主控电路CPLD芯片设计与调试
主控电路的功能是读取双口RAM中的数据并通过译码逻辑电路将数据显示在LED点阵显示屏的特定位置上。因为只用到单片机的一部分功能,所以使用CPLD芯片将MCU中的总线读控制器及其外围译码逻辑电路集成在一起。如若采用传统方案,就必须采用多片芯片;而使用CPLD后,只用一片芯片就可以实现所要的功能。总线读控制器是产生时序的电路,需根据存储器的读时序进行设计,只有保证正确的时序才能读出数据。双口RAM的读写时序和普通RAM的读写时序基本相同,如图5所示。在片选信号从高变低之前必须输出地址信号给双口RAM,然后再用读信号去控制
onclick="get_larger(this)">
复杂的时序电路用硬件描述语言描述,一般是用有限状态机来描述。onclick="get_larger(this)">
有限状态机是时序电路通用模型,任何时序电路都可以表示成有限状态机。从本质上讲,有限状态机是由寄存器与组合逻辑构成的时序电路,各个状态之间的转移总是在时钟的触发下进行的。针对图5所示的读时序,可列出如图6所示的各种状态的转换图。用Verilog HDL语言描述时可用带有always语句的case语句建模,状态信息存储在寄存器中,case语句的多个分支包含每个状态的行为。在这里将读时序分为S0、S1、S2、S3四个状态,其工作方式如下:
步骤S0 在RAM的片选CE使能之前输出地址;
步骤S1 选中RAM,输出读信号;
步骤S2 行计数器输出,读出RAM的数据并反相输出;
步骤S3 片选禁止,读禁止,地址计数器加1。
译码输出逻辑电路主要是提取地址计数器的计数输出。在某个状态下,行地址计数器输出低5位数据,位译码输出高4位数据并译码输出16个位选信号。
时序电路中一般留有复位信号,当复位端为1时,地址计数器复零,地址输出复零,片选、读控制信号置1,使状态机回到状态S0。
2.2 行译码CPLD芯片设计
行译码器的功能较主控电路来讲相对简单,它是将主控电路的行计数器输出的5位二进制数据译成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的特定位置。
o HEIGHT: 398px" height=398 src="https://www.iianews.com/resupload/00000000000000000011/004056/1262671588278_3.gif" width=475>
本系统采用ATMEL公司的8位单片机AT89C52,主要完成数据处理、存储和通信功能,其原理图如图4所示
U4是AT89C51单片机;U3是地址锁存器,用来锁存单片机的低8位地址信号。因为要显示的数据量很大,特别是当设计复杂的显示效果时需要处理的数据量更大,而AT89C51内部缓存容量不足,所以扩展外部RAM,采用容量为8K字节的HM6264,即U7。U2是容量为8K字节的EEPROM 28C64,用来存储字模数据,而不用作程序存储器。U5是双口RAM,U1是将RS232电平转换为TTL电平的电平转换器。
PC机将欲显示的字或图形的点阵数据通过串口送到单片机,单片机将其存储在EEPROM(U2)中,然后再根据显示要求对这些数据进行特定的处理,处理完后存储在双口RAM(U5)的特定地址,供扫描模块扫描取数进行显示。为了便于编写串行通信程序,使用振荡频率为11.0592MHz的晶振CR1和C5、R1及SW1组成的复位电路。
2 软件设计和编写
2.1 主控电路CPLD芯片设计与调试
主控电路的功能是读取双口RAM中的数据并通过译码逻辑电路将数据显示在LED点阵显示屏的特定位置上。因为只用到单片机的一部分功能,所以使用CPLD芯片将MCU中的总线读控制器及其外围译码逻辑电路集成在一起。如若采用传统方案,就必须采用多片芯片;而使用CPLD后,只用一片芯片就可以实现所要的功能。总线读控制器是产生时序的电路,需根据存储器的读时序进行设计,只有保证正确的时序才能读出数据。双口RAM的读写时序和普通RAM的读写时序基本相同,如图5所示。在片选信号从高变低之前必须输出地址信号给双口RAM,然后再用读信号去控制
步骤S0 在RAM的片选CE使能之前输出地址;
步骤S1 选中RAM,输出读信号;
步骤S2 行计数器输出,读出RAM的数据并反相输出;
步骤S3 片选禁止,读禁止,地址计数器加1。
译码输出逻辑电路主要是提取地址计数器的计数输出。在某个状态下,行地址计数器输出低5位数据,位译码输出高4位数据并译码输出16个位选信号。
时序电路中一般留有复位信号,当复位端为1时,地址计数器复零,地址输出复零,片选、读控制信号置1,使状态机回到状态S0。
2.2 行译码CPLD芯片设计
行译码器的功能较主控电路来讲相对简单,它是将主控电路的行计数器输出的5位二进制数据译成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的特定位置。
o 有限状态机是时序电路通用模型,任何时序电路都可以表示成有限状态机。从本质上讲,有限状态机是由寄存器与组合逻辑构成的时序电路,各个状态之间的转移总是在时钟的触发下进行的。针对图5所示的读时序,可列出如图6所示的各种状态的转换图。用Verilog HDL语言描述时可用带有always语句的case语句建模,状态信息存储在寄存器中,case语句的多个分支包含每个状态的行为。在这里将读时序分为S0、S1、S2、S3四个状态,其工作方式如下:
步骤S0 在RAM的片选CE使能之前输出地址;
步骤S1 选中RAM,输出读信号;
步骤S2 行计数器输出,读出RAM的数据并反相输出;
步骤S3 片选禁止,读禁止,地址计数器加1。
译码输出逻辑电路主要是提取地址计数器的计数输出。在某个状态下,行地址计数器输出低5位数据,位译码输出高4位数据并译码输出16个位选信号。
时序电路中一般留有复位信号,当复位端为1时,地址计数器复零,地址输出复零,片选、读控制信号置1,使状态机回到状态S0。
2.2 行译码CPLD芯片设计
行译码器的功能较主控电路来讲相对简单,它是将主控电路的行计数器输出的5位二进制数据译成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的特定位置。
有限状态机是时序电路通用模型,任何时序电路都可以表示成有限状态机。从本质上讲,有限状态机是由寄存器与组合逻辑构成的时序电路,各个状态之间的转移总是在时钟的触发下进行的。针对图5所示的读时序,可列出如图6所示的各种状态的转换图。用Verilog HDL语言描述时可用带有always语句的case语句建模,状态信息存储在寄存器中,case语句的多个分支包含每个状态的行为。在这里将读时序分为S0、S1、S2、S3四个状态,其工作方式如下:
步骤S0 在RAM的片选CE使能之前输出地址;
步骤S1 选中RAM,输出读信号;
步骤S2 行计数器输出,读出RAM的数据并反相输出;
步骤S3 片选禁止,读禁止,地址计数器加1。
译码输出逻辑电路主要是提取地址计数器的计数输出。在某个状态下,行地址计数器输出低5位数据,位译码输出高4位数据并译码输出16个位选信号。
时序电路中一般留有复位信号,当复位端为1时,地址计数器复零,地址输出复零,片选、读控制信号置1,使状态机回到状态S0。
2.2 行译码CPLD芯片设计
行译码器的功能较主控电路来讲相对简单,它是将主控电路的行计数器输出的5位二进制数据译成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的特定位置。