51单片机学习笔记———14.LCD1602工业显示屏
LCD1602
工业显示屏
LCD
工业显示屏解读:
共有16个引脚,其中D0~D7
为收发数据引脚,为双向并行数据接口。
- 16代表每一行能够显示16个空格
- 2代表总共两行
因为每一个字节能够显示0和1,有两种可能,所以要将32位全部显示完全的话,至少需要2
^
5,也就是5位,所以我们可以设置8位,也就是一个字节来发送数据,这样比较方便
其中第四脚比较特殊,用来决定是用来确定位置还是发送我们想要显示的数据
RS=0
确定位置
RS=1
确认数据
显示数据的步骤:
-
初始化
LCD1602
-
发送指令(
RS=0
) ----确定位置 -
发送数据(
RS=1
)-----确认数据`RS`为低电平时为发送指令指令:决定数据将要在`LCD`的哪一个位置显示`RS`为高电平时发送数据发送的数据要转换成二进制,然后再转换成16进制
因为只需要五位来发送数据,所以多出来的三位我们可以选择性的设置为0或者为1,现在我们将最高位设置为1
假如我们要发送指令1000 0001
,可以看到,最高位为1,然后我们要选择发送到LCD
的哪个位置,因为地址通常都是十六进制,所以根据LCD1602
内部显示地址,我们可以选择任意我们想要发送的位置,具体图如下:
所以我们可以编写一个发送数据的代码,选择发送的位置:
LcdWrite_Cmd(cmd);//写指令,RS=0
此时的RS=0
同理,接下来我们要发送我们想要显示的东西,只需让RS=1
,于是:
LcdWrite_Data(data);//写数据,RS=1
不过在此之前,我们要先将LCD1602
初始化一下,可以根据官方手册来编写相应的代码:
- 官方初始化手册:
LCD1602
初始化代码:
void LcdInint(cmd)
{Delay15ms();LcdWrite_Cmd(0x38);Delay5ms();LcdWrite_Cmd(0x08);LcdWrite_Cmd(0x01);LcdWrite_Cmd(0x06);LcdWrite_Cmd(0x0c);
}
总体思路:
int main()
{LcdInint();//初始化LCD1602LcdWrite_Cmd(cmd);//写指令,RS=0LcdWrite_Data(data);//写数据,RS=1
}
根据时序图和时序参数写发送数据跟指令部分的代码
需要注意的是,发送数据跟发送指令差的只是RS
的状态,所以我们只需写一个函数,在其中修改RS
的状态即可完成两个功能。
我们可以看到上面有四路时序,而看第二路R/W
的状态在刚开始的时候可高可低,然后中间的时候一直是低电平状态,最后也是可高可低,所以我们不妨将R/W
的状态一直设置为低电平状态,也就是R/W=0
。
单片机跟LCD1602
一共有16条线接口,其中DB0~DB7
为双向并行数据接口,
根据时序图写代码如下:
A: EN = 0;//A点,EN = 0Delay1ms();//A-B延时一段时间,可随意
B: P2 = 0x11;//B点单片机准备发送数据,可随意指定Delay1ms();//B~C延时一段时间
C:变化完成Delay1ms();
D:EN = 1;//D点EN = 1Delay1ms();//D~E点延时一段时间
E:EN变化完成Delay1ms();
F:EN = 0;//F点EN = 0Delay1ms();//F~G延时一段时间
G:EN变化完成Delay1ms();
H:DB端口可高可低
发布评论