基于FPGA的液晶显示接口设计
引言
在小规模图形液晶显示模块上使用液晶显示驱动控制器组成液晶显示驱动和控制系统,是当今低成本,低功耗,高集成化设计的最好选择,sed1520是当前最常用的一种液晶显示驱动控制器,这类图形液晶显示模块的规模为32行,本文用到的液晶模块cm12232即是内置sed1520的液晶显示模块,该模块的驱动控制系统由两片sed1520组成。
fpga即现场可编程门阵列器件,这是一种超大规模集成电路,具有在电路可重配置的能力(in circuit reconfigurable,icr)。设计者设计的逻辑可在编译、适配后变成网络表下载到fpga芯片上之后,fpga即可执行设计的逻辑功能。因此,fpga在芯片控制、接口逻辑设计等各个方面的应用越来越广泛。
系统硬件设计
本方案采用的fpga为alter公司的acex1k30芯片,它可提供系统的时钟及读写控制,acex系列的fpga由逻辑阵列块lab(logic
array block)、嵌入式阵列块eab(embedded array block)、快速互联以及io单元构成,每个逻辑阵列块包含8个逻辑单元le(logic
element)和一个局部互联[1]。每个逻辑单元则由一个4输入查找表(lut)、一个可编程触发器、快速进位链、级连链组成,多个lab和多个eab则可通过快速通道互相连接。eab是acex系列器件在结构设计上的一个重要部件,他是输入端口和输出端口都带有触发器的一种灵活的ram块,其主要功能是实现一些规模不太大的fifo、rom、ram和双端口ram等。在本液晶显示接口电路中,eab主要用宏功能模块实现片上rom。它通过调用fpga上的eab资源来实现汉字的显示和字符的存储,并根据控制信号产生的地址值从rom中读取字符值,然后送lcd显示器进行显示。
由于所用的图形点阵液晶块内置有sed1520控制器,所以,其电路特性实际上就是sed1520的电路特性。sed1520的主要特性如下[2]:
具有液晶显示行驱动器,具有16路行驱动输出,并可级联实现32行驱动。
具有液晶显示列驱动器,共有61路列驱动输出。
内置时序发生器,其占空比可设置为1/16和1/32两种。
内藏显示存储器,显示存储器内的数据可直接显示,"1"为显示,"0"为不显示。
接口总线时序可适配8080系列或m6800系列,并可直接与计算机接口。
操作简单,有13条控制指令。
采用cmos工艺,可在电压低至2.4-7.0v时正常工作,功耗仅30μw。
本设计所用的字符液晶模块cm12232由两块sed1520级连驱动,其中一个工作在主工作方式下,另一个工作在从方式下,主工作方式sed1520负责上半屏16行的驱动和左半屏的61列驱动,从工作方式的sed1520则负责下半屏16行的驱动和右半屏的61列驱动,使能信号e1、e2用来区分具体控制的是那一片sed1520,其系统的硬件连接图如图1所示。
由图1可见,该系统的硬件部分连接十分简单,其中fpga部分没画出,而液晶与fpga的接口则可直接以网表的形式给出,将它们直接与fpga的普通i/o引脚相连即可。
系统的软件接口实现
具体实现的重点是如何从存放有字符的rom块中读出数据,并按照液晶的时序正确的写入,在介绍具体实现方法前,首先要熟悉sed1520的指令。
sed1520的控制指令表

sed1520的几种主要的控制指令格式如下:
(1)复位格式(reset)
该指令用于实现sed1520的软件复位。该指令执行时,显示起始行寄存器清零,接着列地址指针清零,之后页地址寄存器置为"3"。
(2)休闲状态设置(statis drive on/off)
该指令是休闲状态的软件开关,当s=1时,sed1520进入休闲状态;当s=0时,sed1520将中止或退出休闲状态。
(3)占空比设置(slect duty)
该指令用于设置sed1520的占空比,du=0时为1/16占空比,du为1时为1/32占空比。
(4)adc选择指令(selet adc)
该指令用于设置显示存储器中单元的地址所对应的显示驱动输出的顺序。a=0时,顺时针显示;a=1时,逆时针显示。
(5)显示起始行设置(display start line)
该指令可用于设置显示屏上第一行(行驱动输出como所对应的显示行)所对应的显示存储器的行号,由此行顺序下延可得到对应显示屏上的显示效果,l=0-31(1fh),对应表示显示存储器的第1-32行。
(6)显示开/关设置(display on/off)
该指令控制着显示驱动器的输出。当di=0时,显示关,当di=1时,显示开。
(7)页面显示存储的设置
sed1520将显示存储器分为4个页面(0-3页)。每个页面都有80个字节。页面管理可由2位页地址寄存器控制,该指令就是设置页地址寄存器的内容,以选择相应的显示寄存器的页面。p=0-3,对应代表0-3页。
(8)列地址设置(set column(segment)address)
sed1520的显示存储器的每个页面上都有80个字节,每个字节中的8位数据对应着显示屏上同一列的8点行,列地址指针就是管理这80个字节单元的,列地址指针是一个7位加一计数器,由它和页地址寄存器组合,可唯一指定显示存储器的某一个单元,列地址指针在计算机对显示存储器的每次操后都将自动加一。该指令就是设置列地址指针内容的。当cy=0-4fh,分别对应于1-80单元的地址。
顶层设计大批量
本设计具体实现的顶层设计原理图如图2所示。

