有关FPGA的毕业论文(6)

2019-02-20 20:43

天津工业大学本科毕业论文 第四章 [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<='1';

rs<='1' when state = WRITERAM or state = READRAM else '0'; -- 当状态为读写RAM时,RS为1

rw<='0' 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 '1'; --当状态为如上时,RW为0

data<=\

\ \

\

SWITCHMODE else

\

\

SETFUNCTION else

\……

4.1.4 图片显示前初始化模块的设计

1、图片显示初始化的状态机设计

图片显示时需要用到扩充指令集。在基本指令集设置的时候需要将

SETFUNCTION,功能设计,中的RE设为1. 而在扩充指令集的功能设定中也要将RE设为1,同时在显示模块写入图片数据时,需要将图片显示关闭,然后转入基本指令集进行数据的写入,直至写入数据完毕再使用扩充指令集,打开图片

天津工业大学本科毕业论文 第四章 [XXXX...]

显示。

因此,其状态机设计与字符显示不同的部分如下: …

when SHIFT=> --游标和显示移位,这一部和字符显示部分一样

state<=SETFUNCTION1;

when SETFUNCTION1=> --设置8位数据传输方式 state<=SETFUNCTION2;

when SETFUNCTION2=> --启用特殊指令集

if flag_p='0' 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 …

2、 图片显示初始化数据的选择

其中与字符显示不同的指令集数据如下:

? 功能设定1(对应状态机状态为SETFUNCTION1)选择8为数据线接口,以及

特殊指令集动作,因此对应DB7~DB0数据为00110100,RS,RW为0;(由于对此指令集的更改,改动了2个数据,需要2个时钟周期,因此增加一个同样的状态SETFUNCTION2)

? 特殊功能设定(对应状态机状态为DRAWFUNR)选择绘图显示关,以及基

本指令集动作,因此对应DB7~DB0数据为00110000,RS,RW为0; ? 绘图显示开(对应状态机状态为DRAWFUNON)选择绘图显示开,以及特

殊指令集动作,因此对应DB7~DB0数据为00110100,RS,RW为0; ? 绘图显示关(对应状态机状态为DRAWFUNOFF)选择绘图显示关,以及基

天津工业大学本科毕业论文 第四章 [XXXX...]

本指令集动作,因此对应DB7~DB0数据为00110100,RS,RW为0; 对应的赋值部分程序如下: …. Data<=

\SETFUNCTION else

\SETFUNCTION1 else

\SETFUNCTION2 else

\ \ \ \

4.2 写入数据模块设计 4.2.1英文字符部分的数据模块

由于12864-12模块提供了从02H到7FH的半宽字符,包括英文大小写以及数字和符号,因此,需要编写合适的程序已方便使用者方便地调用以及使用。

设计采用访问RAM的方式对英文字符进行调用。显示控制模块在每一个时钟信号来的时候输出一个地址,这个地址在每一个时钟信号过后都自动加1.而这个地址则作为RAM的输入地址。相应的RAM返回给显示控制模块所对应的数据。

模块设计示意图如图4-5所示:

天津工业大学本科毕业论文 第四章 [XXXX...]

图4-5写入数据模块设计示意图(字符)

而RAM在设计的时候采用函数的方式,函数将负责自动辨识用户输入的英文符号,并将其转换为对应数据。如下程序所示,若想改变显示的内容只需要改变进程中每一行末尾char_to_integer函数括号中的内容即可。

函数中包括所需要显示的字符,即26个小写英文字符及26个大写英文字符和部分标点符号,以及其所对应的数据。

函数程序如下

function char_to_integer(indata : character) return integer is variable result : integer range 0 to 16#FF#; begin

case indata is

when ' ' => result := 16#20#; when '.' => result := 16#2E#; when ':' => result := 16#3A#; when 'a' => result := 16#61#; when 'b' => result := 16#62#; when 'c' => result := 16#63#; when 'd' => result := 16#64#; ...

when 'X' => result := 16#58#; when 'Y' => result := 16#59#;

天津工业大学本科毕业论文 第四章 [XXXX...]

when 'Z' => result := 16#5A#; when others => result := 16#20#; end case; return result; end function;

当程序运行时,每当一个时钟信号来临,显示控制模块的输出地址自动加1,并且把地址传输到输入字符模块,模块通过输入地址的加1,从第一个字符数据开始输出对应数据,直到控制模块所设定的输出字符数为止。其中对没有在模块中定义的地址,一致输出“ ”所对应的数据,即16*8的空白。

以显示“This is a simple test for LCD Display.”为例核心程序如下: if(clk2'event and clk2='0') then case address is

when \ when \ when \ when \ when \ when \

when \ when \ when \ when \ when \ when others =>data<=conv_std_logic_vector (char_to_integer (' '),8); end case; end if; …

模块示意图如图4-6所示:


有关FPGA的毕业论文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:单因变量方差分析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: