前言
Lcd1602 液晶,从它的名字我们就可以看出它的显示容量,显示2行,每行16个字符的液晶,
对于单片机的学习最主要还是要学会查看产品数据手册,即使相同的功能模块也会由于不同的生产厂家不同而有所差异,下面结合数据手册对Lcd1602内容进行一个分享
一、Lcd1602模块功能引脚介绍
Lcd1602 液晶一共 16 个引脚,每个引脚的功能,都可以在它的数据手册上获得,在进行程序编写之前得弄明白
- 引脚1,2,15,16这里就不做介绍了,只需要按照他的数据手册引脚说明对应接入电路就OK
- 引脚3,液晶显示偏压信号,可以看见液晶显示时是通过增强对比,观察小黑点得到显示的内容。引脚3外部接下拉电阻来确定显示的黑点和不显示的之间的对比度
(下拉电阻并不一定是个固定阻值,可以是个滑动变阻器,改变3引脚的电压,显示不同的对比度) - 引脚4,数据命令选择端,高电平(High)为数据选择端,低电平(Low)为命令选择端
- 引脚5,读写选择端,高电平(High)读取液晶内部的数据或状态,低电平(Low)写入数据或者命令
- 引脚6,使能信号,结合时序图会更好的理解使能信号如何使用
- 引脚7~14,普通I/O口,通过这 8 个引脚读写数据和命令
二、程序编写,时序图分析
1.Lcd1602初始化
代码如下(示例):
void LcdInit1602()
{
LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口
LcdWriteCmd(0x08); //关闭显示
LcdWriteCmd(0x0C); // 开显示,不显示光标
LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移
LcdWriteCmd(0x01); // 清屏
}
2.基本时序程序编写
读操作时序
写操作时序
(1)读状态:RS=L,WR=H,E=H,P0=状态
bit7busy()主函数部分,do…while()判断是否忙位
Lcd1602_DB = 0xFF;
Lcd1602_RS = 0;
Lcd1602_WR = 1;
Lcd1602_E = 1;
sta = Lcd1602_DB; //读取状态字
对控制器每次进行读写操作前,都必须进行读写检测,确保bit7为0,表示不忙可以进行读写,将其封装成函数void bit7busy();
(2)读数据:RS=H,WR=H,E=H ,P0=数据
(3)写指令:RS=L,WR=L,P0=指令码,E=高脉冲(前三项准备好,使能引脚拉高拉低读取指令码到1602)
(4)写数据:RS=H,WR=L,P0=数据,E=高脉冲
void LcdWriteCmd(unsigned char cmd)
{
bit7busy(); //将忙位检测封装成函数
Lcd1602_RS = 0; //选择写指令
Lcd1602_WR = 0; //选择写
Lcd1602_E = 0; //E使能拉低
P0=cmd; //把指令送入P0
DelayMs(2); //延时一小会儿,让1602准备接收数据
Lcd1602_E = 1; //使能线电平变化上升沿,命令送入1602的8位数据口
DelayMs(2); //延时,让数据发送
Lcd1602_E = 0; //使能线拉低
}
void LcdWriteDat(unsigned char dat)
{
bit7busy();
Lcd1602_RS = 1; //选择写数据
Lcd1602_WR = 0; //选择写
Lcd1602_E = 0; //E使能拉低
P0=dat;
DelayMs(2);
Lcd1602_E = 1;
DelayMs(2);
Lcd1602_E = 0;
}
数据手册里面还有时间上的要求,在51里面不需要额外操作来满足,但在运行速度快点的单片机,可以试着加延时
2.显示hello在液晶屏
在这之前先了解一下,1602 液晶内部带了 80 个字节的显示 RAM,用来存储我们发送的数据
第一行RAM地址从 0x00到 0x27,第二行地址从 0x40 到 0x67,
其中
第一行 0x00 到 0x0F与液晶上第一行 16 个字符显示位置相对应的,
第二行 0x40 到 0x4F 是与第二行 16 个字符显示位置相对应的
由于是字符显示,与ACSII字符表对应
void LcdShowStr(unsigned char y,unsigned char x,unsigned char *str,unsigned char len)
{
if(y==1) // 第一行
LcdWriteCmd(0x80+x); // 第一行显示起始地址 0x80第一行第一个字符地址
else // 第二行
LcdWriteCmd(0x80+0x40+x); // 第二行显示起始地址 0x80+0x40是第二行第一个字符地址
while(len--)
{
LcdWriteDat(*str++);
}
}
显示个hello在液晶上
LcdShowStr(1,0,"hello",5)
最后
作为一名学生,这也算是我学习的小记录,如果有不妥的地方欢迎指出
本文含有隐藏内容,请 开通VIP 后查看