




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LCD1602液晶显示器简介一概述液晶(Liquid Crystal)是一种高分子材料,因其特殊的物理、化学、光学特性,广泛应用轻薄显示器上。液晶显示器(Liquid Crystal Display,LCD )的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名。例如,1602表示每行显示16个字符,一共可以显示两行。这类液晶通常称为字符型液晶,只能显示ASCII码字符。12232表示液晶显示画面由 122列、32行组成,共有122*32个 点来显示各种图形。用户可以通过程序控制这些点中任何一个点显示或不显示,从而
2、构成各种图形画面。因此,12232称为图形型液晶。液晶体积小,功耗低,显示操作简单。但其有致命的弱点,即使用温度范围很窄。通用型液晶工作温度为 0到+55摄氏度,存储温度为-20到+60摄氏度。二 LCD160211602的外形尺寸(毫米)so. 075 073 1无背光底祁LE0背光|2主要技术参数显示容呈:16X2个字符芯片工作电胚;4. 5-5, 5V工作电流:2. OmA(5. 0V)模块最住工作电压:5. 0V字符尺寸;2. 95X4. 35 MXH)nni3 接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地902Oats I/O2VDD电源正极10D3Data I/O3V
3、L液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data 1/5R/YI读/写选择端(H/L)13D6Data I/O6E使能值号14D7Data I/O7DOData 1/D15BLA背光源正极801Data 1/016BLK背光源鱼极4基本操作时序输出;DD、D?=状态字 输出;无输出:DOD?二数据输出:无读状态:输入;RS=L, RW=H, E=H写指令;输入;RS二L,剤二L, DDD?二指令谒,3高脉沖 读敎据;输入:RS=H,RW=H, E二H写數据:输入:尺匪乩捌丸宀”二敎据飞二高脉冲4 RAM地址映射图控制器内部带有80B的RAM缓冲区。对应
4、关系如下图所示。LCD苗字X2行44#CO0 1G2030405060708090A£BOCODDEOF1027404142434445464748494A4B4C404E4F5067向图中的000F、404F地址中的任意处写入显示数据时,液晶可立即显示出来; 当写入到1027或5067地址时,必须通过移屏指令将他们一移入可显示区域方可正常 显示。1602液晶模块内部的字符发生存储器(CGROM)已经存储了 160个不同的点阵字符图形,如下表所示。#nil抵nbHX X XXOOll才w11 . X9XXXX1010才X XX X10H(a>STAS07D605D4D3D2DI
5、DO允许禁止 02 H乎 HX X X X tlOOX X XXHO15千X X X X01MXXXXOlprX X x xoiioX X x x IHOX X X X ilHCGROM CGRAM中字符代码与字符图影对盛关系XXX XQCOOX X N XOOO!XXX XWilO这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B( 41H),显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“A”。6 状态字说明说明:原则上每次对控制器进行读写操作前,都必须进行读写检测,确保S
6、TA7为0。实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行检测,或 只进行简短的延时即可。OOOOX X X X011VXX X X10O0X X KX10CISTA7STA5STA3STA2STAOSTA0-6当前数据地址指针的数值7指令说明1602液晶模块内部的控制器共有11条控制指令。(1) 显示模式设置功能CGRAMSTA7读写操作便能设査1BX2显示,5X7点阵弋位敎据接口MHO010145(2)显示开/关及光标设置指令码功能0D001G2D=1开显示;0=0关显示0=1显示光标;0=0不显示光标B=1光标冈烁;B=0光标不显乔000001NShl二1当读或写一
7、个字符后地址指针加,且光标加一N=0当读或写一个字符后地址指針減 ,且光标减一S=1当写一个字符,整屏显示左移(N=1 或右移(N=0;,以得到光标不移动而屏 幕移动的效果:8=0当写一个字符,整屏显示不移动(3)数据指针设置指禽码功能80H+ 地址玛(0-27H .40H-67H)设宣数据地址指針(4)其它设置指令码功能01H显示清屏:1 数搞指针清零2 所有显示清零02H显示回车:1.數据指針清零8控制接口时序说明 时序参数时序鑫数符号极限值单位测试秦件最小佰典型值最天値E信号周期tc400ns引A EE麻冲寃度tp?f150二nsE上升沿/下啤沿时间tRtF25n宫地址建立时间t&
8、;P130ns引腳 E、RS、R/W地址保持时间tHDI10ns数据建立吋间(读操作)to100ns引JttD即“D盯数据保持时间(逮操柞)tHD220ns数掠I立吋间(写損作)t$P240ns数搞保持时间(帛操柞)tHDS10ns读操作时序写操作时序9初始化过程1)延时15ms2)写指令38H(不检测忙信号)3)延时5ms4)写指令38H(不检测忙信号)5)延时5ms6)写指令38H(不检测忙信号)7) (以后每次写指令、读/写数据操作之前均需检测忙信号)8)写指令38H:显示模式设置9)写指令08H:显示关闭10)写指令01H:显示清屏11)写指令06H:显示光标移动设置12)写指令OCH
9、显示开及光标设置三驱动程序举例1 I/O 方式驱动程序pi 0ARC"n爲;CJ>r j . -匸一P3J i_0 P3 0OrIR/WL*RSJ>oo-vo-L P=10KBLKBLA程序如下:/*SMC1602A(16*2)l/O口线接线方式连接线图:|LCM-51 | LCM-51 | LCM51|丨|DB0-P1.0 | DB4-丨-P1.4 | RW-P2.0 丨|DB1-P1.1 | DB5-P1.5 丨 RSP2.1 丨|DB2-P1.2 | DB6-P1.6 丨 EP2.2 丨|DB3-P1.3 | DB7-P1.7 丨 VLCD接1K电阻到GND|注:A
10、T89S51 使用12M晶体震荡器*/#in elude <reg51.h>sbit LCM_RW=P2A0;/ 定义引脚sbit LCM_RS =卩2人1;sbit LCM_E =P2A2;#define LCM DataP1#define Busy 0x80 / 用于检测 LCM 状态字中的 Busy 标识void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadS
11、tatusLCM(void); void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);codevoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData);void Delayms(unsigned int n);void dellay(unsigned int h);unsigned char code blog_adr = "EDNchina"un
12、signed char code email = "tengjingshu"void main(void) /Delay400Ms(); / 启动等待,等 LCM 讲入工作状态 LCMInit(); /LCM 初始化 DisplayListChar(6, 0, blog_adr);DisplayListChar(0, 0, email);while(1);/写数据 RS="H",RW=L,D0D7= 数据 ,E= 高脉冲 void WriteDataLCM(unsigned char WDLCM) dellay(100); LCM_E = 0;LCM_R
13、S = 1; LCM_RW = 0;LCM_Data = WDLCM;/dellay(100);/短暂延时,代替检测忙状态/ReadStatusLCM(); / 检测忙 LCM_E = 1;LCM_E = 0;/写指令 RS="L",RW=L,D0D7= 指令码 ,E= 高脉冲 void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC 为 0 时忽略忙检测/if (BuysC) ReadStatusLCM(); / 根据需要检测忙 dellay(100); /短暂延时,代替检测忙状态 LCM_E = 0;LCM_RS =
14、0;LCM_RW = 0;LCM_Data = WCLCM;LCM_E = 1;LCM_E = 0;/ 读数据 RS="H",RW=H,E=Hunsigned char ReadDataLCM(void)LCM_RS = 1;LCM_RW = 1;LCM_E = 1;return(LCM_Data);/ 读状态 RS="L",RW=H,E=Hunsigned char ReadStatusLCM(void)LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 1;/while (LCM_Data & Busy
15、); / 检测忙信号 return(LCM_Data);void LCMInit(void) /LCM 初始化LCM_Data = 0;51Delayms(15);WriteCommandLCM(0x38,0); /Delayms(5);WriteCommandLCM(0x38,0);Delayms(5);WriteCommandLCM(0x38,0);WriteCommandLCM(0x38,1); /WriteCommandLCM(0x08,1); /WriteCommandLCM(0x01,1); /WriteCommandLCM(0x06,1); /WriteCommandLCM(0x
16、0C,1); / 三次显示模式设置,不检测忙信号显示模式设置 ,开始要求每次检测忙信号 关闭显示显示清屏显示光标移动设置 显示开及光标设置/按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) Y &= 0x1;X &= 0xF; / 限制 X 不能大于 15, Y 不能大于 1if (Y) X |= 0x40; / 当要显示第二行时地址码 +0x40;X |= 0x80; / 算出指令码WriteCommandLCM(X, 1); / 这里不检测忙信号,发送地
17、址码 WriteDataLCM(DData);/按指定位置显示一串字符codevoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF;/ 限制 X 不能大于 15 , Y 不能大于 1while (DDataListLength>0x1f) / 若到达字串尾则退出if (X <= 0xF) /X 坐标应小于 0xFDisplayOneChar(X, Y, D
18、DataListLength); /显示单个字符ListLength+; X+;II延时程序void Delayms( un sig ned int n) un sig ned int i,j;for(j=n;j>O;j-) for(i=112;i>0;i-);/*函数名称:dellay* 入口参数:h (unsigned int 型)*出口参数:无*功能描述:短暂延时,使用12MHz晶体,约0.01MS*/void dellay (un sig ned inth)while(h-); /0.01MS要注意的是在读写程序中,没有用检测忙”,其实对于1602来说,没有检测忙信号对于实
19、际来说还好,因为常常因为检测忙,而使1602没显示(一直处于忙检测中)忙检测”用一个小延时代替。对于LCM1602来说,读写时序最重要。LCM1602写操作时序/写数据 RS="H",RW=L,D0D7= 数据 ,E= 高脉冲 void WriteDataLCM(unsigned char WDLCM) dellay(100);/短暂延时,代替检测忙状态LCM_E = 0; LCM_RS = 1; LCM_RW = 0;LCM_Data = WDLCM; LCM_E = 1;LCM_E = 0;/写指令 RS="L",RW=L,D0D7= 指令码 ,E=
20、 高脉冲 void WriteCommandLCM(unsigned char WCLCM) dellay(100);/短暂延时,代替检测忙状态LCM_E = 0;LCM_RS = 0; LCM_RW = 0;LCM_Data = WCLCM; LCM_E = 1;LCM_E = 0; 上面两个分别为写数据函数和写命令函数,检测忙已用小延时代替。其实这个时序 好像不太严格,但要保证的是 E 高脉冲时,写的数据 /命令是有效的。好像函数也可以写成这样:void WriteCommandLCM(unsigned char WCLCM) dellay(100);/ 短暂延时,代替检测忙状态LCM_D
21、ata = WCLCM; LCM_RS = 0;LCM_RW = 0;LCM_E = 0; dellay(100); LCM_E = 1;/按指定位置显示一串字符函数 DisplayListChar 的作用是在指定位置显示一串字符,其中有一句“ while (DDataListLength>0x1f) / 若到达字串尾则退出 ”为什么要大于 0x20 呢?unsigned char code blog_adr = "EDNchina"unsigned char code email = "tengjingshu"用单引号 ? ( 括) 起来的字符为
22、字符的 ASCII 码值,而不是字符串。用双引号”(shift括起来的一串字符,成为字符串常量。C编译器会自动地在字符末尾加上结束符 ?0?(NULL) (ASCII 码为 0x00 也就是 00H)。char a=“ Bei Jing ” ;char a=,B?,?e?,?I?,? ,?J?,?i?,?n?0,?g;?,?两者是等价的,数组的每个元素为对应字符的ASCII码,如a3数组a的第四个元素是 ? ,空格,则 a3 里面放着的是空格 ? 的, ASCII 码 0x20。还要注意的是数组的元素数目一定要比字符多一个。以便C 编译器自动在其后面加入结束符 ?0?。可以知道, 0? ASC
23、II 码为 0x00, n?ASCII 码为 0x0A那知道为什么有这句了吧“while (DDataListLength>0x1F) / 若到达字串尾则退出 ” 因为大于 0x1f 才能显示字符,小于和等于 0x1f 的都是键盘控制符。 当然我们也可以检测 ?0?(0x00)“while (DDataListLength!=' 0') /检测到字符串结束符则退出 ”552 总线方式驱动程序DBO!*I*DB7£P/WRSWBLKBLAO 7 ? 1 0D -R PM 2 2 n, P -w p p psw LS0856#LCM1602 总线方式 C51程序/*
24、Lcd1602B.c*#in elude <delay.h>#in elude <lcd1602b.h>#in elude <absacc.h>/*=显示字符串=*/void LcdDisplayStri ng(un sig ned char x,un sig ned char y, un sig ned char *ptr) un sig ned char i,l=0;while (ptrl >31)l+;/for (i=0;i<l;i+) LcdDisplayChar(x+,y,ptri);if ( x = 16 )x = 0; y心1; I
25、I异或,第一行的话变第二行,第二行的话变第一行/*=显示光标定位=*/void LocateXY( char posx,char posy) unsigned char temp;temp = posx & 0x0f;/确保只选 016 个格子posy &= 0x01;/确保不是在第一行就在第二行if ( posy )temp |= 0x40;/ 在第二行的时候加 40Htemp |= 0x80; / 数据指针设置 指令码 80H+ 地址码( 0-27H ,40H-67H ) LcdWriteCommand(temp,1);/*= 按指定位置显示数出一个字符=*/ void L
26、cdDisplayChar(unsigned char x,unsigned char y,unsigned char Wdata) LocateXY( x, y ); / 定位显示地址LcdWriteData( Wdata );/ 写字符 /*=初始化程序 , 必须按照产品资料介绍的初始化过程进行=*/void LcdReset( void ) Delayms(400); / 启动时必须的延时,等待 lcm 进入工作状态/*LcdWriteCommand( 0x38, 0);Delayms(15);LcdWriteCommand( 0x38, 0);Delayms(15);LcdWriteC
27、ommand( 0x38, 0);Delayms(15);LcdWriteCommand( 0x38, 1);LcdWriteCommand( 0x08, 1);LcdWriteCommand( 0x06, 1);LcdWriteCommand( 0x0c, 1);LcdClear();/ 显示模式设置 (不检测忙信号 )/ 共三次/ 显示模式设置 (以后均检测忙信号 )/ 显示关闭/ 显示光标移动设置/ 显示开及光标设置clear =*/ void LcdClear(void)LcdWriteCommand( 0x01, 1);/ 显示清屏 /*= 写控制字符子程序 : E="1&
28、quot; RS="0" RW="0" =*/ void LcdWriteCommand( unsigned char CMD,unsigned char AttribC ) /AttribC=1 检查忙状态, AttribC=0 不检查忙状态if (AttribC) while( Lcd1602StatusPort & Busy );/ 检测忙信号 ?/busy=0x80 每次读写操作都要进行读写检测,确保 SAT7=0 Lcd1602CmdPort = CMD;/*= 当前位置写字符子程序 : E =1 RS="1" RW
29、="0"=*/ void LcdWriteData( char dataW ) while( Lcd1602StatusPort & Busy );/检测忙信号/busy=0x80 每次读写操作都要进行读写检测,确保 SAT7=0Lcd1602WdataPort = dataW;精确微秒级延时(详细可以参考我另一篇博文 51 单片机 C51 微秒级( ms )精确 延时 )/*delay.h*#include <delay.h>/for crystal 11.0592Mvoid Delayms(unsigned int n) unsigned int i
30、,j; for(j=n;j>0;j-) for(i=112;i>0;i-);58/* lcd1602b.h *#ifndef _LCD1602B_H_#define _LCD1602B_H_#define Lcd1602CmdPort XBYTE0x8000#define Lcd1602WdataPort XBYTE0x8100#define Lcd1602StatusPort XBYTE0x8200/E=1 RS="0" RW="0"/写指令/E =1 RS="1" RW="0" / 写数据 /E=1
31、 RS="0" RW="1"/ 读状态#define Busy 0x80/busyextern void LcdClear(void);extern void LcdWriteData( char dataW );extern void LcdWriteCommand( unsigned char CMD,unsigned char AttribC );extern void LcdReset( void );extern void Display( unsigned char dd );extern void LcdDisplayChar(unsign
32、ed char x,unsigned char y,unsigned char Wdata);extern void LcdDisplayString(unsigned char x,unsigned char y, unsigned char *ptr);#endif其中要注意写指令的地址0x8000写数据的地址0x8100读状态的地址0x8200这三个地址值是根据硬件电路连接确定的。*/*absacc.h*#ifndef _ABSACC_H_ #define _ABSACC_H_#define CBYTE (unsigned char volatile code*) 0)#define DBYTE (unsigned char volatile data*) 0)#define PBYTE (unsigned char volatile pdata *) 0) #define XBYTE (unsigned char volatile xdata *) 0)#defin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 货物学的考试题及答案
- 动物助理面试题及答案
- 小熊搬家面试题及答案
- 安徽高职面试题及答案
- 公共卫生科年终工作总结
- 家电公司应急组织管理办法
- 2026届辽宁省重点六校协作体高一化学第一学期期中教学质量检测试题含解析
- 上海市东昌中学2026届化学高一第一学期期末学业质量监测试题含解析
- 2020-2025年投资项目管理师之宏观经济政策考前冲刺模拟试卷B卷含答案
- 采购苗案件处理方案(3篇)
- 建筑设计院各部门职责及架构
- 《2025年CSCO肾癌诊疗指南》解读
- 商厅买卖合同协议
- DB22-T3484-2023-冬捕作业规范-吉林省
- 机场旅客医疗救援应急预案
- 2025-2030中国音箱塑胶外壳市场营销格局与未来前景投资风险评估研究报告
- 电缆组管理制度
- 计算机基础知识教学培训课件
- 工程款保障措施
- 2025年一建《铁路工程管理与实务》考前必刷必练题库500题(含真题、重点题)
- 2025届湖北省荆门市钟祥市重点中学小升初数学入学考试卷含解析
评论
0/150
提交评论