基于FPGA的液晶显示器驱动系统的设计.doc第二次修改.doc_第1页
基于FPGA的液晶显示器驱动系统的设计.doc第二次修改.doc_第2页
基于FPGA的液晶显示器驱动系统的设计.doc第二次修改.doc_第3页
基于FPGA的液晶显示器驱动系统的设计.doc第二次修改.doc_第4页
基于FPGA的液晶显示器驱动系统的设计.doc第二次修改.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA的液晶显示器驱动程序的设计王 彦 陈琼 申政琴(南华大学 电气工程学院 湖南 衡阳 421001)摘 要: 文章介绍了用现场可编程逻辑器件FPGA来驱动液晶显示器,给出了用VHDL语言编写的时钟显示程序的设计原理和FPGA实现以后的系统仿真结果,并在Xilinx公司的Spartan系列的2sc100-6pq208芯片上调试通过。用FPGA来做液晶显示的驱动完全可以取代传统的利用单片机来驱动液晶显示,且抗干扰性好,可靠性高。关键词:现场可编程逻辑器件FPGA 液晶显示器LCD 硬件描述语言VHDLDesign of the LCD Drive Program Based on FPGAWang yan Chen qiong Shen zheng_qin(The College of the Electrical Engineering, Nanhua University, Hengyang 421001, Hunan China )Abstract: It will introduce how to drive the LCD with FPGA,tell the basic law of the design and the timing of the result of the design,and achieve on the series Spartan II 2sc100-6pq208 of Xilinx corporation. It is proved to be effective and it can take the place of MCU in driving LCD, and it is anti-jamming and has high reliability. Keyword: FPGA LCD VHDL0.引言目前人类已经步入信息时代,人们信息的获取有80 来自视觉。各种信息最终都要通过信息显示来实现人,机交换。由于液晶显示器件(LCD)具有低电压,微功耗,能使用CMOS电路直接驱动,使LCD结构便携化,应用个人化成为可能。LCD的出现不仅代替了部分其他显示器件,而且大大扩展了显示器件的应用范围。LCD产品是世界上最省电的显示产品。在便携式显示器中,LCD是最佳的选择。随着世界经济科技的发展和个人生活水平的提高,个人对显示器的需求将是五花八门,日新月异。LCD在这方面的市场开拓十分宽广。一. 液晶显示的简介1.液晶显示的原理从电子学的角度来说,液晶显示器件的显示原理为:在外加电场的作用下,具有偶极矩的液晶棒状分子在排列状态上发生变化,使得通过液晶显示器件的光被调制,从而呈现明与暗或透过与不透过的显示效果。液晶显示器件中的每个显示像素都可以单独被电场控制,不同的显示像素按照驱动信号的“指挥”在显示屏上合成出各种字符,数字及图形。液晶显示驱动器的功能就是建立这种电场。由于直流电场将导致液晶材料的化学反应和电极老化, 迅速降低液晶材料的使用寿命所以要求液晶显示驱动器的驱动输出必须是交流驱动。液晶显示的驱动方式有许多种,常用的有静态驱动和动态驱动两种。本文主要介绍用现场可编程逻辑器件FPGA来驱动点阵字符型液晶显示模块(MDLS)。2. MDLS系列电路框图 LCD:VDM16268LCD E R/W RS DB0 DB7DRIVER VDD V0 VSS 其中E是使能信号,R/W是读/写操作选择1:读;0:写,RS是寄存器选择1:数据;0:指令,DB0DB7是数据总线,VDD是+5V逻辑电源,V0是液晶驱动电源,VSS是电源地.3. MDLS字符型液晶显示模块指令集指令名称控制信号运行 时 间250KHZ功 能RS R/WDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 清 屏 0 00 0 0 0 0 0 0 11.64ms 清DDRAM和AC的值归 位 0 00 0 0 0 0 0 1 *1.64msAC=0光标、画面回HOME位输入方式设置 0 00 0 0 0 0 1 I/D S40us设置光标,画面移动方式限制开关控制 0 00 0 0 0 1 D C B40us设置显示,光标及闪烁开/关光标,画面位移 0 00 0 0 1 S/C R/L * *40us光标,画面移动不影响DDRAM功能设置 0 00 0 1 DL N F * *40us工作方式设置(初始化指令)CGRAM地址设置 0 00 1 A5 A4 A3 A2 A1 A040us设置CGRAM地址DDRAM地址设置 0 01 A6 A5 A4 A3 A2 A1 A040us设置DDRAM地址读BF及AC值 0 1BFAC6AC5AC4AC3AC2AXC1AC00us读忙BF值地址计数器AC值写数据 1 0数 据40us数据写入DDRAM/CGRAM读数据 1 1数 据40usDDRAM/CGRAM数据读出I/D=1:数据读/写操作后,AC自动增1 S/C=1:画面平移一个字符位 N=1: 两行显示I/D=0: 数据读/写操作后,AC自动减1 S/C=0:光标平移一个字符位 N=0: 一行显示S=1: 数据读/写操作,画面平移 R/L=1:右移 F=1: 5*10点阵字符S=0: 数据读/写操作,画面不动 R/L=0:左移 F=0: 5*7点阵字符D: 显示开关“1”-开;“0”-关 DL=1:8位数据接口 BF=1:忙C: 光标开关“1”-开;“0”-关 DL=0:4位数据接口 BF=0:准备好B: 闪烁开关“1”-开;“0”-关注:“*”表示任意值,在实际应用时一般认为是“0”。4. MDLS的信号真值表RSR/WE功能00下降沿写指令代码01高电平读忙标志和AC值10下降沿写数据11高电平读数据5. MDLS系列产品时序图 从上面的时序图,可以清晰的看到数据写入的条件:寄存器Rs为高电平,读/写标志R/W为低电平,建立地址,然后使能信号E为高电平,数据被写入,当使能端E为下降沿的时候数据被完全建立。从地址的建立、保持到数据的建立、保持的结束,整个过程需要的时间至少为355ns。关于MDLS系列接口特性及电特性查点阵字符式液晶显示模块使用手册可知.二. 整体设计原理框图 采用专用IC芯片可以实现MDLS字符型液晶显示的驱动,但专用IC芯片的资源有限,设计不灵活,而采用现场可编程逻辑器件(FPGA)来驱动MDLS字符型液晶显示模块,设计非常灵活方便.因此我们选用FPGA驱动MDLS字符型显示。这里以时钟的显示为例进行整体的程序设计,它的整体设计原理方框图如图1所示,主要由按键控制部分、FPGA驱动电路和液晶显示模块组成。用户通过按键控制电路对FPGA驱动电路进行初始化控制, FPGA驱动电路再驱动液晶显示模块,实现用FPGA驱动字符型液晶显示的功能。FPGA驱动电路按 键控 制MDLS字符型液晶显示模块液晶显示clockLcd_driverLcd_decoder图1 整体设计原理方框图三. 设计实现 现场可编程逻辑器件FPGA驱动MDLS字符型液晶显示模块的核心内容是FPGA驱动电路的设计。FPGA驱动电路的设计主要包含时钟模块(clock)、液晶显示器译码模块(lcd_decoder)和液晶显示器驱动模块(lcd_driver)。时钟模块(clock)是对显示时间的预置,即液晶显示器显示的内容。液晶显示器译码模块(lcd_decoder)是把输入的时间译成与之对应的液晶显示器的专用二进制代码。例如:要在液晶显示屏幕上显示数字3,必须把3译码成二进制代码00110011,才能在显示屏幕上得到所需显示的数据。液晶显示器驱动模块(lcd_driver)的内部有三个进程,分别是数据预置、分频和控制进程. FPGA驱动电路中三大模块之间的工作原理如图2所示。图2 FPGA驱动电路内部模块工作原理图FPGA驱动电路的工作流程是:首先数据的预置,然后被预置的数据通过液晶显示器译码模块(lcd_decoder)译成液晶显示器中所对应的二进制代码,送入液晶显示器驱动模块(lcd_driver),由lcd_driver模块的输出信号直接控制液晶显示器,输出对应的字符。这样便达到了现场可编程逻辑器件FPGA驱动MDLS字符型液晶显示的目的。四. 液晶显示器驱动模块(lcd_driver)的工作原理 液晶显示器驱动模块(lcd_driver)是FPGA控制电路设计的主要内容,它内部的三大进程分别是数据预置(loaddata)、分频(divider)和控制进程(control),其中分频进程是为了满足使能信号的使能周期的最小时间,这是由于FPGA的频率太高,要满足使能周期的最小时间就必须利用分频来实现. 控制进程是利用状态机来完成的.它的程序见附录,状态转换图如图3所示, STATE0STATE1STATE5分别表示set_dlnf状态(功能设置), clear_lcd状态(清屏), set_cursor状态(输入方式设置),set_dcb状态(限制开关控制),set_location状态(DDRAM地址设置),write_data状态(写数据)从图3中可知:当复位信号reset=0时进入初始化状态即set_dlnf状态(功能设置),它的输出为: lcden=0;lcdda=0;lcdrw=0; data=00111100;lcden为使能信号,lcdda相当于RS寄存器的输入信号,lcdrw是数据读/写信号, data=00111100表示该功能方式设置的是8位数据接口,两行显示,5*10点阵字符.其它的状态输出和功能查MDLS字符型液晶显示模块指令集可知.由程序知道初始化时,使能信号(lcden)均为低电平,然后延迟200us后使能信号赋高电平“1”,再延迟200us使能信号清零,之后再延迟200us才转到另一个状态。因此从一个状态转到另一个状态需要延迟600us.在满足条件的情况下,各状态按照图中所示的关系转换. 图3液晶显示器驱动模块中的状态转换图 有限状态机及其设计技术是实用数字设计部分的重要组成部分,是实现高效率高可靠逻辑控制的重要途径.有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点.其运行方式类似于CPU,而运行速度和可靠性方面都优于CPU。状态机的结构模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,因而其为综合器发挥强大的优化功能提供了条件。状态机构成性能良好的同步时序逻辑模块消除了大规模集成电路设计中出现的竞争冒险现象。状态机的VHDL表述丰富多样,层次分明,结构清晰,易读易懂;在排错,修改和模块移植方面也有其独到的特点。状态机还具有高速运算的能力和高可靠性。状态机的设计是硬件描述语言VHDL的一大优点.用VHDL设计的状态机有多种形式,从输出方式上分为Mealy型和Moor型;从结构上分为单进程状态机和多进程状态机;从编码方式上分顺序编码状态机、一位热码编码状态机或其他编码方式状态机。然而一般和最常用的状态机主要包含说明部分、主控时序进程、主控组合进程、辅助进程几个部分。说明部分中使用TYPE语句定义的枚举型的数据类型其元素通常都用状态机的状态名来定义;主控时序进程负责状态机运转和在时钟驱动下进行状态转换的进程;主控组合进程根据外部输入的控制信号(包括状态机外部信号和内部其它非主控组合或时序进程信号),或当前状态的状态值来确定下一状态(取值内容或进程输出控制信号的内容)。辅助进程用于配合状态机工作的组合进程或时序进程。五. 仿真图和仿真分析 如图4所示,该图是一个数据写入操作的时序图,是从FPGA中把数据写到液晶显示器的时序仿真图。本设计中我们用的不是读忙标志来建立数据的,而是采用延迟,由于延迟使得数据有足够的建立时间,并达到稳定之后再写入下一个数据.从时序图我们可知当lcdda为高电平1(对应于RS寄存器),读/写信号为低电平,使能lcden为下降沿的时候数据被建立.按照极限时间计算,从地址的建立、保持和数据的建立、保持,整个过程所需要的时间至少是355ns,而该设计中采用延迟,完成整个过程用了600us的时间,因此该设计完全可以达到要求。与MDLS系列产品时序图相比较,用FPGA驱动液晶显示器的数据写入时序图完全可以实现数据的写入功能。注:为了能在屏幕上清楚的看到数据写入的时序图,设分频系数为2,延迟也为2。图4 FPGA驱动液晶显示器的数据写入时序图结束语: 采用FPGA驱动液晶显示器的设计非常灵活,开发时间短,外围电路少。由于集成度较高,它的体积也就相对比较小。用FPGA来实现液晶显示的驱动,可以获得较高的稳定度和精度,抗干扰能力强。在系统设计中FPGA驱动电路是整个设计的核心内容,它是采用VHDL语言编程来实现它的驱动功能,用Modelsim XE 5.3d软件进行仿真,并在Xilinx公司的Spartan系列的2sc100-6pq208芯片上调试通过。因此设计人员可以充分利用VHDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,而且系统的调试方便,修改容易。有一定的开发及生产价值。附录:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity lcd_driver is generic(N:integer:=2; delay:integer:=2); Port ( clk : in std_logic;reset:in std_logic; secondl:in std_logic_vector(7 downto 0); secondh:in std_logic_vector(7 downto 0); minutel:in std_logic_vector(7 downto 0); minuteh:in std_logic_vector(7 downto 0); hourh:in std_logic_vector(7 downto 0); hourl:in std_logic_vector(7 downto 0); lcdda : out std_logic; lcdrw : out std_logic; lcden : out std_logic;data : inout std_logic_vector(7 downto 0);end lcd_driver;architecture Behavioral of lcd_driver is type state is (set_dlnf,clear_lcd, set_cursor,set_dcb,set_location,write_data); signal current_state:state; type ram is array(0 to 7) of std_logic_vector(7 downto 0); signal dataram :ram; signal clkk:std_logic;begin loaddata:process(clk) beginif rising_edge(clk)thendataram(0)=hourh;dataram(1)=hourl;dataram(2)=00111010;-:dataram(3)=minuteh;dataram(4)=minutel;dataram(5)=00111010;-:dataram(6)=secondh;dataram(7)=secondl;end if;end process;divider:process(clk,reset)variable cnt:integer;beginif reset=0then cnt:=0;elsif rising_edge(clk)thencnt:=cnt+1;if cnt=N then clkk=1;else clkk=0;end if;if cnt=2*N thencnt:=0;end if;end if;end process;control:process(clkk,reset,current_state)variable cntt,cnt2:integer;beginif reset=0thencurrent_statelcden=0;lcdda=0;lcdrw=0;datadelay and cntt=delay*2 then -delay 200us lcden=1; else -delay 200uslcden=0;end if;if cntt=delay*3 thencurrent_statelcden=0;lcdda=0;lcdrw=0;datadelay and cntt=delay*2 then -delay 200uslcden=1; else -delay 200uslcden=0;end if;if cntt=delay*3 thencurrent_statelcden=0;lcdda=0;lcdrw=0;datadelay and cntt=delay*2 then -delay 200uslcden=1; else -delay 200us lcden=0;end if;if cntt=delay*3 thencurrent_statelcden=0;lcdda=0;lcdrw=0;datadelay and cntt=delay*2 then -delay 200uslcden=1; else -delay 200uslcden=0;end if;if cntt=delay*3 thencurrent

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论