基于FPGA的液晶控制器接口课程设计论文_第1页
基于FPGA的液晶控制器接口课程设计论文_第2页
基于FPGA的液晶控制器接口课程设计论文_第3页
基于FPGA的液晶控制器接口课程设计论文_第4页
基于FPGA的液晶控制器接口课程设计论文_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 设 计课 程 硬件课程设计 题 目 液晶控制器接口设计 院 系 计算机与信息技术学院 专业班级 学生姓名 学生学号 指导教师 2009年 7 月 10 日课程设计任务书课程 硬件课程设计题目 液晶控制器接口设计专业 计算机科学与技术 姓名 学号 主要内容、基本要求等一、主要内容:对于实验仪器上所使用的液晶模块使用说明请参看后面第三部分 中文液晶显示模块说明中的详细介绍。整个模块共有四个单元电路组成,分别是:时序发生器、地地址发生器、存储器、控制器。其中:时钟发生器共有三组时钟输出,分别送给:地址发生器,使其产生存储器读地址;存储器,作为输出数据的同步时钟;控制器,作为控制器的工作时钟及

2、输出信号同步时钟。时钟发生器的设计方法与前面实验的设计方法类似,在这里就不再重复了。地址发生器在时钟信号与BUSY信号的共同作用下,产生存储器所需的地址信息。当BUSY信号有效时(BUSY=1),停止输出地址信号;当液晶模块处于空闲状态(BUSY=0)时,输出地址信号。控制器用来产生液晶模块所需的STOBE和存储器输出使能信号。当BUSY信号有效时(BUSY=1),关闭存储器的输出;当液晶模块处于空闲状态(BUSY=0)时,分别送出STOBE=1和存储器输出使能信号,等待BUSY变为1。当BUSY=1时,使STOBE=0,数据传送结束。存储器主要用来存储液晶模块的命令,在同步时钟的作用下,数据

3、同步输出。该存储器可为ROM型,也可以为RAM型。当为ROM型是,其显示模式及显示数据不可变,即只能显示固定的信息;为RAM型时,其显示模块及数据可根据需要任意配置,即可显示出更为灵活及复杂的信息,如实时的波形显示器等。二、基本要求:设计并实现一个128×32的汉字图形液晶显示器的控制器,要求:能够显示几个液晶模块字库中的汉字和ASIC字符三、扩展要求能够显示一个简单的图形。按照规范写出论文,要求字数在4000字以上,并进行答辩。论文内容包括概述(学习、调研、分析、设计的内容摘要)、EDA技术的现状和发展趋势、对EL教学实验箱和Quartus软件的掌握程度、数字钟的设计过程(包括原理

4、图或程序设计、编译、仿真分析、硬件测试的全过程),论文中含有原理图、程序、仿真波形图及其分析报告。完成期限 2周 指导教师 专业负责人 2011年 月 日东北石油大学课程设计成绩评价表课程名称硬件课程设计题目名称液晶控制器接口设计学生姓名学号指导教师姓名职称序号评价项目指 标(优秀)满分评分1选题难度选题难度较高,或者对原题目进行了相当程度的改进。102工作量、工作态度和出勤率工作量饱满,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。103课程设计质量按期圆满的完成了规定的任务,方案设计合理,思考问题全面,系统功能完善。404报告质量问题论述思路清晰,结构严谨,文理通顺,撰写规范

5、,图表完备正确。305回答问题在进行课程设计程序系统检查时,能正确回答指导教师所提出的问题。106创新(加分项)工作中有创新意识,对前人工作有改进或有应用价值。在进行系统检查时能对创新性进行说明,并在报告中有相应的论述。+5总分评语:指导教师: 年 月 日摘 要 如今,科技进步给我们的生活带来了很大的变化。液晶显示设备越来越多,各种各样的液晶显示产品走进我们生活中。从手机到电脑显示器,从掌上电脑到平板电视。无处没有液晶显示技术的身影。液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制

