基于fpga的lcd显示控制系统的设计内容摘要:

系统设计总体框图 系统设计总体框图如图 41 所示,在系统上电后, FPGA 将首先对系统进行初始化操作,在初始化操作中最重要的是寄存器的复位,显示开关的控制,功能设置以及对显示屏幕进行清屏。 之后通过显示控制模块对 LCD 进行显示的控制。 显示控制模块主要负责在 LCD 显示多行字符时进行换行操作,在用户指定数据在屏幕的指定显示位置时设置该位置所对应的 RAM 的值,以及在图像显示时进行的 ROM 地址重映射算法,和对 LCD 显示区对应 RAM 进行的写入 操作。 其中的数据分别来自中英文字符模块,动态数据模块,以及图像数据模块。 对此模块的设计,主体结构以状态机来实现 ,如图 31 所示 图 41 系统设计总体框图 系统硬件资源选用 液晶模块选用 本设计选用了 带 ST7920 驱动的 LCD1286412 模 块来进行设计和调试。 该模天津工业大学本科毕业论文 第三章 [XXXX...] 块自带字库。 其中, 1286412 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 8192个中文汉字( 16X16 点阵), 128 个字符( 8X16 点阵)几 64X256 点阵显示RAM(GDRAM)。 [点击输入一级标题 标题 2] [点击输入 正文 ] 天津工业大学本科毕业论文 第四章 [XXXX...] 第四章 系统 软件 设计 本章首先对该系统的各个模块的设计思路进行描述,并给出框图。 首先介绍了初始化模块的设计,然后介绍了分别针对字符以及图片的写入数据模块。 之后介绍了本设计中最关键的显示控制模块,并列举了详细的设计方法。 最后给出系统设计的整体 Block Diagram。 初始化模块设计 LCD模块初始 化设计 对 1286412 模块的初始化采用状态机的方式,通过资料中给出的 1286412模块的说明,选择所需要的初始化命令,结合特定的时钟频率,对 LCD 进行初始化。 最终使屏幕清屏,显示区对应 RAM 复位, LCD 的功能则设置为所需要的功能。 其中,字符显示模块的初始化流 程图如图 41 所示 : 图 41字符初始化流程图 其中直至写数据这一步骤之前都为起始的初始化动作。 与字符显示不同,图天津工业大学本科毕业论文 第四章 [XXXX...] 片的现实需要使用特殊指令集中的指令,因此需要在功能设定时做出改动。 而同时,在对 GDRAM 的地址以及内容进行操 作时,必须保持绘图显示的关闭状态,因此在初始化时,需要将绘图显示关闭。 但是由于写数据这一指令属于常规指令集,因此在设置完 GDRAM 地址后,需要重新使用功能设定,将指令集的使用改回常规指令集。 当数据全部写入完毕,则可以通过再次使用特殊指令集,开启图像显示,将 GDRAM 中的数据显示在屏幕上。 图片显示模块的初始化流程图如图 42 所示 : 图 42 图片显示初始化流程图 天津工业大学本科毕业论文 第四章 [XXXX...] 时钟模块初始化设计 由 LCD 初始化的流程图可得大部分指令的执行时间为 72us,而清除显示和地址归位则需要 ,为 72us 的 64 倍左右,因此需要选择一个合适的时钟来作为 ENABLE 信号的输入。 时钟电路的设计: 由于 FPGA 开发板上自带的晶振频率为 50MHZ,而所需要的时钟频率则需要小于 ,因此需要一个分频器对其进行分频。 这里采用简单的计数器对其进行分频,计数器上限经过计算设为 ,满足实验需要。 在分频之后由于时钟信号需要同时控制 LCD 模块以及 FPGA 的模块,因此需要编写一个程序,使得两者之间同步。 最终的时钟控制模块如 图 43 所示 : 图 43 时钟模块 其中 CLOCK_LOGIC模块的设计通过几个触发器来实现,部分程序如下: ponent DFF port( d : in std_logic。 clk: in std_logic。 q : out std_logic)。 end ponent。 signal sig1,sig2,sig3 : std_logic。 begin sig1= not sig2。 sig3= not clock。 out_clk= sig2。 mydff1 : DFF port map (d=sig1,clk=clock, q=sig2)。 mydff2 : DFF port map (d=sig2,clk=sig3, q=enable)。 天津工业大学本科毕业论文 第四章 [XXXX...] 字符显示前初始化模块的设计 初始化部分的状态机设计 根据字符模块初始化的流程图 如图 44 所示 : 图 44 LCD初始化流程图 因此,此部分的状态机设计如下: „ when IDLE= 空闲状态 if flag =39。 039。 then state = CLEAR。 flag=39。 139。 else state=IDLE。 end if。 when CLEAR= 清屏状态,使 LCD 屏幕上显示全白 if div_counter2 DIVSS2 then DIVSS2 为 64,由于清屏状态所需要的执div_counter2 = div_counter2+1。 行时间为普通指令的 64 倍,因此采用 state=CLEAR。 一个 0 到 64 的计数器对其进行延迟处理 else div_counter2 =0。 天津工业大学本科毕业论文 第四章 [XXXX...] state=RETURNCURSOR。 end if。 when RETURNCURSOR= 地址归位,使 DDRAM 地址复位 if div_counter2 DIVSS2 then 这里和清屏状态一样,需要延迟 64 倍的时div_counter2 = div_counter2+1。 钟时间 state=RETURNCURSOR。 else div_counter2 =0。 state=SETMODE end if。 when SETMODE= 点设置,选择整体画面的移位方式 state=SWITCHMODE。 when SWITCHMODE= 显示状态开 state=SHIFT。 when SHIFT= 控制游标的移动和显示移位 state=SETFUNCTION。 when SETFUNCTION= 功能设置 state=SETDDRAM1。 when SETDDRAM1= 设置 DDRAM 地址 state=WRITERAM。 „ 其中,由于时钟信号的周期约为 80us,而 CLEAR 清屏和 RETURNCURSOR 点设定这两个操作需要 的操作时间,因此在这两个状态中加入了计数器用以延迟,延迟时间为时钟周期的 64 倍,约为 LCD的响应速度。 字符显示的数据选择  清除显示(对应状态机状态为 CLEAR)对应的数据接口的数据( DB7~DB0)为 00000001, RS,RW为 0;  地址归位(对应状态机状态为 RETURNCURSOR)对应 (DB7~DB0)的数据为00000010, RS,RW为 0;  点设定(对应状态机状态为 SETMODE)选择整体画面不移位, DDRAM地址 +1,因此对应 DB7~DB0数据为 00000110, RS,RW为 0;  显示状态开(对应状态机状态为 SWITHMODE),光标显示关,字符不反白,因此对应 DB7~DB0数据为 00001100, RS,RW为 0; 天津工业大学本科毕业论文 第四章 [XXXX...]  游标和显示控制(对应状态机状态为 SHIFT)选择 AC=AC+1,因此对应DB7~DB0数据为 00010100, RS,RW为 0;  功能设定(对应状态机状态为 SETFUNCTION)选择 8为数据线接口,以及基本指令集动作,因此对应 DB7~DB0数据为 00110000, RS,RW为 0;  DDRAM(对应状态机状态为 SETDDRAM)地址的设定则根据需要设定,对应 DB7~DB0数据为 10000000~10011111之间, RS为 1, RW为 0; 另外,根据模块引脚说明, FPGA 还需要同时控制其他几个引脚。 其中,为了选择并行的数据发送模式 , PSB 引脚应为 H。 RET 引脚则由 FPGA 控制在经过一段时间的 L 复位后跳为 H。 初始数据的赋值: psb=39。 139。 rs=39。 139。 when state = WRITERAM or state = READRAM else 39。 039。 当状态为读写 RAM 时, RS 为 1 rw=39。 039。 when state = CLEAR or state = RETURNCURSOR or state = SETMODE or state = SWITCHMODE or state = SHIFT or state = SETFUNCTION or state = SETCGRAM or state = SETDDRAM or state = WRITERAM else 39。 139。 当状态为如上时, RW 为 0 data=00000001 when state = CLEAR else 00000010 when state = RETURNCURSOR else 00000110 when state = SETMODE else 00001amp。 open_displayamp。 open_curamp。 blank_cur when state = SWITCHMODE else 00010100 when state = SHIFT else 001amp。 datawidth8 amp。 39。 039。 amp。 exinstruction_offamp。 00 when state = SETFUNCTION else 10000000 when state = SETDDRAM else …… 图片显示前初始化模块的设计 图片显示初始化的状态机设计 图片显示时需要用到扩充指令集。 在基本指令集设置的时候需要将SETFUNCTION,功 能设计,中的 RE 设为 1. 而在扩充指令集的功能设定中也要将 RE 设为 1,同时在显示模块写入图片数据时,需要将图片显示关闭,然后转入基本指令集进行数据的写入,直至写入数据完毕再使用扩充指令集,打开图片天津工业大学本科毕业论文 第四章 [XXXX...] 显示。 因此,其状态机设计与字符显示不同的部分如下: … when SHIFT= 游标和显示移位,这一部和字符显示部分一样 state=SETFUNCTION1。 when SETFUNCTION1= 设置 8 位数据传输方式 state=SETFUNCTION2。 when SETFUNCTION2= 启用特殊指令集 if flag_p=39。 039。 then 这个选择结构用于选择打开或者关闭显示, state=DRAWFUNOFF。 默认为关闭显示,只有当图像数据写入完成 else 才会使 flag_p 等于 1,这时打开显示。 state=DRAWFUNON。 end if。 when DRAWFUNOFF= 关闭显示 state=SETGDRAM。 … when SETGDRAM= 设置 GDRAM 起始地址 state=DRAWFUNR。 when DRAWFUNR= 在使用写入数据命令前,必须转会常规指令集 state=CLEARRAM。 使 GDRAM 中数据清 0 … 图片显示初始化数据的选择 其中与字符显示不同的指令集数据如下:  功能设定 1(对应状态机状态为 SETFUNCTION1)选择 8为数据线接口,以及特殊指令集动作,因此对应 DB7~DB0数据为 00110100, R。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。