代码下载
版本3.0: lcd_controller.vhd (6.4 KB)
新增通过泛型参数配置LCD功能
版本2.0: lcd_controller_v2.vhd (8.0 KB)
版本1.0已停止提供。
实例化lcd_controller.vhd组件并向LCD模块写入"123456789"的示例: lcd_example.vhd (3.3 KB)
简介
该LCD控制器是用于CPLD和FPGA的VHDL组件。控制器负责管理HD44780兼容8位接口字符型LCD模块的初始化和数据流。主要依据Lumex LCD通用信息数据手册开发。此VHDL组件示例可轻松将LCD集成到几乎所有可编程逻辑应用中。图1展示了实现LCD模块与用户自定义逻辑之间接口的控制器。
图 1. PLD中的LCD控制器实现
状态机
LCD控制器状态机包含五种状态。启动后立即进入上电状态,等待50ms确保供电电压稳定。随后进入初始化状态。控制器循环执行LCD初始化序列,将LCD参数设置为硬件定义的默认值。该过程约2.2ms完成,随后控制器进入就绪状态。在此状态等待直至lcd_enable输入有效,然后转入发送状态。在此根据lcd_bus输入定义,向LCD传输相应信息。50微秒后返回就绪状态,直至收到新指令。若在任意时刻向reset_n输入施加至少一个时钟周期的低逻辑电平,控制器将复位至上电状态并重新初始化。图2展示了LCD控制器状态机。
图 2. LCD控制器状态机
端口描述
表1描述了LCD控制器的接口。
表 1. LCD控制器输入输出描述
初始化
每次上电或reset_n引脚解除置位达至少一个时钟周期时,LCD控制器会执行初始化序列。控制器在初始化期间会置位busy引脚。初始化完成后,busy引脚解除置位,LCD控制器进入就绪状态等待用户逻辑输入。
初始化序列通过四条指令设定若干LCD参数:
- 功能设置(设定4位/8位显示、显示行数与字符字体)
- 显示开关控制(开启/关闭显示、光标及光标闪烁)
- 显示清屏(清除显示内容)
- 输入模式设置(设定递增/递减模式及开启/关闭位移)
参数值通过ENTITY中的GENENIC参数设定。表2描述了相关参数。用户也可在初始化后发送指令修改LCD参数。
表 2. 通用参数说明
事务
busy引脚解除置位后,LCD控制器进入就绪状态。用户逻辑可通过lcd_enable和lcd_bus引脚与LCD模块进行交互。用户通过向lcd_bus发送所需数据/指令并激活lcd_enable引脚来启动此过程。随后LCD控制器会置位busy引脚并管理该事务。完成后,控制器将取消busy引脚的置位,表示已准备好接收下一条指令。图3展示了事务启动阶段的时序图。
图 3. 事务时序图
结论
所提供的LCD控制逻辑负责管理用户自定义逻辑与HD44780兼容字符型LCD模块8位接口模式之间的初始化和数据流。用户可通过设置ENTITY中的GENERIC参数来配置系统时钟频率及修改默认初始化参数。
补充资料
LCD General Information; Lumex, Inc. (880.2 KB)
HD44780U (LCD-II); Hitachi, Ltd. (297.4 KB)