LCD1602A模块的应用

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。下图即是该模块:(百度百科)
LCD1602A模块的应用_第1张图片

一般来说,在嵌入式开发领域显示模块是非常重要的一部分,所以发展出了许多种应用在不同场合的集成显示模块。LCD1602由于出现较早,所以即便出现了应用更广泛的、技术更成熟的显示模块的今天,LCD1602仍应用在不少场合(尤其是一些高校电子及相关专业用作该模块作为入门级的教学工具),本文以此为核心主要讲述该模块的应用:

首先,使用某种模块先要读它的数据手册,由于网上有很多,所以这里不再赘述,读者百度即可。下面说一下最终的工作原理和引脚的使用相关的问题:

点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。(百度百科)

LCD1602A模块的应用_第2张图片

Lcd1602A有16个引脚(单凭这一点就足以说明为啥应用不广泛了),两组电源引脚(1,2;15,16号引脚),8跟数据线(D0~D7),3跟控制引脚(4,5,6号引脚),3号引脚VL是辅助显示用的,一般在PCB板上接电位器,通过该引脚调节背光亮度。从数据线就可以知道,该模块与单片机并行通信,同时还要额外占用3根控制线。Lcd1602的指令主要有以下几种:
LCD1602A模块的应用_第3张图片

根据这些指令,我们可以选择性地往LCD1602A的寄存器内写控制命令控制命令、读取状态或者显示内容,下面是基于51单片机的部分必要的C程序:

/*******************IO引脚定义*********************************************/
sbit LCD_RS=P1^0;//定义引脚
sbit LCD_RW=P1^1;
sbit LCD_E=P1^2;
/********宏定义***********************************************************/
#define LCD_Data P0
#define Busy  0x80 //用于检测LCD状态字中的Busy标识

上面代码是反映了单片机与LCD1602硬件连接的逻辑,最后一行应特别注意,最后一行定义了一个字节的数据,用于辅助判断LCD是否处于忙状态(检测这一状态十分重要,因为LCD处于忙的状态是无法再响应别的单片机的要求的,所以基本上上面指令表的每一个操作进行前都要先检测LCD是否处于空闲状态),其具体实现代码如下:

/***********读状态*******************************************************/	
unsigned char ReadStatusLCD(void)
{
 	LCD_Data = 0xFF; 
 	LCD_RS = 0; //从指令表可知,RS RW = 01时读LCD状态
 	LCD_RW = 1;
 	LCD_E = 0;
 	LCD_E = 0;
 	LCD_E = 1;
 	while (LCD_Data & Busy); //读到的P0口信息只有最高位才是我们关心的,这时就用到了上面说的Busy辅助,如果最高位为1,说明LCD忙,将在死循环里等它忙完
 	return(LCD_Data);
}

由于对LCD的操作较多,所以不再一一将代码粘出解释,C源码流程同上面的例子几乎没有区别,所以大家仿写即可。

PS:作者已经封装好的LCD1602A.c和LCD1602.h两个文件,实际应用时大家直接将开发文件包含到project中即可,关注微信公众号“24K纯学渣”回复“lcd1602”即可获取!
以上所述,如有不妥,欢迎交流指出!

你可能感兴趣的:(嵌入式软件开发,单片机)