由LCD液晶显现器制造的显现面板广泛运用于军用设备中,本规划选用Spartan-3E FPGA为硬件,该2×16字符型LCD内嵌一个Sitronix ST7066U图形操控器,完成了LCD显现器的字符或许汉字的满屏显现、满屏移动显现以及单个字符在屏幕上的移动显现,一切功用用VHDL言语完成,契合LCD显现器要求,到达各种显现作用。
因为LCD 液晶显现器体积小、分量轻、功耗低,运用十分广泛,如作为飞机、坦克和船上的显现面板,可缩小原CRT显现器的所占空间,减轻设备分量,增强机动性。
本规划选用Spartan-3E开发板上的一个内嵌Si.tronix ST7066U图形操控器的字符型LCD,完成了:(1) 单个字符在恣意方位的显现以及字符的满屏显现及满屏移动显现;(2) 自界说字符(汉字)的显现以及单个字符的满屏移动显现。其间,图形操控器[1]担任接纳操控指令及数据并将其发送给LCD显现器。
1 Sitronix ST7066U 图形操控器
该操控器有三个内部存储空间,DD RAM、CGROM、CG RAM,送数据之前应先初始化。
(1)DD RAM(显现数据RAM)
存储字符编码,从物理上讲DD RAM共有80个字符方位,每行有40个字符,但只要16个可被显现,剩下的24个不被显现。在读或写之前,需初始化地址计数器,地址计数器在读或写之后可坚持常数或许主动增1或减1。
(2)CG ROM(字符产生器ROM)
包含每个事前定好的字符的字体位图。
(3)CG RAM(字符产生器RAM)
包含8位的自界说字符位图,每个自界说字符位由8行位图的5个点组成,详细用法与DD RAM相同。
1.1 与FPGA 的接口信号
LCD与FPGA的接口信号[2]有:(1)使能信号LCD_E;(2)寄存器挑选信号LCD_RS;(3)读/写操控信号LCD_RW;(4)4根LCD数据线与StrataFlash数据线SF_D《11:8》复用。
1.2 时序剖析
SF_D《11:8》的数据值,LCD_RS、LCD_RW有必要树立并在LCD_E 转向高电平之前至少安稳40 ns,LCD_E 保存高电平时刻至少230 ns。在许多运用中,LCD_RW恒置低,因为一般不会从显现屏读取数据。
如图1所示,数据以8位方式传送,分为高4位和低4位,先传高4位再传低4位,其间隔时刻至少1us。一个8位的写操作鄙人个通讯之前间隔时刻至少为40 us,而在清屏指令之后该延时需增至1.64 ms。
图1 字符型LCD 接口时序图
2 数据显现规划
2.1 流程图
如图2所示,LCD数据显现包含上电初始化、装备显现屏、写数据给显现屏,在写数据之前应先设定初始地址。
图2 LCD 显现流程图
本开发板晶振为50 MHz。
详细完成过程如下:
1. 上电初始化
上电后显现屏需树立通讯协议即初始化,意图在于树立FPGA与LCD的4位数据接口,详细如下:
(1)等候至少15 ms,即750000个时钟周期。
(2)写SF_D《11:8》=0x3,LCD_E坚持高电平12个时钟周期。
(3)等候至少4.1 ms,即205000个时钟周期。
(4)写SF_D《11:8》=0x3,LCD_E坚持高电平12个时钟周期。
(5)等候至少100 us,即5000个时钟周期。
(6)写SF_D《11:8》=0x3,LCD_E坚持高电平12个时钟周期。
(7)等候至少40 us,即2000个时钟周期。
(8)写SF_D《11:8》=0x2,LCD_E坚持高电平12个时钟周期。
(9)等候至少40 us,即2000个时钟周期。
2. 显现屏装备
依据字符型LCD的指令设置而确认发送数据。
(1)发功用设置指令0x28,装备显现屏。
(2)发进入形式指令0X06,显现屏设置为主动增地址指针,设置指针移动方向为向左且规则不移动显现。
(3)发显现开/断指令0x0c,将显现字符的地址存储在DD RAM中。
(4)终究发清屏指令,尔后等候时刻至少为1.64 ms。
3. 写数据给显现屏
详细过程如下:
(1)先指定初始地址即发送一个设置DD RAM地址指令给DD RAM中指定的初始7位地址。
(2)再发送一个或多个数据值即运用DD RAM指令写数据给显现屏。8位数据值经过查表地址送给CG RAM,CG RAM中存储的位图驱动5×8点阵给相应的字符。
假如地址计数器装备为主动增1,则可顺次写多个字符编码,每个字符主动存储并显现鄙人个方位,持续写字符直至在榜首行的终究中止,而剩下的数据不会主动在第二行显现,因为DD RAM的映射从榜首行到第二行不接连。
2.2 程序规划完成
依照上面的过程,先对LCD上电初始化,再进行装备,装备不同显现作用也不同。
1. 单个字符的显现
先设定一个DD RAM地址指令为初始地址,依据给定的指令知首地址为“10000000”, 紧接着往CG RAM中写数据,经过严格操控时序联系到达单个字符的显现。默许地址设置为主动递加,若在初始地址的基础上递加,则显现字符就会变到相应的方位。例如:若首地址设为“10000001”,则显现字符就会呈现在第2个方位。
2. 字符的满屏显现及满屏移动显现
在显现单个字符的基础上经过不断的写数据到LCD显现器中就会到达满屏显现的作用。
装备显现屏时,第二步设置形式指令0X06(00000110)时,最低位界说是否移动显现,若将最低位改为1时,则会呈现满屏左移或右移的现象。
3. 自界说字符(汉字)的显现
ASCII码表不能满意需求时用户需求自界说,如汉字的显现。详细过程如下:
(1)初始化CG RAM地址;
(2)往CG RAM中写入汉字对应的字模信息;
(3)树立好字模后,往DD RAM中写索引值,规模为(0x00~0x07),则新建的字符就会显现出来。
图3 自界说字符的显现
初始化CG RAM 地址时,指定指令为“01XXXXXX”,低三位代表字模信息的行数,紧接着的三位代表索引到DD RAM中的地址。写字模信息时,数据位为“XXX D4D3D2D1D0”,高三位0,1都能够,低五位为字模信息。如图3 所示,显现“口”时,需求三行字模信息1C、14、1C,即写入的数据应为:“00011100”、“00010100”、“00011100”。
4. 单个字符在整个屏幕上的移动显现
能够完成移动显现的办法有两种[3]:
(1)将前一个方位显现的字符清除去,鄙人个方位显现相同的字符到达移动显现的作用,这需求运用清屏指令来完成;
(2)经过程序规划来操控:对前一个方位显现的字符进行判别,若显现的不是空白内容,则将显现空白内容的数据赋给本来的显现字符,这样本来显现字符的方位上就会呈现空白内容,再经过程序判别当时方位的字符,若为空白内容则将本来显现字符的数据赋给它。因为地址设为主动递加,故鄙人一个方位上就会呈现与本来相同的字符,顺次类推,终究成果便是单个字符在整个屏幕上的移动显现。
榜首种办法每次运用清屏指令后,地址返回到初始地址,而写下一个字符时有必要返回到未运用清屏指令之前的地址,但因为在装备显现屏时现已将地址设为主动递加,因而选用这种办法程序操控[4]较杂乱,故选用第二种办法。
要害程序代码如下:
If Dat=“00110001”then —- “00110001”显现“1”;
Dat:=“00100000”; —“00100000”显现空白内容;
w_state 《= wr64;
elsif Dat = “00100000” thenDat := “00110001”;
w_state 《= wr85;
end if;
因为显现屏上每行只要16 个字符能够显现,所以要想到达在整个屏幕上移动显现,需求对地址精确操控。
地址操控详细过程:从榜首行的第1个方位开端逐次加1,当到第16个方位时,将地址加24使其跳到第二行的第1个方位,紧接着从第二行的第1个方位开端逐次加1直到第16个方位,当到了第二行的第16个方位时将地址再返回到初始地址即榜首行的榜首个方位。程序代码如下:
if cPos 《 “10001111” then — cPos 为指向地址的变量
cPos := cPos+1; —榜首行时逐次加1
elsif cPos = “10001111”then —-榜首行终究1方位跳到第二行第1个方位
cPos := “10101000”;
elsif cPos 《 “10110111”then
cPos := cPos+1; —第二行时逐次加1elsif cPos = “10110111”then — 返回到初始地址
cPos := “10000000”;
end if;
字符的移动显现需用动画演示,图4仅列出四个特别方位的显现作用图。
图4 单个字符的满屏移动显现图
3 结语
本规划完成了字符型液晶显现器的多样化显现,立异点是:单个字符的满屏移动显现没有选用传统的清屏指令而是选用显现空白内容与非空白内容的替换赋值来完成。因为能够对该显现器进行屡次编程,能方便地运用于实践,满意现代化的要求。