6、器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。本设计是一种基于FPGA(现场可编程门阵列)的液晶显示控制器。与集成电路控制器相比,FPGA更加灵活,可以针对小同的液晶显示模块更改时序信号和显示数据。FPGA的集成度、复杂度和面积优势使得其日益成为一种颇具吸引力的高性价比ASIC替代方案。本文选用MAX7000S系列的EPM7128SLC84-15器件,利用硬件描述语言VHDL设计了液晶显示拧制器,实现了替代专用集成电路驱动控制LCD的作用。关键词: EDA(电子设计自动化),VHDL(硬件描述语言),液晶控制器接口设计,LCD(液晶显示

7、器)。目 录第1章 课程设计内容和要求11.1 设计内容11.2 设计要求11.3 设计目的1第2章 液晶控制器设计方案22.1 设计思路22.2 工作原理及框图22.3 各模块功能描述4第3章 液晶显示器接口底层电路设计63.1设计规划63.2设计说明63.3底层电路程序6第4章 液晶控制器接口的顶层文件设计114.1设计说明114.2 顶层文件程序11第5章 液晶控制器接口设计的测试与运行135.1仿真结果135.2 实验箱验证情况13总结15参考文献16第1章 课程设计内容和要求1.1 设计目的设计并实现一个128×32的汉字图形液晶显示器的控制器,要求:(1)能够显示几个液晶

8、模块字库中的汉字和ASIC字符。(2)能够显示一个简单的图形(选做)。1.2 设计内容 (1)学习掌握液晶显示模块的工作原理及应用。(2)熟练掌握VHDL编程语言,编写液晶显示模块的控制逻辑。1.3 设计要求(1)仿真所编写的程序,模拟验证所编写的模块功能。(2)下载程序到芯片中,硬件验证所设置的功能,能够实现汉字的显示。(3)整理设计内容,编写设计说明书。 第2章 液晶控制器设计方案2.1 设计思路根据指导教师布置的课题,通过参考书籍、查阅手册、图表和文献资料,网络等获取相关的知识后,了解到:液晶显示模块硬件接口协议为请求/应答(REQ/BUSY)握手方式。应答BUSY 高电平(B

9、USY =1)表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BU

10、SY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。2.2 工作原理及框图2.2.1液晶LCD显示器的工作原理:液晶显示器是一种采用了液晶控制透光技术来实现色彩的显示器。从液晶显示器的结构来看,采用的LCD显示屏都是由不同部分组成的分层结构。LCD由两块玻璃板构成,厚约1mm,其间由包含有液晶材料的5um均匀间隔隔开。因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,而在液晶显示屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成的可以发射光线,其作用主要是提供均匀的背景光源。背光板发出的光线在穿过第一层偏振过滤层之后进入包含成

11、千上万液晶液滴的液晶层。液晶层中的液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。在玻璃板与液晶材料之间是透明的电极,电极分为行和列,在行与列的交叉点上,通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小的光阀。液晶材料周边是控制电路部分。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层在屏幕上显示出来。2.2.2设计原理图如下:图2-1 液晶控制器接口设计原理图显示国标汉字:命令格式: F0 XX YY QQ WW。该命令为5字节命令(最大执行时间为1.2毫秒,Ts2=1.2mS),其中:XX:为

12、以汉字为单位的屏幕行坐标值,取值范围00到07、02到09、00到09;YY:为以汉字为单位的屏幕列坐标值,取值范围00到01、00到03、00到04;QQ WW:坐标位置上要显示的GB 2312 汉字区位码。2.2.3设计框图: 下载编程时序仿真在线测试设计处理设计输入功能仿真图2-2 液晶控制器设计框图2.3 各模块功能描述液晶显示模块共有四个单元电路组成,分别是:时序发生器、地地址发生器、存储器、控制器。引脚功能图和内部结构框图分别如图3-3和图3-4所示。图2-3 液晶控制器引脚功能图图2-4 液晶控制器内部结构框图其中,时钟发生器共有三组时钟输出,分别送给:地址发生器,使其产生存储器

13、读地址;存储器,作为输出数据的同步时钟;控制器,作为控制器的工作时钟及输出信号同步时钟。地址发生器在时钟信号与BUSY信号的共同作用下,产生存储器所需的地址信息。当BUSY信号有效时(BUSY=1),停止输出地址信号;当液晶模块处于空闲状态(BUSY=0)时,输出地址信号。控制器用来产生液晶模块所需的STOBE和存储器输出使能信号。当BUSY信号有效时(BUSY=1),关闭存储器的输出;当液晶模块处于空闲状态(BUSY=0)时,分别送出STOBE=1和存储器输出使能信号,等待BUSY变为1。当BUSY=1时,使STOBE=0,数据传送结束。存储器主要用来存储液晶模块的命令,在同步时钟的作用下,

