单片机LCD液晶显示的接法文档格式.docx
《单片机LCD液晶显示的接法文档格式.docx》由会员分享,可在线阅读,更多相关《单片机LCD液晶显示的接法文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
![单片机LCD液晶显示的接法文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/ba63c1a1-2b20-4b5b-b9e6-8d41a8854699/ba63c1a1-2b20-4b5b-b9e6-8d41a88546991.gif)
这确实是LCD显示的大体原理。
字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×
8或8×
8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
如此一来就组成某个字符。
但由于内带字符发生器的操纵器来讲,显示字符就比较简单了,能够让操纵器工作在文本方式,依照在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
汉字的显示
汉字的显示一样采纳图形的方式,事前从微机中提取要显示的汉字的点阵码(一样用字模提取软件),每一个汉字占32B,分左右两半,各占16B,左侧为一、3、5……右边为二、4、6……依照在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就能够够LCD上取得一个完整汉字。
10.8.21602字符型LCD简介
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前经常使用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子的1602字符型液晶显示器为例,介绍其用法。
一样1602字符型液晶显示器实物如图10-53:
图10-531602字符型液晶显示器实物图
10.1602LCD的大体参数及引脚功能
1602LCD分为带背光和不带背光两种,基操纵器大部份为HD44780,带背光的比不带背光的厚,是不是带背光在应用中并无不同,二者尺寸不同如以下图10-54所示:
图10-541602LCD尺寸图
1602LCD要紧技术参数:
显示容量:
16×
2个字符
芯片工作电压:
—
工作电流:
模块最正确工作电压:
字符尺寸:
×
(W×
H)mm
引脚功能说明
1602LCD采纳标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
表10-13:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对照度调整端,接正电源时对照度最弱,接地时对照度最高,对照度太高时会产生“鬼影”,利历时能够通过一个10K的电位器调整对照度。
第4脚:
RS为寄放器选择,高电平常选择数据寄放器、低电平常选择指令寄放器。
第5脚:
R/W为读写信号线,高电平常进行读操作,低电平常进行写操作。
当RS和R/W一起为低电平常能够写入指令或显示地址,当RS为低电平R/W为高电平常能够读忙信号,当RS为高电平R/W为低电平常能够写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平常,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
10.8.2.31602LCD的指令说明及时序
1602液晶模块内部的操纵器共有11条操纵指令,如表10-14所示:
序号
指令
清显示
光标返回
*
置输入模式
I/D
S
显示开/关控制
D
C
B
光标或字符移位
S/C
R/L
置功能
DL
N
F
置字符发生存贮器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志或地址
BF
计数器地址
写数到CGRAM或DDRAM)
要写的数据内容
从CGRAM或DDRAM读数
读出的数据内容
表10-14:
操纵命令表
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:
低电平常显示5x7的点阵字符,高电平常显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,现在模块不能接收命令或数据,若是为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
无
读数据
RS=H,R/W=H,E=H
D0—D7=数据
写数据
RS=H,R/W=L,D0—D7=数据,E=高脉冲
表10-15:
大体操作时序表
读写操作时序如图10-55和10-56所示:
图10-55读操作时序
图10-56写操作时序
10.8.2.41602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,因此在执行每条指令之前必然要确认模块的忙标志为低电平,表示不忙,不然此指令失效。
要显示字符时要先输入显示字符地址,也确实是告知模块在哪里显示字符,图10-57是1602的内部显示地址。
图10-571602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是不是直接写入40H就能够够将光标定位在第二行第一个字符的位置呢?
如此不行,因为写入显示地址时要求最高位D7恒定为高电平1因此实际写入的数据应该是01000000B(40H)+B(80H)=B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符光阴标是自动右移的,无需人工干与。
每次输入指令前都要判定液晶模块是不是处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:
阿拉伯数字、英文字母的大小写、经常使用的符号、和日文化名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,咱们就能够看到字母“A”
图10-58字符代码与图形对应图
10.8.2.51602LCD的一样初始化(复位)进程
延时15mS
写指令38H(不检测忙信号)
延时5mS
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
10.8.31602LCD的软硬件设计实例
在1602LCD第一行显示网站名:
在第二行显示联系:
8。
实验前应先将显示切换开关心换到LCD工作状态。
图10-591602LCD实验演示图
10.8.3.1硬件原理图
1602液晶显示模块能够和单片机AT89C51直接接口,电路如图10-60所示。
图10-60硬件原理图
10.8.3.2程序流程图
图10-61软件流程图
10.8.3.3软件代码
/***************************************************************************/
/*杭州电子&
运算机工作室*/
/*演示程序*/
/*目标器件:
AT89S51*/
/*晶振:
*/
/*编译环境:
Keil*/
/*********************************包括头文件********************************/
#include<
>
/*********************************端口概念**********************************/
sbitrs=P2^0;
sbitrw=P2^1;
sbitep=P2^2;
/********************************显示数据表*********************************/
unsignedcharcodedis1[]={"
"
};
unsignedcharcodedis2[]={"
8"
/*****************************************************************************
函数功能:
LCD延时子程序
入口参数:
ms
出口参数:
*****************************************************************************/
voiddelay(unsignedcharms)
{
unsignedchari;
while(ms--)
for(i=0;
i<
250;
i++)
_nop_();
}
测试LCD忙碌状态
result
bitlcd_bz()
bitresult;
rs=0;
rw=1;
ep=1;
result=(bit)(P0&
0x80);
ep=0;
returnresult;
写指令数据到LCD子程序
cmd
voidlcd_wcmd(unsignedcharcmd)
while(lcd_bz());
//判定LCD是不是忙碌
rw=0;
P0=cmd;
设定显示位置子程序
pos
voidlcd_pos(unsignedcharpos)
lcd_wcmd(pos|0x80);
写入显示数据到LCD子程序
dat
voidlcd_wdat(unsignedchardat)
rs=1;
P0=dat;
LCD初始化子程序
voidlcd_init()
lcd_wcmd(0x38);
delay
(1);
lcd_wcmd(0x0c);
lcd_wcmd(0x06);
lcd_wcmd(0x01);
主程序
voidmain(void)
lcd_init();
//初始化LCD
delay(10);
lcd_pos(0x01);
//设置显示位置
i=0;
while(dis1[i]!
='
\0'
)
lcd_wdat(dis1[i]);
//显示字符
i++;
lcd_pos(0x42);
//设置显示位置
while(dis2[i]!
lcd_wdat(dis2[i]);
//显示字符
while
(1);