FPGA学习之LCD1602基本知识(控制,显示,时序)(一)

时间:2024-03-26 17:42:37

FPGA学习之LCD1602基本知识(控制,显示,时序)

前言

LCD1602顾名思义就是显示两行,每行16个字符。如下图所示:

FPGA学习之LCD1602基本知识(控制,显示,时序)(一)

LCD1602的控制线主要有4根:

(1)RS:数据/指令选择端,当RS = 0时,写指令,当RS = 1时,写数据

(2)RW:读/写选择端,当RW = 0时,写指令/数据,当RW = 1时,读状态/数据

(3)EN:使能端,下降沿使指令/数据生效

(4)data[7:0]:8根并行数据口

那LCD1602总共引出的接口信号线如下图所示:
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
其中VL代表液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高会产生“鬼影”,使用时可以通过电位器进行调整对比度。

内部控制指令

FPGA学习之LCD1602基本知识(控制,显示,时序)(一)

字符显示

不论是什么LCD的控制显示都内置了字符显示RAM缓冲区(DDRAM)。

字符显示是通过将字符显示编码写入该字符显示RAM实现。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库),HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。

其实就是DDRAM是用来使液晶显示的,CGROM是液晶屏可显示的内容(在CGROM表中查看),CGRAM是用来扩展液晶屏可以显示的内容的。

LCD1602内置了DDRAM,CGROM和CGRAM,其中要让LCD显示就是需要在DDRAM的相应地址写入数据。

其中DDRAM地址和液晶显示位置的对应关系如下图所示
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
上图中可以看出DDRAM一共有40个地址,但是对于LCD1602只有32个地址有效。

例如我们在第一行最左边显示字母A,该如何进行操作呢?

首先我们需要找到第一行最左边对应DDRAM的地址是什么?查看上图可知是00H。

第二步我们需要知道字母A对应的字符代码是多少?最直接的方法就是查找ASCII表。

另一种就是我们知道LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据呢?例如下图的字符“A”的字模数据就知道了。

FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
上图的左边就是字符“A”的字模数据,右边就是将左边数据用“○”代表0,用“■”代表1,从而显示出“A”这个字形,
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)

从上面图中可以看出字符“A”的高四位是0100,低四位是0001,合在一起就是01000001b,即41H,恰好与ASCII码一致。

由上图可以看出10H-1FH和80H-9FH是空白没有使用的。

因此总结得出如果想在LCD左上角显示字符“A”,那么就把字符“A”的字符代码41H写入DDRAM的00H地址处即可。

那如何实现任意地址显示任意字母和数字呢?

这个是接着字符“A”显示的总结来说,具体一点就是:“在LCD中我要在某一行某个位置显示任意字母或数字,就在对应的DDRAM的地址上写入该字母或数字的字符代码”。

什么意思呢?

就是说,比如我想要显示“1”这个数字,对应LCD上就不是在对应上真的写入01H就能显示数字“1”,而是把数据“1”当做一个图案,而这个图案对应的字符代码是31H,因此需要显示数字“1”,就需要在LCD的数据总线上写入31H即可。

以此类推,例如我们需要显示“2020 year”,因此我们输入给LCD的数据字符代码顺序是:32H,30H,32H,30H,20H(空格),79H,65H,61H,72H。

那如果需要显示汉字怎么办?

上面解决了任意位置显示任意字母或数字的问题,但在我们看出汉字在图中找不到,例如上面显示的“2020 year”要改成显示“2020年”怎么办?

在讲到字符“A”提到的字符的字模数据是怎么产生的?

借助于字模软件,如下图所示,可以得出汉字“年”的字模数据。
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
由于LCD1602显示的图案是57或者510的,所以在8*8的左边三列不能使用,得出汉字“年”的字模格式,看出1602显示该汉字有些力不从心,但依然得到8行八位数据:08H,0FH,12H,…,02H,02H。

然后我们就需要将这个8个8位数据写入CGRAM中去,写CGRAM的的指令如下
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)

读写时序操作

FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
总结一下可得出下表时序操作:

FPGA学习之LCD1602基本知识(控制,显示,时序)(一)
本篇文章介绍了入门级LCD1602液晶的基本知识和显示部分。

下篇文章将介绍如何在FPGA实现LCD1602驱动,由于手上没有LCD1602液晶模块,将选用其他液晶显示模块来展示如何在FPGA中实现液晶驱动,以及后续学习如何制作在实际应用的的IP封装核。