作者:FPGA技术实战
引言:本文通过以LCD1602液晶显示模块为基础,介绍FPGA驱动LCD1602原理,详细介绍硬件原理图设计及FPGA驱动LCD1602软件设计,通过万年历功能综合实现时钟功能、LCD1602显示功能。
图1:常见的LCD1602款式
LCD1602由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。从图2中COM信号、SEG信号可以看出,LCD1602的驱动原理与数码管本质上是类似的,只不过其内部LCD驱动电路实现了对数据的解码,用户只需按照控制接口简单输入要显示的数据即可。
常用的类型有16×1,16×2,20×2和40×2等的模块。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的,本文以16×2为例进行介绍。
显示字符容量:16×2个字符,即显示两行字符,每行16个字符;
工作电压:4.5V~5.5V(最佳工作电压5.0V),典型电流2mA@5.0V;
LCD1602尺寸大小如图3所示。
信号接口定义说明如下表所示。
管脚说明:
管脚1,2,为电源管脚,15,16为背光管脚,均推荐5.0V供电; 管脚3为,对比度调节管脚,需提供偏压电压。其用于LCD1602液晶屏对比度控制,该管脚电压在1.2V±0.1V左右显示对比度较佳,硬件连接是建议采用滑动变阻器对其电压进行控制; 管脚4 RS,为数据,命令选择管脚:H:数据选择,L:命令选择; 管脚5 R/W,为读写管脚:H:读操作,L:写; 管脚6 E,为是能管脚,该信号下降沿有效时,数据传输给内部模块; 管脚7~14 D0~D7,为数据或命令。
(1)LCD1602内部RAM地址映射图
LCD1602内部控制器带有80×8位(80字节)的RAM缓冲区如图5所示。LCD1602内部字符表编码如图6所示。
初始化设置指令:
显示模式设置指令38H:
显示开/关、光标功能
控制器内部设有一个数据指针,用户可以通过他们方位内部的全部80字节RAM。
数据指针设置:即如果要在01位置显示字符,RAM的地址必须是01H+80H,即81H,其他位置类似,均需要加上80H。
显示清屏和显示回车指令:
读数据:输入:RS = H,RW = H,E = H,输出D0~D7数据。
写数据:输入:RS = H,RW = L,D0~D7=指令码,E = H,输出D0~D7数据。
读写操作需要注意的是,D0~D7数据要在使能E信号的下降沿写入控制器,要注意tHD2保持时间必须满足手册要求,其他时序参数也要参考手册要求。
LCD1602上电必须进行初始化操作,初始化过程如下:
(7)写指令38H:显示模式设置;
(8)写08H:关闭显示;
(9)写0H:显示清屏;
(10)写指令06H:显示光标移动设置;
本文要利用LCD1602实现万年历显示。具体功能如下:
(5)LCD1602显示万年历动态时间。
各个模块功能:
(6)KeyJitters.v实现按键消抖功能。
通过按键设置万年历初始值,显示在LCD1602上,如图11所示,可以看到万年历时间已经正确显示。