14、数据同步输出。该存储器可为ROM型,也可以为RAM型。当为ROM型是,其显示模式及显示数据不可变,即只能显示固定的信息;为RAM型时,其显示模块及数据可根据需要任意配置,即可显示出更为灵活及复杂的信息,如实时的波形显示器等。第3章 液晶显示器接口底层电路设计3.1设计规划该液晶控制器可显示模块字库中的汉字和ASSIC字符,又具有清零功能。因此。此程序共有两大大模块,汉字显示模块,清零模块。1.汉字显示模块是根据查表对照的方法显示出设计者想要表达的文字。液晶屏上显示的汉字是16*16的像素。2.ASIC字符显示相对汉字来说比较简单。只需要16*8个像素。3.清零功能是强制清除一切记录的功能。3.

15、2设计说明液晶屏幕上是如何显示一些汉字或者是图画,这是我们应该思考的一个问题。在数字电路中,所有数据都是由0、1保存的,同样LCD也是利用这种方法。在点阵LCD上显示的只有两种颜色,因此可用0和1来表示这两种颜色,假设空格是16*16个0组成的,在现实16*16的字体时,将其中某些点置为1便可在视觉上形成汉字,这些二进制数成为代码。与汉字不同的是一个字符只需要16*8的像素便可。3.3底层电路程序3.3.1 清零模块清零模块的功能:实现将地址清零的功能。当clr为0时,将初始地址置为"00000000"。当clr为1时,出现上升沿时,如果addr1为"001111

16、00",则将addr置为"00000001";不出现上升沿时,则将addr加1,以实现地址的循环。如此实现清零模块的功能。清零模块的代码(VHDL)如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all;ENTITY lcd1 is PORT(clr,clk,BUSY: IN std_logic; STOBE : OUT std_logic; dout: OUT std_logi

17、c_vector(7 DOWNTO 0); -实体端口的设计END lcd1;ARCHITECTURE doit OF lcd1 ISsignal counter,addr1: std_logic_vector(7 downto 0); -结构体的信号设计signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begin if(clr='0') then addr1<="00000000" -给地址清零 elsif(busy'event and busy=

18、9;1') then if(addr1="00111100") then addr1<="00000001" -如果出现busy出现上升沿实现地址的赋值 else addr1<=addr1+1; -实现地址的循环 end if; end if;end process P1;P2: process(clr,busy) begin if(clr='0') then addr<="00000000" -地址清零 elsif(busy'event and busy='0') t

19、hen addr<=addr1; -当busy出现下降沿时地址的赋值 end if;end process P2; 由以上程序可发现:如果clr 为1,初始地址被赋值为"000000001",如果busy为1,则准备下一条地址。如果busy为0,则把地址数据传送给存储器,来进行数据的存储。如果clr为0时,地址置"00000000"清零,则实现了清零的功能。3.3.2 汉字显示模块汉字显示模块的原理是:将汉字内码gb2312码存入只读存储器rom中,用下面程序对汉字内码进行调用,则可以将所对应的汉字显示出来。例如汉字“东”的汉字内码为2211,用显

20、示模块二进制将2211表示出来,则可以将汉字“东”显示出来。如此,则可以显示出所需要的汉字。此液晶显示器每行显示六个字,一共两行。另外,由于只读存储器的大小为256*8,所以,当所需要的汉字的内码设置完后,应当用"00000000"对rom进行填充,使其达到256*8的大小,以实现循环,避免产生乱码。汉字显示模块的代码(VHDL)如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all; -

