单片机外设详解:LCD1602原理及免费获取51代码和仿真
目录
一、LCD1602简介
二、LCD1602的外观、结构和基本参数
三、LCD1602基本显示原理
四、LCD1602时序图
五、具体实现代码
六、代码和仿真获取方法
一、LCD1602简介
1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。
二、LCD1602的外观、结构和基本参数
1、外观
2、主要参数
3、主要引脚参数
引脚功能解析:
第1引脚:GND为电源地脚。
第2引脚:VCC接5V电源正极。
第3引脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4引脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5引脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14引脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。第15引脚背光正极,第16引脚背光负极。
三、LCD1602基本显示原理
1602液晶模块内部的控制器共有11条控制指令,如表所示:
序号 |
指令 |
RS |
R/W |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
1 |
清显示 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2 |
光标返回 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
* |
3 |
置输入模式 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
4 |
显示开/关控制 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
5 |
光标或字符移位 |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
* |
* |
6 |
置功能 |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
* |
* |
7 |
置字符发生存贮器地址 |
0 |
0 |
0 |
1 |
字符发生存贮器地址 |
|||||
8 |
置数据存贮器地址 |
0 |
0 |
1 |
显示数据存贮器地址 |
||||||
9 |
读忙标志或地址 |
0 |
1 |
BF |
计数器地址 |
||||||
10 |
写数到CGRAM或DDRAM) |
1 |
0 |
要写的数据内容 |
|||||||
11 |
从CGRAM或DDRAM读数 |
1 |
1 |
读出的数据内容 |
表控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)
指令1:清显示,指令码01H,光标复位到地址00H位置。
指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。
指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。
指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据。
指令11:读数据。
四、LCD1602时序图
读时序
写时序
五、具体实现代码
写指令代码
/**
* @brief LCD1602写命令
* @param Command 要写入的命令
* @retval 无
*/
void LCD_WriteCommand(unsigned char Command)
{
LCD_RS=0; //指令
LCD_RW=0; //写指令打开
LCD_DataPort=Command; //写入数据
LCD_EN=1; //使能
LCD_Delay(); //延时
LCD_EN=0; //关闭使能
LCD_Delay(); //延时
}
写数据代码
/**
* @brief LCD1602写数据
* @param Data 要写入的数据
* @retval 无
*/
void LCD_WriteData(unsigned char Data)
{
LCD_RS=1; //写数据
LCD_RW=0; //打开写
LCD_DataPort=Data; //数据
LCD_EN=1; //使能
LCD_Delay(); //延时
LCD_EN=0; //关闭使能
LCD_Delay(); //延时
}
设置模式指令
LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
设置开关指令
LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关
进入模式指令
LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动
其他指令
LCD_WriteCommand(0x01);//光标复位,清屏
选择显示行
/**
* @brief LCD1602设置光标位置
* @param Line 行位置,范围:1~2
* @param Column 列位置,范围:1~16
* @retval 无
*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
if(Line==1)
{
LCD_WriteCommand(0x80|(Column-1));
}
else if(Line==2)
{
LCD_WriteCommand(0x80|(Column-1+0x40));
}
}
显示字符
/**
* @brief 在LCD1602指定位置上显示一个字符
* @param Line 行位置,范围:1~2
* @param Column 列位置,范围:1~16
* @param Char 要显示的字符
* @retval 无
*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
{
LCD_SetCursor(Line,Column);
LCD_WriteData(Char);
}
显示字符串
/**
* @brief 在LCD1602指定位置开始显示所给字符串
* @param Line 起始行位置,范围:1~2
* @param Column 起始列位置,范围:1~16
* @param String 要显示的字符串
* @retval 无
*/
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{
unsigned char i;
LCD_SetCursor(Line,Column);
for(i=0;String[i]!='\0';i++)
{
LCD_WriteData(String[i]);
}
}
接线图
六、代码和仿真获取方法
链接:https://pan.baidu.com/s/1stHcyXKmyVVUcs5su-mdTw?pwd=eajq
提取码:eajq
作者:小敏的项目日记