首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Xilinx学习笔记之四---1602液晶IP核设计

Xilinx学习笔记之四---1602液晶IP核设计

1602为常见的液晶显示设备,本实验所用的规格为16x2字符型驱动,直观图如下所示。

上图为本人已完成的LCD液晶驱动显示效果(可以显示任意字符串),由两行组成,可以显示英文字符,部分日语,也可以显示自定义的图像,Spartan-3E所用的1602 (Sitronix ST7066U graphics controller)与FPGA的接口如下所示:
信号说明:
其中SF_D为4位的数据接口位,LCD_E为液晶显示或者不显示控制位,LCD_RS为区分控制或数据信号标志位,当LCD_RS = ‘0’时,表示SF_D为控制信号,LCD_RS=’1’此时SF_D为数据位,LCD_RW为读写控制位,因为不需要从LCD液晶屏中读取数据所以可以简单的再复位操作时,将其清零即可。
可以看出,此1602的数据位为4位,故要写入8位命令时需要进行两次写入操作,写入数据的时序图如下所示,

红线所画为两个字节数据写入所需的最小时差(这个需要特别注意)
根据Spartan-3E的GUIDE,可以知道1602工作的基本流程主要分为上电初始化、写命令、设置读写地址、传递数据三大过程,笔者统计了下这三大步骤中的等待时间最小值和最大值,其中最小值为40us,最大值为15ms,故笔者采取了将50MHZ的时钟分频为10KHZ,即时钟周期为100us的方法来简化设计。
在Spartan-3E的用户手册上详细讲解了如何对此液晶进行操作,笔者做了简单的摘要:
一) 上电初始化(目的是建立宽度为4 bit的数据接口)
1) 等待15ms或者更长时间
2) 写命令字0x3,保持LCD_E高电平12个周期(时钟频率为50MHZ时)
3) 等待4.1ms或者更长时间
4) 写命令字0x3,保持LCD_E高电平12个周期
5) 等待100us或者更长时间
6) 写命令字0x3,保持LCD_E高电平12个周期
7) 等待40us或者更长时间
8) 写命令字0x2,保持LCD_E高电平12个周期
9) 等待40us或者更长时间
二) 写命令
1) 发送功能设置命令(Function Set),0x28
2) 发送端口模式设置命令(Entry Mode Set),0x06,自动增加地址指针
3) 发送Display ON/OFF命令,0x0C,打开显示开关并禁止光标闪烁
4) 发送Clear Display命令,等待1.64ms或者更长时间
三) 设置读写地址和传递数据
指定起始地址,并给出一个或者多个数据,这一步是显示的关键,必须仔细设置控制位,笔者就是因为这个错误,白白花费了大半天的时间,具体方法是在写任何数据之前,发送Set DD RAM Address 命令,(写入7位的DD RAM地址,注意最高位为1)然后再写入数据。
简单介绍我所设计的LCD液晶IP核的思路,首先生成100us的时钟,然后根据初始化顺序,编写状态机。最终设计效果是在1602液晶屏上可以静态显示16*2的任意字符串—而这只需修改两个参数即可轻松实现。下面是部分代码展示。下图为代码说明。

图1所示为写16个字符的代码实现,图2所示为将普通的字符串转换为1602可显示的编码值的模块,图3所示为生成clk_100us的代码,

最终效果图是在屏幕上显示两行字符串:


来源:jefby的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
共同努力,共同学习!-----------中电网技术论坛
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表