基于FPGA的多功能LCD显示控制器设计
扫描二维码
随时随地手机看文章
摘要:通过对LCD1602/LCD12864显示模块控制时序和指令集的对比分析,利用Verilog HDL描述语言完成了多功能LCD显示控制模块的IP核设计,所设计的LCD显示控制器具有很好的可移植性,只需通过端口的使能参数配置便可以驱动LCD1602/LCD12864模块实现字符或图形的实时显示,并且该多功能LCD控制器的可行性也在CycloneⅡ系列的EP2C5T144C8 FPGA芯片上得到了很好的验证。
关键词:FPGA;LCD显示控制器;IP棱;有限状态机
在许多嵌入式系统应用领域,都需要友好的人机信息界面,传统的数码管或者发光二极管显示方式已经不能满足实际的显示需求,而LCD1602/LCD12864液晶显示模块具有低压微功耗、寿命长、显示信息量大、超薄等显著优点,被广泛应用于智能仪器、仪表等各种便携式电子信息产品上来实现数字、字符和图形的可视化信息显示。目前,针对LCD1602/LCD12864液晶模块的显控技术主要有两种方式,首先是基
于各种微处理器(8051/ARM/NoisⅡ/SPCE061)的微程序控制方式,这种软件组态的LCD模块控制技术应用广泛,但是这种控制方式会占用处理器资源、速度慢、实时显示性能较差。其次,就是使用CPLD/FPGA开发的独立显示控制器,这种纯硬件结构的独立显示控制器,速度快、实时显示性能好;但是这种独立显示控制器可移植性差、功能单一,很难适应不同类型的液晶屏及不同的显示模式。
因此,文中就提出了一个基于FPGA的多功能LCD显示控制器设计方案,只需通过端口的使能参数配置便可以驱动LCD1602模块显示字符、LCD12864模块实现字符或图形的实时显示,并在FPGA开发板(EP2C5T144C8)上进行了该设计的可行性验证。
1 多功能显示控制器的端口设计
要设计能够驱动LCD1602/LCD12864两种液晶模块的多功能显示控制器,就必须同时兼顾这二者的封装端口引脚和用途;对多功能显示控制器的端口做出兼容性设计。
LCD1602液晶模块是一款最常用、最便宜的工业字符型液晶显示屏,它可以显示16x2个、5x7的点阵字符,模块的字模存储器CGROM(Chara cter Generator ROM)中固化192个常用字符的字模,另外还有8个允许用户自定义的字符存储器CGRAM(Character Generator RAM)。可以用于少量的自定义图形显示(如汉字)。由于显示单元位间隔和行间隔的存在而导致显示效果不好,因此LCD1602模块主要用于西文、ASCII码字符的显示,该模块拥有1个16引脚的单排插针外接端口,端口的功能定义如表1所示。
目前,常用的LCD12864模块是一种内部含有国标一级、二级简体中文字库的点阵型图形液晶显示模块;具有串/并多种接口方式,内置了8 192个16x16点汉字和128个16x8点ASCⅡ字符集,它在字符显示模式下可以显示8x4个16x16点阵的汉字或16x4个16x8点阵的西文(ASCH)字符;它也可以在图形工作模式下显示分辨率为128x64的二值化图形,该模块拥有1个20引脚的单排插针外接端口,端口的功能定义与LCD1602的对比如表1所示。
通过表1所示的LCD12864和LCD1602两种液晶模块的端口对比可以看出,它们的端口定义基本相同,LCD12864模块只比LCD16021模块多了PSB(串并选择)和RST(复位端)端口,因此;可以完全按照LCD12864的端口要求来设计多功能LCD显示控制器的端口;PSB和RST端口在驱动LCD 1602模块时闲置或悬空(也可以用来充当某些特殊LCD1602屏的电源开关和背光开关信号)。
2 多功能显示控制器的操作时序
如果LCD12864液晶模块工作在并口的数据传输模式(PSB=1、RST=1)下,就和LCD1602液晶模块具有完全相同的控制时序,这就要求多功能控制器产生的E、RW、RS控制信号具有正确的时序,LED模块的读/写操作时序由使能信号E完成:对读/写操作的识别是判断RW信号上的电平状态;RS信号用于识别数据总线DB0~DB7上的数据是指令代码还是属于显示数据,控制信号的操作时序如图1所示。
在如图1所示的操作时序图形中,LCD模块都给出了关键时间参数(不同厂商产品有差异),一般要求数据读写周期TC≥13μs;使能脉冲宽度TPW≥1.5 μs;数据建立时间TDSW≥1μs;数据保持时间TH≥20 ns;地址建立和保持时间(TAS和TAH)不得小于1.5μs,因此在多功能LCD显示控制器IP核的设计中,必须设置有延时配置参数以满足控制器的多种模块驱动调试。
LCD12864和LCD1602液晶模块都有自己一套严格用户指令集,用户就是通过这些指令来初始化液晶模块来选择显示模式,这就要求多功能的LCD显示驱动器同时包含多种显示模式的用户配置指令,LCD12864和LCD1602液晶模块字符、图形显示模式的初始化指令如表2所示,对于指令的解释在此不再详述。
通过表2的指令对比可以看出两种显示模块的字符显示初始化指令完全一致,仅仅是显示行的起始地址有所不同;这就需要在LCD多功能显示控制器中设置参数跳转,来根据模块配置参数自动加载相应的行起始地址,而对于LCD模块的图形显示模式需要用到扩展指令集,并且需要分成上下两个半屏设置起始地址,上半屏垂直坐标Y:8’h80~9’h9F(32行),水平坐标X:8’h80;下半屏垂直坐标和上半屏相同,而水平坐标X:8’h88。
3 多功能显示控制器的状态机设计
基于FPGA设计LCD显示控制器,关键在于采用硬件描述语言设计有限状态机(FSM)来控制LCD模块的跳转,文献中就是使用FSM实现了对LCD模块的显示控制,但是它们都是针对一种类型LCD模块的某种显示模式,不具有多模式的显示控制能力。因此,多功能LCD显示控制器的有限状态机就需要设置更多的条件转换,来实现多种控制模式,状态机的状态转换图如图2所示。
在图2所示的状态转换图中,系统上电后,首先完成持续大约0.1 s(根据时钟频率配置)的自动复位,然后才根据模块的端口参数选择不同显示模式所对应的初始化命令,在状态机中设置有初始化命令、起始行地址和屏显示数据3条转换路径来适应LCD屏的工作状态,同时也在关键转换路径上设置有可以配置的延时循环,这样既能方便LCD模块的工作调试,又能使LCD模块一直工作在写屏模式(RW=0)。对于LCD屏的显示数据存储可以完全采用FPGA内嵌的ROM/RAM单元实现,如果使用双口RAM(存储器读写独立)就能实现LCD模块的动态实时显示。
4 多功能显示控制器的设计验证
使用康芯KX7C5T FPGA开发板(Altera CycleⅡEP2C5T144C8)、KBl2864KZK、RT1602C和4x4键盘组成多功能LCD控制器的硬件测试平台;设计项目经过QuartusⅡ9.1开发工具的工程编译和芯片下载配置后得到的实际显示效果图如图3所示,其中图3(a)是LCD1602模块的字符显示效果图;屏的第1行显示静态字符,第2行实时显示键盘输入键值。图3(b)是LCD12864模块的中西文混合字符显示效果图,第4行也是实时显示键盘输入键值。图3(c)是LCD12864模块的静态图片显示效果图(ROM存储);图3(d)是LCD12864模块的实时动态图形显示效果图(双口RAM存储),这是用多功能LCD显示控制器实现的逻辑分析仪界面。
5 结论
文中设计的多功能LCD显示控制器,在FPGA开发板上的验证结果表明,它完全具有能够驱动LCD1602模块显示字符、LCD12864模块显示字符和实时显示图形的功能;并能够通过端口参数配置而实现控制器的系统移植。