【自学51单片机】12 --- 1602液晶初步认识

1、1602液晶硬件接口介绍

  • 1602液晶技术参数

1602液晶技术参数
说明:(1) 工作电流:在5v工作电压下液晶的工作电流为2mA,仅仅指液晶,不包括背光。

  • 1602液晶接口原理图及引脚功能
    接口原理图

引脚功能
说明:(1) 引脚3:液晶显示偏压信号。用来调整显示黑点与不显示黑点的对比度。(2) 4引脚:数据命令选择引脚。置高电平1,为读写数据,置低电平0,为读写命令。(3) 5引脚:读写选择引脚。置高电平1,为读数据或命令,置低电平0,为写数据或命令。(4) 6引脚:使能信号引脚。高电平有效,低电平无效。(5) 7~14引脚:8个数据引脚。因为总电流不大,直接接到PO口上,不用通过74HC245。

2、1602的读写时序介绍

 液晶内部自带80字节的显示RAM,用来存储发送的数据,内部RAM如下图
内部RAM
说明:(1) 1603字符液晶是显示字符的,字符要跟ASCII码字符表对应,比如液晶显示字符’1’, 就要向对应地址发送数据字符‘1’或十六进制31,或十进制49。(2) 第一行的地址0x00 ~ 0x27,第二行的地址0x40 ~ 0x67。第一行的0x00 ~ 0x0F与液晶第一行16个字符显示地址对应。第二行的0x40 ~ 0x4F与液晶第二行16个字符显示地址对应.每行多出来的地址用于显示移动字幕。


1602液晶基本操作有四个时序,理解,运用1602液晶查阅即可

  1. 读状态:RS = L(0), R/W = H(1),E= H(1);
     单片机读1602液晶的状态,是通过读取液晶里的状态字字节内容,来了解液晶内部情况,液晶状态字字节如下表12-5,
    液晶状态字字节
    说明(1) 状态字节有八位,最高位表示当前液晶是否在 ‘忙’ (给液晶写数据或命令,液晶需先保存到缓存,然后再写到液晶内部寄存器或RAM中,这个需要一定时间),1表示液晶在忙,在忙时禁止读者读写数据或命令操作,0则可以。低七位表示当前数据指针的位置,一般低七位很少用到。(2) 单片机读外设状态时,需要保证接收状态信息的引脚为高电平。所以在读取液晶状态时,P0口要先保证为高电平。(3) 因其他外设和液晶都共用P0口总线,若读完液晶状态仍保持液晶E使能信号引脚为高电平,则液晶会继续输出状态值,因状态值在P0口输入,将会干扰到其他外设的P0口总线的数据,所以读完液晶状态要拉低E使能信号引脚来释放P0总线。

以上说明,在单片机读取液晶状态程序部分体现,见下程序。

#define LCD1602_DB  P0
sbit LCD1602_RS = P1^0;//引脚声明
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^5;

//等待液晶准备好
void  LcdWaitReady()
{
	unsigned char  sta;

	LCD1602_DB = 0xFF;
	LCD1602_RS = 0;
	LCD1602_RW = 1;

	do{
		LCD1602_E = 1;
		sta = LCD1602_DB; //读取状态字
		LCD1602_E = 0;//bit7等于1表示液晶正在忙,重复检测直到其等于0为止	
	}while(sta & 0x80);
}
  1. 读数据:RS = H(1),RW = H(1),E = H(1), 读数据不常用。

  2. 写指令:RS = L(0),RW = L(0),D0 ~ D7 = 指令码,E = 高脉冲
    说明:(1) E = 高电平:E使能引脚先从低到高,再从高到低,形成一个高脉冲。

  3. 写数据:RS = H(1),RW = L(0),D0 ~ D7 = 指令码,E = 高脉冲
    说明:(1) 液晶内部有一个指针,它指向哪里,我们写的数据就会送到相应的那个地址。

3、1602液晶的指令介绍

