问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

LCD12864液晶显示模块的使用与分析

创作时间:
作者:
@小白创作中心

LCD12864液晶显示模块的使用与分析

引用
CSDN
1.
https://blog.csdn.net/qq_46166916/article/details/121942415

LCD12864液晶显示模块是一种常用的显示设备,广泛应用于各种嵌入式系统中。本文将详细介绍其功能、技术参数、电路连接以及具体的软件代码实现,帮助读者快速掌握该模块的使用方法。

一、LCD12864功能应用

LCD12864液晶显示模块能显示中文汉字、数字、字符,能显示数字与字符的个数为64个(4行,每行16个数字或字符),能显示汉字的个数为32个(4行,每行8个汉字)。其内置了8192个中文汉字(1616的点阵)、128个字符(816点阵)、以及 64*256 点阵显示 RAM(GDRAM)。


图1 外观尺寸图


图2 外观尺寸图

图3 LCD12864读操作时序

图4 LCD12864写操作时序

二、LCD12864主要技术参数

(1)工作电压:3.3V-5.5V,模块最佳电压为5V。
(2)可以在显示界面显示数字、字母和中文汉字。
(3)与外部单片机的通信方式有并行或串行两种通信方式,这里主要介绍并行通信方式。
(4)显示内容:128 列× 64 行
(5)显示颜色:黄绿/蓝屏/灰屏
(6)LCD 类型:STN
(7)与 MCU 接口:8 位或 4 位并行/3 位串行
(8)配置 LED 背光
(9)多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等

三、LCD12864液晶显示的电路用法分析

LCD12864模块主要用来显示所要的界面信息或数据,所以要求能显示汉字,字符和数字,而LCD12864满足系统要求的显示功能。LCD12864在显示字母和数字时,是416的显示字符模块,即可以显示4行,每行可以显示16个字母或数字;在显示汉字时,是48的汉字显示模块,即可以显示4行,每行可以显示8个汉字。下面进行介绍的是并行通信的显示方式。

按照电路原理图跟单片机最小系统进行连线,如图6所示。LCD12864共有20个引脚,其引脚具体功能如表1所示,由表可得LCD12864引脚组成为8位数据传输端口(DB0-DB7);两个电源引脚(VCC,GND);两个电源背光引脚(BLK,BLA),控制LCD的背景亮度;一个VO引脚,外接一个上拉电阻(控制LCD12864的字符对比度,让字符更加的清晰可见);RST复位引脚,低电平有效,此处直接接高电平;第16、17位空引脚,不用管;剩下的RS,RW,EN和PSB四个引脚则跟LCD12864的写入息息相关,通过PSB可以控制LCD12864跟单片机的通信方式,输入高电平,则LCD12864跟单片机的通信模式为并行通信,低电平则为串行通信。单片机对RS,RW,EN端口的写入控制,则可以控制LCD12864的数据传输模式,决定单片机写入LCD12864数据端口DB的是命令还是数据。写入命令可以控制LCD的模式和工作状态,然后写入数据,让LCD显示需要的界面。


图5 LCD12864电路连接图

图6 LCD12864电路连接图

引脚号
引脚名称
方向
功能简介
1
GND
-
模块的电源的接地引脚
2
VCC
-
模块的电源的正极引脚
3
V0
-
LCD驱动电压输入端口
4
RS(CS)
H/L
并行的指令/数据选择信号;串行的片选信号
5
R/W(SID)
H/L
并行的读写选择信号;串行的数据口
6
EN(CLK)
H/L
并行的使能信号;串行的同步时钟
7
DB0
H/L
数据端口0
8
DB1
H/L
数据端口1
9
DB2
H/L
数据端口2
10
DB3
H/L
数据端口3
11
DB4
H/L
数据端口4
12
DB5
H/L
数据端口5
13
DB6
H/L
数据端口6
14
DB7
H/L
数据端口7
15
PSB
H/L
串/并行接口选择端口 H-并行 L-串行
16
NC
空脚
17
/RST
H/L
复位引脚,低电平有效
18
VOUT
倍压输出脚(VDD=+3.3有效)
19
LED_A
-
背光电源正极+5V
20
LED_B
-
背光电源负极 0V

表1 LCD12864端口引脚说明

四、LCD12864液晶显示的软件代码分析

LCD12864液晶显示主要包括写入命令和写入数据两种操作方法,其基本代码解释如下。

#include<reg51.h>
#include<intrins.h> /*汇编函数库*/
#include<stdlib.h> /*函数库,可查*/
#define uchar unsigned char /*宏定义-8位的字符型变量*/
#define uint unsigned int /*宏定义-16位的整型变量*/

/*端口定义*/
#define LCD_data P0;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit LCD_PSB = P2^3;

/*显把示变量存储到数组里面*/
uchar dis1[] = {" 控制系统 "};
uchar dis2[] = {" N-TEMP: 30℃ "};
uchar dis3[] = {" 30 ℃-40 ℃ **"};
uchar dis4[] = {"S-TEMP: 40℃ LZF"};

/*延时函数*/
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}

/*写入命令到LCD12864,令RS=L,RW=L,EN=高脉冲,D0-D7=指令码。*/
void write_cmd(uchar cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
P0 = cmd;
delay_1ms(5);
LCD_EN = 1;
delay_1ms(5);
LCD_EN = 0;
}

/*写入数据到LCD12864,令RS=H,RW=L,EN=高脉冲,D0-D7=指令码。*/
void write_dat(uchar dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delay_1ms(5);
LCD_EN = 1;
delay_1ms(5);
LCD_EN = 0;
}

/*设定显示位置*/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if(X==0)
{X=0x80;}
else if(X==1)
{X=0x90;}
else if(X==2)
{X=0x88;}
else if(X==3)
{X=0x98;}
pos = X+Y;
write_cmd(pos);
}

/*LCD初始化设定*/
void lcd_init()
{
LCD_PSB = 1; //并行方式
write_cmd(0x30); //基本指令操作
delay_1ms(5);
write_cmd(0x0C); //显示开,关光标
delay_1ms(5);
write_cmd(0x01); //清除LCD的显示内容
delay_1ms(5);
}

/*主程序*/
void main()
{
uchar i;
delay_1ms(10); //延时
lcd_init(); //初始化LCD
lcd_pos(0,0); //设置显示位置为第一行的第一个字符
i = 0;
while(dis1[i]!='\0')
{
write_dat(dis1[i]); //显示字符
i++;
}
lcd_pos(1,0); //设置显示位置为第二行的第一个字符
i = 0;
while(dis2[i]!='\0')
{
write_dat(dis2[i]); //显示字符
i++;
}
lcd_pos(2,0); //设置显示位置为第三行的第一个字符
i = 0;
while(dis3[i]!='\0')
{
write_dat(dis3[i]); //显示字符
i++;
}
lcd_pos(3,0);
i = 0;
while(dis4[i]!='\0')
{
write_dat(dis4[i]); //显示字符
i++;
}
}

实物显示图


实物显示效果

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号