图2中lpm_rom模块是利用fpga的宏功能模块产生的片上rom块[3],用以存放要显示的字符数据。ctrl模块则为控制从rom中取出数据后液晶上显示的核心控制模块,其功能包括控制数据的读写时序、液晶屏的分屏显示控制、分页显示控制等。
控制模块程序代码
ctrl模块的程序核心代码如下:
architecture behavioral of ctrl is
signal divcnt:std_logic_vector(11 downto 0);--系数计数
signal data:std_logic_vecdor(9 downto 0);--地址输出
signal clk1,clk2,a01,cs11,cs21,flag,csflag:std_logic;
data<=divcnt(11 downto 2);--最高10位为地址
process3(clk2)
begin
if clk2'event and clk2=`1'then case conv_integer (data)is
when 0|2|4|6|8|10|12|13|138|139|264|265|390|391=>a01<=`0';cs11<=`0';cs21<=`1';
when 1|3|5|7|9|11|75|76|201|202|327|328|453|454=>a01<=`0';cs11<=`1';cs21<=`0';
when 14 to 74=>a01<=`1';cs11<=`0';cs21<=`1';
when 140 to 200=>a01<=`1';cs11<=`0';cs21<=1';
when 266 to 326=>a01<=`1';cs11<=`0';cs21<=`1';
when 392 to 452=>a01<=`1';cs11<=`0';cs21<=`1';
when 77 to 137=>a01<=`1';cs11<=`1';cs21<=`0';
when 203 to 263=>a01<=`1';cs11>=`1';cs21<=`0';
when 329 to 389=>a01<=`1';cs11<=`1';cs21<=`0';
when 455 to 515=>a01<=`1';cs11<=`1';cs21<=`0';
when others=>a01<=`0';cs11<=`1';cs21<=`1';
end case;
end if;
end process3;
a0<=a01;
cs1<=cs11 or csflag;
cs2<=cs21 or csflag;
ad<=data;
end behavioral;
其中的关键程序为process3;在该过程中,a01负责该数据写到液晶数据线上显示还是写到液晶的控制寄存器进行控制,a01为0时为写命令,a01为1时为写数据。
程序中,rom地址的前13个单元均为写命令,根据sed1520的控制命令字,rom表中的0、2、4、6、8、10单元依次是e2、a4、a9、a0、c0、af,主要用于实现对csi主工作的sed1520复位、退出休闲状态、设置占空比为1/32、顺时针显示数据ram中的内容、显示起始对应显示存储器的0行、显示开这一系列的初始化工作;而1,3,5,7,9,11单元则写入到cs2(即从工作的sed1520)实现其初始化[4]。第13单元放的是b8(即页地址设置为0),从14-74单元,a01=1为写数据,此时片选cs1有效,rom表中连续放入"武汉理工"4个汉字的上半部分字模(本方案共显示16个汉字"武汉理工大学自动化学院重点实验室"分两行,每行8个字显示);之后,75、76单元为写命令,rom中的数据为b8,00表示设置显示页为0页,该页的列地址从0开始[5]。从77-137单元地址向cs2(即从动工作方式的sed1520)写数据即"大学自动"的前半部分字模,接下来的138、139单元为写命令,rom中的数据为b9,00即表示页地址设置为1列,地址为0,140-200单元放入"武汉理工"的下半部分字模,201、202单元为写命令,rom中的数据为b9、00表示页地址设置为1列,地址为0,203-263中为"大学自动"的下半部分字模,之后,8个字的写入过程与前8个字的写入过程相同,写命令单元用于控制要写的页。
结束语
本方案以fpga为控制核心实现了对字符点阵液晶的控制,该方案硬件电路简单,软件程序简洁,对液晶的控制简单而且稳定,且可灵活改动,若要改变液晶显示的汉字,只需改变rom表中的字模即可,实践证明,该设计是对液晶应用的一种行之有效的方法。
评论