Lcd1602液晶 基础教程 常用指令 自定义字符

此文章,你将会看到,或了解到

  • 工作电压电流
  • 引脚对应关系
  • 基本操作时序
  • 相关指令说明
  • 显示一个字符
  • 自定义字符的方法

工作电压电流

工作电流:2mA(5V)
背光Led:10-20mA

引脚对应关系

序号 标识 功能
1 VSS 电源地
2 VDD 电源正
3 VL 液晶偏压信号(对比度)
4 RS 数据/命令选择(H/L)
5 R/W 读/写选择(H/L)
6 E 使能信号
7 D0
8个状态字
14 D7
15 BLA 背光正
16 BLK 背光负

状态字说明
D0-D6:当前数据指针的值
D7:读写操作使能(1,禁止 0,允许)
Lcd1602液晶 基础教程 常用指令 自定义字符_第1张图片
Lcd1602液晶 基础教程 常用指令 自定义字符_第2张图片

基本操作时序

1.2引脚是接电源
3号引脚的电流决定了液晶屏显示的对比度,这里我们直接连一个1K的电阻到地,如果你的液晶屏显示模糊,改变电阻大小就可以啦
4.5.6号引脚就是有关操作时序的引脚啦,如下图,如果你需要读取液晶屏的相关数据,RS=0,R/W=1,E=1,然后聪明的液晶屏就会在D0-D7引脚产生它的状态相关消息,这时候你只要读取D0-D7引脚信息就行啦
高脉冲的意思是指E产生变化的电平
详细例程请看下文说明
Lcd1602液晶 基础教程 常用指令 自定义字符_第3张图片

指令说明

Lcd1602液晶 基础教程 常用指令 自定义字符_第4张图片
此时就以初始化液晶做一个例子吧

//读状态函数,在对液晶屏操作之前必须读到液晶屏“空闲”,才能进行操作
void LcdWaitReady()
{
	unsigned char sta;
	
	LCD1602_DB=0XFF;
	LCD1602_RS=0;
	LCD1602_RW=1;
	do							//等待液晶空闲
	{
		LCD1602_E=1;
		sta=LCD1602_DB;
		LCD1602_E=0;
	}while(sta & 0x80);			//判断D7是否为1,为1说明液晶忙,禁止读写操作
}

//写命令函数,cmd为需要写入的命令
void LcdWriteCmd(unsigned char cmd)
{
	LcdWaitReady();				//在读写操作前需要确定液晶空闲
	
	LCD1602_RS=0;
	LCD1602_RW=0;
	LCD1602_DB=cmd;
	LCD1602_E=1;				//这里E迅速变化,即高脉冲
	LCD1602_E=0;
}

//初始化液晶
void InitLcd1602()
{
	LcdWriteCmd(0x38);			//设置16x2显示,每个方块5x7点阵,8位数据接口
	LcdWriteCmd(0x0C);			//显示器开,光标关闭
	LcdWriteCmd(0x06);			//文字不动,地址自动加一
	LcdWriteCmd(0x01);			//清屏
}

写数据函数与写命令函数类似,如下

//写数据函数
void LcdWriteDat(unsigned char dat)
{
	LcdWaitReady();
	LCD1602_RS=1;
	LCD1602_RW=0;
	LCD1602_DB=dat;
	LCD1602_E=1;
	LCD1602_E=0;
}

显示一个字符

说了这么多,我不就是需要它显示一些什么吗,那么,我们开始吧,直接上代码
等等,在这之前,你需要知道
在液晶屏不同的液晶是有地址的(如下图),如果想在第一行第3个格子显示一个数字1的话,首先,你需要将地址指针设置到0x02,然后,再写入数字1的char类型(写数据函数),这样1就会被显示在那里

显示之后呢,如果这个时候再写入一个数字2会怎样呢,原来的1会瞬间变为2吗,不是的,记得初始化中的这条命令吗:
LcdWriteCmd(0x06); //文字不动,地址自动加一
它的作用就是在写入数据后(在这里是写入1)指针自动加1,即此时指针已经是0x03了,这个时候,再写入数据2,字符2就会显示在0x03的位置了,是不是很方便
Lcd1602液晶 基础教程 常用指令 自定义字符_第5张图片

//设置地址
void LcdSetCursor(unsigned char x,unsigned char y)
{
	unsigned char addr;
	
	if(y==0)
		addr=0x00+x;
	else
		addr=0x40+x;
	LcdWriteCmd(addr | 0x80);
}
//显示一段字符串
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str)
{
	LcdSetCursor(x,y);
	while(*str != '\0')
	{
		LcdWriteDat(*str++);
	}
}
了解更多:

其实,有没有想过,为什么1的char数据正好可以显示1,因为,咳咳,液晶里面有这么一张表
Lcd1602液晶 基础教程 常用指令 自定义字符_第6张图片
想一想,字符1的ASCII值是不是49,十六进制为0x31,查表,第三列,第一行,是不是1
所以,只要给他发送数据0x31,是不是就会显示1了呀
看看这两行程序,效果是不是相同的呢

unsigned char array1[]="1";
unsigned char array2[]={'1'};
unsigned char array3[]={49};
unsigned char array4[]={0x31};

LcdShowStr(0,0,array1);
LcdShowStr(0,0,array2);
LcdShowStr(0,0,array3);
LcdShowStr(0,0,array4);

LcdShowStr(0,0,“What do you think it”);

小思考:这个时候,你也许就想到了,我可以显示各种奇形怪状的符号了,想一想,如果发送0xE6,会显示什么呢

显示自定义字符

这个时候,又出现了新的问题,现在,虽然可以显示除键盘以外的部分字符了,但是,还是缺少某些字符呀,比如摄氏度 华氏度,那么,这还有办法吗,当然是有的啦,不然我的另一份博客中的摄氏度怎么显示的呢

一个晚自习就过去了,很抱歉不能一次写完,如果您觉得写得挺详细,写得不错的话,给个鼓励吧,精神上的那种,比如一个赞什么的,哈哈哈,期待您的互动

你可能感兴趣的:(器件使用说明,液晶屏,1602,自定义字符,Lcd1602)