FPGA的的LCD显⽰显⽰
把这次毕设的⼀些东西整理⼀下,今天答辩是⽼师说东西简单,但是没看到在简简单单的LCD显⽰上,就花了⼤功夫呢,不
吐槽不愉快啊!(我做的主体在FPGA⾥⾯啊,多少的代码,外围电路当然简单了···)
进⼊正题:
⽤的是LCD1602,资料之类的⽹上⼀⼤推,就不再详细说了。
表表3-1 LCD1602的指令集的指令集
序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1 清显⽰ 0 0 0 0 0 0 0 0 0 1
2 光标返回 0 0 0 0 0 0 0 0 1 *
3 置输⼊模式 0 0 0 0 0 0 0 1 I/D S
4 显⽰开/关控制 0 0 0 0 0 0 1 D C B
5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *
6 置功能 0 0 0 0 1 DL N F * *
7 置字符发⽣存贮器地址 0 0 0 1 字符发⽣存贮器地址
8 置数据存贮器地址 0 0 1 显⽰数据存贮器地址
9 读忙标志或地址 0 1 BF 计数器地址
10 写数到CGRAM或DDRAM) 1 0 要写的数据内容
11 从CGRAM或DDRAM读数 1 1 读出的数据内容
LCD1602液晶模块内部的控制器共有11条控制指令,如表3-1所⽰。⼀个完整的LCD初始化过程为
写指令38H:功能设置(序号7)
延时5ms
写指令08H:显⽰开关控制(序号8)
延时5ms
写指令01H:显⽰清屏(序号1)
延时5ms
写指令06H:输⼊模式设置(序号3)
延时5ms
写指令0CH:显⽰开及光标设置(序号4)
初始化完成之后就可以利⽤命令显⽰⾃⼰的字符了。
本次设计采⽤的是⼀段式状态机,共分为10个状态,状态图如图3-8所⽰。
图图3-8控制控制LCD的状态图的状态图
其中各个状态描述如下:
IDLE:空闲状态
MODE_SET:模式设置,设定每次定⼊1位数据后光标的移位⽅向,并且设定每次写⼊的⼀个字符是否移动。
SWITCH_SET:显⽰控制,设定显⽰和光标的开关,以及开关是否闪烁。
SHIFT_SET:光标功能设定,设定光标移位或使整个显⽰屏幕移位。
FUN_SET:功能设定,设定数据总线位数、显⽰的⾏数及字型。
CLEAR:清屏状态,调⽤清屏指令。