目录
1. 指令介绍

引脚说明:
3脚:用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压0时可以得到最强对比度;
4脚:RS,数据/命令选择端; 当此脚为高电平时,可以对1602进行数据字节的传输操作; 当为低电平时,用于对1602进行输入指令的传输操作;
5脚:0:向LCD1602写入指令或数据; 1:对LCD1602读数据操作;
6脚:使能信号
lcd1602常用指令
(1) 清屏指令
功能:
指令十进制为: 0x01
<a> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCLL码20H;
为什么是20H?
手册有:字符代码0x00~0x0F为用户自定义的字符图形RAM,也就是CGRAM;
0x20~0x7F为标准的ASCLL码,0xA0~0xFF为日文字符和希腊字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义;
<b> 光标归位;即将光标测回液晶显示屏的左上方;
<c> 将地址计数器(AC)的值设置为0;
(2) 光标归位指令
功能:
十进制为0x02 或0x03
<a> 把光标测回到显示器的左上方;
<b> 把地址计数器(AC)的值设置为0;
<c> 保存DDRAM的内容不变;
(3) 进入模式设置指令
功能: 设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动;
其中
DB2位 固定为1;
I/D 位 0:写入新数据后光标左移 1:写入新数据后光标右移
S 位 0:写入新数据后显示屏不移动 1:写入新数据后显示屏整体右移一个字符
(4) 显示开关控制指令
功能:控制显示器开/关,光标显示/关闭以及光标是否闪烁;
DB3位 固定为1
D位: 0:显示功能关 1:显示功能开
C位 0:无光标 1:有光标
B位 0:光标闪烁 1:光标不闪烁
(5) 设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位.
S/C R/L
0 0 光标左移1格,且AC值减1;
0 1 光标右移1格,且AC值加1;
1 0 显示器上字符全部左移1格,但光标不动
1 1 显示器上字符全部右移1格,但光标不动;
(6) 功能设定指令
功能: 设定数据总线位数,显示的行数及字型;参数设定情况如下;
DL 0:数据总线为4位 1:数据总线为8位
N 0:显示1行 1:显示2行
F 0:5x7点阵/每字符 1:5x10点阵/每字符
(7) 设定CGRAM地址指令
功能:设定下一个要存入数据的CGRAM的地址;
DB3~DB5为字符号,也就是你将来要显示该字符时要用到的字符地址;(000~111)能定义8个;
DB0~DB2为行号,(000~111)能定义8行;
(8) 设定DDRAM地址指令
功能:设定下一个要存入数据的DDRAM的地址;
(9) 读取忙信号或AC地址指令
功能:
<a> 读取忙碌信号BF的内容,FB=1表示液晶显示器忙,暂停无法接收单片机发送的数据或指令;当FB=0时,液晶显示器可以接收单片机发送的数据或指令;
<b> 读取地址计数器(AC)的内容
(10) 数据写入DDRAM或CGRAM指令一览
功能:
<a> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;
<b> 将使用者自己设计的图形存入CGRAM;
DB5~DB7可为任何数据,一般为000;
DB0~DB4:对应每行5点的字模数据;
(11) 从CGRAM或DDRAM读出数据的指令
功能:读取DDRAM或CGRAM中的内容
基本操作时序:
读状态: 输入:RS=L,RW=H,E+H 输出:DB0~DB7=状态字
写指令: 输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码 输出:无
读数据: 输入RS=H,RW=H,E=H; 输出:DB0~DB7=数据
写数据: 输入:RS=H,RW=L,E=下降沿脉冲 ,DB0~DB7=数据 输出:无
2. 硬件图
其中 RS->gpio0
RW接地,保持0;
E使能脚->接gpio1
DB0~DB7 -> gpio2~gpio9
3. 软件部分
3.1 初始化
void LCD1602_Init(void)
{
//1.gpio初始化
DELAY_US(5000);//延迟5ms
//2.设置8位格式,2行,5x7
LCD1602_WriteCmd(0x38);
//3.关显示,不显示光标,光标不闪烁;
LCD1602_WriteCmd(0x08);
//4.清除屏幕显示:数据指针清零,所有显示清零;
LCD1602_WriteCmd(0x01);
//5.设定输入方式,增量不移位
LCD1602_WriteCmd(0x06);
//6.整体显示,关光标,不闪烁
LCD1602_WriteCmd(0x0c);
}
3.2 写命令
RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入;
void LCD1602_WriteCmd(unsigned char cmd)
{
LCD1602_EN_SETL;
LCD1602_RS_SETL;//RS置低,RW引脚已经接地;
//左移2位原因:D0~D7在硬件上对应gpio2~gpio9;根据硬件决定;
//#define LCD1602_DATAPORT (GpioDataRegs.GPADAT.all)
LCD1602_DATAPORT=cmd<<2;
DELAY_US(500);
LCD1602_EN_SETH;//拉高
DELAY_US(1000);
}
3.3 写数据
把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入;
void LCD1602_WriteData(unsigned char dat)
{
LCD1602_EN_SETL;
LCD1602_RS_SETH;//RS置高
//或上0x001原因:写数据时要保证RS(gpio0)为高,虽然上一句已经置为高,但是dat<<2位后会时bit0位为0
LCD1602_DATAPORT=dat<<2|0x0001;
DELAY_US(500);
LCD1602_EN_SETH;//使能
DELAY_US(1000);
//LCD1602_EN_SETL;
}
3.4 写字符串
(1) 只有第一行的00~0f,第二行的40~4F才能显示,其他地址只能用于存储;
(2) 显示地址时要求最高位D7恒定为高电平1;
void LCD1602_DispString(char line,char *str)
{
if(line==1)
LCD1602_WriteCmd(0x80);//写在0x0处,也就是第一行; 0x8表示显示时D7恒定为1
else if(line==2)
LCD1602_WriteCmd(0x80+0x40);//写在0x40处,也就是第二行; 0x80表示显示时D7恒定为1
else
return;
while(*str!='\0')
{
LCD1602_WriteData(*str);
DELAY_US(500); //延时500us
str++;
}
}