【无标题】lcd1602模块介绍及编写使用程序

发布于:2022-11-13 ⋅ 阅读:(1340) ⋅ 点赞:(1)


前言

Lcd1602 液晶,从它的名字我们就可以看出它的显示容量,显示2行,每行16个字符的液晶,
对于单片机的学习最主要还是要学会查看产品数据手册,即使相同的功能模块也会由于不同的生产厂家不同而有所差异,下面结合数据手册对Lcd1602内容进行一个分享


一、Lcd1602模块功能引脚介绍

Lcd1602 液晶一共 16 个引脚,每个引脚的功能,都可以在它的数据手册上获得,在进行程序编写之前得弄明白

  1. 引脚1,2,15,16这里就不做介绍了,只需要按照他的数据手册引脚说明对应接入电路就OK
  2. 引脚3液晶显示偏压信号,可以看见液晶显示时是通过增强对比,观察小黑点得到显示的内容。引脚3外部接下拉电阻来确定显示的黑点和不显示的之间的对比度
    (下拉电阻并不一定是个固定阻值,可以是个滑动变阻器,改变3引脚的电压,显示不同的对比度)
  3. 引脚4数据命令选择端,高电平(High)为数据选择端,低电平(Low)为命令选择端
  4. 引脚5读写选择端,高电平(High)读取液晶内部的数据或状态,低电平(Low)写入数据或者命令
  5. 引脚6使能信号,结合时序图会更好的理解使能信号如何使用
  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 后查看