21、调用存储器中的内容ENTITY lcd1 is PORT(clr,clk,BUSY: IN std_logic; STOBE : OUT std_logic; dout: OUT std_logic_vector(7 DOWNTO 0); -实体端口的设计END lcd1;ARCHITECTURE doit OF lcd1 IS -结构体信号的设计signal counter,addr1: std_logic_vector(7 downto 0);signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begi

22、n if(clr='0') then -清零功能的实现 addr1<="00000000" elsif(busy'event and busy='1') then -busy出现上升沿地址的赋值 if(addr1="00111100") then addr1<="00000001" else addr1<=addr1+1; end if; end if;end process P1;P2: process(clr,busy) begin if(clr='0')

23、then addr<="00000000" -清零功能的实现 elsif(busy'event and busy='0') then -busy出现下降沿地址的赋值 addr<=addr1; end if;end process P2;P3: process(busy, clk) begin if(busy='1') then counter<="00000000" -清零 elsif(clk'event and clk='1') then -clock出现上升沿时进行加法

24、计数 counter<=counter+1; end if;end process P3;dout<=rom (CONV_INTEGER (addr);stobe<='1 when counter>="00000011" else '0' END doit;LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE rom IS CONSTANT rom_width: NATURAL :=8; -natural表示大于零的整数 CONSTANT rom_length: NATURAL :=

25、256; SUBTYPE rom_word IS STD_LOGIC_VECTOR(rom_width-1 DOWNTO 0); TYPE rom_table IS ARRAY ( 0 To rom_length-1) of rom_word; CONSTANT rom : rom_table :=rom_table' ("11110000","00000001","00000000","00010110","00001011",-2211“东”用来显示汉字的内码"111100

26、00","00000010","00000000","00010001","00010001",-1717“北”"11110000","00000011","00000000","00101010","00001111",-4215“石”"11110000","00000100","00000000","00110011",&q

27、uot;00101101",-5145“油”"11110000","00000101","00000000","00010100","01010011",-2083“大”"11110000","00000110","00000000","00110001","00000111",-4907“学”-所需要显示的汉字内码输入完整后,为了避免出现乱码,必须用"00000000&quo

28、t;将256*8的只读存储器rom将存储器填满,以实现地址的循环,且不出现乱码。"00000000","00000000","00000000","00000000", -如此填充,为保证rom总共的大小为256*8END rom;为节省空间,大小为256*8的内码只显示主要内容,用"00000000"填充的其它部分,不再作一一显示,用省略号表示。只需保证该只读存储器rom的真正大小为256*8即可。另外,根据汉字gb2312码更改只读存储器rom中的内容可以相应地更改显示汉字的字数和内容;利用

29、点阵列,则可以显示字符;用英文码,则可以显示英文其它显示命令格式如下(不做一一列举):(1)显示8X8 ASCII字符命令格式:F1 XX YY AS该命令为4字节命令(最大执行时间为0.8毫秒,Ts2=0.8mS),其中XX:为以ASCII码为单位的屏幕行坐标值,取值范围00到0F、04到13、00到13YY:为以ASCII码为单位的屏幕列坐标值,取值范围00到1F、00到3F、00到4FAS:坐标位置上要显示的ASCII 字符码(2)显示位点阵命令格式: F2 XX YY 该命令为3字节命令(最大执行时间为0.1毫秒,Ts2=0.1mS),其中XX:为以1*1点阵为单位的屏幕行坐标值,取值

30、范围00到7F、20到9F、00到9FYY:为以1*1点阵为单位的屏幕列坐标值,取值范围00到40、00到40、00到40第4章 液晶控制器接口的顶层文件设计4.1设计说明所谓建立顶层文件就是将已经设计好的各个功能组件组合调用,连成一个整体,使整个系统按照设计要求在实际中工作起来。而此程序中的顶层文件即是将清零模块和汉字内码显示模块结合起来,使其实现清零和显示汉字的两大功能。具体操作:将汉字显示的内码存入到大小为256*8的只读存储器rom中,然后再在清零模块的程序中对该只读存储器rom进行调用。在一个工程中用两个.vhd文件分别存入顶层文件程序和只读存储器rom的程序即可。如此,便将清零模块

31、和汉字显示模块连成了一个整体。在液晶显示器中便可实现清零和显示汉字的两个功能。4.2 顶层文件程序代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.all;USE work.rom.all;ENTITY lcd1 is -实体端口的设计 PORT(clr,clk,BUSY: IN std_logic; STOBE : OUT std_logic; dout: OUT std_logic_vector(7 DOWNTO 0);END lcd1

32、;ARCHITECTURE doit OF lcd1 IS -结构体信号的设计signal counter,addr1: std_logic_vector(7 downto 0);signal addr : std_logic_vector(7 DOWNTO 0);BEGINP1: process(clr,busy) begin if(clr='0') then -清零功能的实现 addr1<="00000000" elsif(busy'event and busy='1') then -busy出现上升沿地址的赋值 if(ad

33、dr1="00111100") then addr1<="00000001" else addr1<=addr1+1; end if; end if;end process P1;P2: process(clr,busy) begin if(clr='0') then -强制清零功能的实现 addr<="00000000" elsif(busy'event and busy='0') then -busy出现下降沿地址的赋值 addr<=addr1; end if;end

34、 process P2;P3: process(busy, clk) begin if(busy='1') then -清零功能的实现 counter<="00000000" elsif(clk'event and clk='1') then -clock出现上升沿时开始计数 counter<=counter+1; end if;end process P3;dout<=rom (CONV_INTEGER (addr);stobe<='1' when counter>="00000011" else '0' END doit;最后创建一个工程,在里面新建两个.vhd文件,一个用

温馨提示

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

最新文档

评论

0/150

提交评论