Xilinx FPGA学习笔记(1):1602液晶IP核设计与实现

IP核设计

4人已加入

描述

  电子发烧友网核心提示:简单介绍设计的LCD液晶IP核的思路,首先生成100us的时钟,然后根据初始化顺序,编写状态机。最终设计效果是在1602液晶屏上可以静态显示16*2的任意字符串(可显示英文或部分日文或自定义图像),而这只需修改两个参数即可轻松实现。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位命令时需要进行两次写入操作,写入数据的时序图如下所示,

  Xilinx

Xilinx  

  红线所画为两个字节数据写入所需的最小时差(这个需要特别注意)

  根据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的任意字符串—而这只需修改两个参数即可轻松实现。下面是部分代码展示。下图为代码说明。

  Xilinx

  Xilinx

  图 1 写16个字符的代码实现

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

  Xilinx

  图 2 将普通的字符串转换为1602可显示的编码值的模块

  Xilinx

  图 3 生成clk_100us的代码

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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分