单片机给液晶写指令有5种设置,理解,查阅1602液晶手册

  1. 显示模式设置
    显示模式设置
    说明:固定0x38即可

  2. 显示开/关以及光标设置
    示开/关以及光标设置指令

  3. 数据指针及移动设置
    数据指针及移动设置

  4. 清屏指令
    清屏指令

  5. RAM地址设置指令
    RAM地址设置指令
    说明:该指令最高位为1,低七位为RAM地址,十六进制0x80+地址码,在程序中用 (0x80 | 地址码)来表示该指令。在读写程序中先设置地址,然后进行数据的读写操作。

4、1602液晶简单示例

//160LCD显示指定字符
#include<reg52.h>

#define Lcd1602_DB P0
sbit Lcd1602_RS = P1^0;
sbit Lcd1602_RW = P1^1;
sbit Lcd1602_E = P1^5;

void InitLcd1602();
void Lcdwritecmd(unsigned char cmd);
void LcdWaitReady();
void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str);
void Lcdcursor(unsigned char x, unsigned char y);
void LcdWritedat( unsigned char str);

void main()
{
	InitLcd1602();
	LcdShowstr(5, 0, "L Z Y");
	LcdShowstr(3, 1, "come on!!!");
	while(1);
}
//初始化1602液晶
void InitLcd1602()
{
	Lcdwritecmd(0x38);//16*2显示,5*7点阵,8位数据口
	Lcdwritecmd(0x0C); //显示器开,光标关闭
	Lcdwritecmd(0x06);//文字不动,地址自动加+1
	Lcdwritecmd(0x01);//清屏
}
 //向LCd1602写入一个一字节命令,cmd为待写入命令值
void Lcdwritecmd(unsigned char cmd)
{
	LcdWaitReady();
	Lcd1602_RS = 0;
	Lcd1602_RW = 0;
	Lcd1602_DB = cmd;
	Lcd1602_E = 1;
	Lcd1602_E = 0;
}
//等待液晶准备好
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);//bit7等于1表示液晶正忙,重复检测直到其等于0为止
}
//在液晶上显示字符串,(x,y)为对应屏幕上的起始坐标,str为字符指针
void LcdShowstr(unsigned char x, unsigned char y, unsigned char *str)
{
	Lcdcursor(x, y);//设置起始地址
	while(*str != '\0')//连续写入字符串数据,直到检测到结束符
	{
		LcdWritedat(*str++);//先取str指向的数据,然后str自加1
	}
}
//设置显示RAM起始地址,亦即光标位置,(x,y)为对应屏幕上的字符坐标
void Lcdcursor(unsigned char x, unsigned char y)
{
	  unsigned char addr;
	  if(y == 0)//由输入的屏幕坐标计算显示RAM的地址
	  {
	  	addr = 0x00 + x; //第一行字符坐标地址从0x00起始
	  }
	  else	 
	  {
	  	addr = 0x40 +  x;//第二行字符地址从0x40起始
	  }
	  Lcdwritecmd(addr | 0x80);//设置RAM地址
}
//向液晶写入一个一字节数据,dat为待写入数据值
void LcdWritedat(unsigned char str)
{
	LcdWaitReady();
	Lcd1602_RS = 1;
	Lcd1602_RW = 0;
	Lcd1602_E = 1;
	Lcd1602_DB = str;
	Lcd1602_E = 0;	
}

说明:(1) 读写数据或指令程序,每次都必须进行 '忙‘ 判断。(2) 1602使能引脚E高电平时,如果不使用液晶,会影响P0进而影响其他外设。所以在程序开始写一句Lcd1602_DB = 0;可以避免影响其他外设,上面程序没有该语句,是因KST-51开发板上该引脚有下拉电阻,下拉电阻可以保证上电后该引脚默认为低电平。

5、收获

 重在理解,理解后查阅1602液晶资料即可。还有8章,假期还有6天,博客就先不写,先学完,开学后有时间补博客,不然暑假学不完,干它,兄弟们,面对困难的最好办法,就是微笑着面对它。
在这里插入图片描述
 你看我笑的多开心。望坚持。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值