新闻中心

EEPW首页 > 光电显示 > 设计应用 > FPGA的LCD液晶显示器设计

FPGA的LCD液晶显示器设计

作者:时间:2017-10-20来源:网络收藏

  由制作的显示面板广泛应用于军用设备中,本设计采用Spartan-3E 为硬件,该2×16字符型内嵌一个Sitronix ST7066U图形控制器,实现了显示器的字符或者汉字的满屏显示、满屏移动显示以及单个字符在屏幕上的移动显示,所有功能用VHDL语言实现,符合LCD显示器要求,达到各种显示效果。

本文引用地址:http://www.eepw.com.cn/article/201710/366536.htm

  由于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 与 的接口信号

  LCD与的接口信号[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 结语

  本设计实现了字符型的多样化显示,创新点是:单个字符的满屏移动显示没有采用传统的清屏命令而是采用显示空白内容与非空白内容的交替赋值来实现。由于可以对该显示器进行多次编程,能方便地应用于实际,满足现代化的要求。



关键词: FPGA LCD 液晶显示器

评论


相关推荐

技术专区

关闭