lcd1602使用说明
- 格式:doc
- 大小:224.00 KB
- 文档页数:8
产品使用说明书1602A1字符型液晶显示模块(双接口&带串口)第 1 页,共 29 页目录一、概述--------------------------------------------------------------------------- 3二、主要参数--------------------------------------------------------------------- 3三、接口引脚说明--------------------------------------------------------------- 4四、时序说明--------------------------------------------------------------------- 51、写操作时序与时序图:(MCUàLCM)------------------------------------------ 52、读操作时序与时序图:(LCMàMCU)------------------------------------------ 5五、LCM内部结构-------------------------------------------------------------- 61、指令寄存器(IR)和数据寄存器(DR)-------------------------------------- 62、忙标志位BF ------------------------------------------------------------------------ 63、地址计数器(AC)----------------------------------------------------------------- 64、显示数据寄存器(DDRAM)---------------------------------------------------- 75、字符发生器ROM ------------------------------------------------------------------ 76、字符发生器RAM ------------------------------------------------------------------ 8六、指令说明-------------------------------------------------------------------111、Clear display (清显示)-------------------------------------------------------------112、Return home (归位)----------------------------------------------------------------113、Entry mode set (设置输入模式)-------------------------------------------------124、Display on/off control (显示开/关控制)----------------------------------------125、Cursor or display shift (游标或显示移位元)-----------------------------------126、Function set (功能设置)----------------------------------------------------------137、Set CGRAM address (CGRAM地址设置)-------------------------------------138、Set DDRAM address (DDRAM地址设置)-------------------------------------139、Read busy flag and address (读忙标志BF和AC)-----------------------------1410、Write data to CGRAM or DDRAM(写数据到CGRAM或DDRAM)---------------------------------------------1411、Read data from CGRAM or DDRAM(从CGRAM或DDRAM中读数据)------------------------------------------14七、应用举例--------------------------------------------------------------------151、硬件方面电路----------------------------------------------------------------------152、软件举例----------------------------------------------------------------------------15八、注意事项--------------------------------------------------------------------19第 2 页,共 29 页一、概述:1602A1字符型液晶显示模块是专门用于显示字母、数字元、符号等的点阵型液晶显示模块。
图1再来一张它的背面的,如图2所示:图2图3图4二.基本操作LCD1602的基本操作分为四种:1. 读状态:输入RS=0,RW=1,E=高脉冲。
输出:D0—D7为状态字。
2. 读数据:输入RS=1,RW=1,E=高脉冲。
输出:D0—D7为数据。
3. 写命令:输入RS=0,RW=0,E=高脉冲。
输出:无。
4. 写数据:输入RS=1,RW=0,E=高脉冲。
输出:无。
读操作时序图(如图5):图5写操作时序图(如图6):图6时序时间参数(如图7):图7三.DDRAM、CGROM和CGRAMDDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下(如图8):图8DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。
同样LCD1602共有80个字节的显存,即DDRAM。
但LCD 1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不能显示出来。
这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
前面说了,为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。
例如,如果想在屏幕左上角显示字符‘A’,那么就把字符‘A’的字符代码41H写入DDRAM的00H地址处即可。
至于怎么写入,后面会有说明。
那么为什么把字符代码写入DDRAM,就可以在相应位置显示这个代码的字符呢?我们知道,LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据,看看下面的这个图就明白了(如图9)。
图9上图的左边就是字符‘A’的字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。
从而显示出‘A’这个字形。
LCD1602数据手册1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”1602液晶模块内部的控制器共有11条控制指令,如表2所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明: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:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
LCD1602功能介绍LCD1602采用16脚(带背光)接口,各引脚接口功能介绍如下:第一脚:VSS为地电源。
第二脚:VDD为5V正电源。
第三脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“见影”,使用时可以通过一个20千欧的电位器调整对比度。
第四脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第五脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同低电平时可以写入指令或显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平时R/W为低电平时可以写入数据。
第六脚: E为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第七至第十四脚:为八位双向数据线。
第十五脚:背光源正极。
第十六脚:背光源负极。
LCD的指令和时序:LCD1602液晶模块内部的控制器共有11条控制指令,1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
指令介绍如下: 指令1: 清显示,指令码01H,指令复位到地址00H位置。
指令2:光标复位,光标返回到地址00H。
指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。
高电平有效,低电平则无效。
指令4:显示开关控制。
D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电表示无光标。
B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。
指令6: 功能设置命令 DL:高电平时为4位总线,低电平时为八位总线 N:低电平时为单行显示,高电平时为双行显示 F:低电平时显示5×7的点阵字符,高电平时显示5×10的点阵字符。
指令7:字符发生器RAM地址设置。
指令8:DDRAM地址设置。
LCD1602帮助手册正面图背面图正面图为第一图,管脚应排列在左上方,左边第一脚为管脚1,向右依次为2,3,4………15,16。
背面一般也有标注,并且附带了管脚对应的作用。
其中第三脚VO为对比度调节脚,一般外接滑动变阻器,调节输入的电压,来调节明暗度(可以直接接地,不过直接接地,需要斜着屏幕,才能看见LCD是否显示字符,正面看都是黑黑的一格一格的)。
15,16角一般为背光LED灯源,一个接VCC(一般为15脚),一个接GND(一般为16脚),最好接入限流电阻,不接也可使用,不过会缩短寿命,这两角可以不接,如果不接,在黑暗的室内,显示效果欠佳。
管脚编号如下图所示:管脚对应符号对LCD的操作,有四种操作,分别为:读状态,读数据,写指令和写数据,一般常用的为读状态,写指令和写数据。
操作图如下:当RS端为低电平,RW端为高电平,E为高电平是,对LCD1602的操作为读状态操作,这时,可以对LCD的状态进行读取,读取通过D0~D7的端口读取。
其他操作相似,对照图,即可完成,但是有个读写时序的要求,时序图见下图:读操作时序对LCD进行读操作时,先将RS置为低电平(0V),然后将RW样置为高电平(+5V),然后有个tsp1的延迟(但是一般这个延迟为ns级,一个单片机的指令周期通常都为us级,一般不需要特别延迟,如果程序有一定错误的时候,可以稍微延迟一下),然后再将E置为1,然后延迟td时间(td一般也为ns级,可以适当延迟一点点),然后读取D0~D7的数据。
写操作也是类似的,将RS,RW,E端口进行相应操作即可完成,写数据和写命令的操作,延迟的时间都很短,程序不稳定的话,可以延迟个1us,一般就可以了。
LCD1602的指令有11条,如下图:(指令表)从之前的操作来看,对照此表,不难看出,指令表的前8条都是命令指令,RS,RW都为0,所以操作时,都是写命令操作,D7~D0的数值的不同,代表了操作的不同,比如D0~D7为0x01时,对LCD的操作命令就为清屏显示,第二条指令为光标返回指令,在D0处有个※标记,这表示,不论此位的数据为1还是为0,对此命令都无效,即D0~D7端口写入0x20为光标返回指令,D0~D7端口写入0x03,此命令也为光标返回指令。
LCD1602中文资料程序和使用说明一、硬件连接和初始化步骤:1.将LCD1602的16个引脚连接到MCU(单片机)的相应引脚上。
其中,VCC和GND分别接到电源正负极,VO接到可调电位器的中间引脚(用于调节背光亮度),RS、RW和E分别接到MCU的IO口上,D0-D7分别接到MCU的8个IO口上。
2.初始化LCD1602的操作包括设置显示模式、显示光标、输入模式等,具体步骤如下:a.将8位数据接口设置为并行输入模式,即设置D0-D3为输入模式。
b.设置显示模式为2行显示,5x8点阵字符,显示器不移动。
c.将显示光标设置为闪烁显示。
d.设置数据输入方式为向右移动,同时字符显示不移动。
e.清除显示内容,将光标位置设置为第一行第一列。
f.打开显示器和光标显示功能。
二、常用函数和操作方法:1. void lcd1602_init( 初始化LCD1602,包括上述硬件连接和初始化步骤。
2. void lcd1602_clear( 清除显示内容。
3. void lcd1602_setCursor(int row, int column) 设置光标位置,row表示行数(从0开始),column表示列数(从0开始)。
4. void lcd1602_print(String str) 在当前光标位置打印字符串str。
5. void lcd1602_shiftDisplayLeft( 将显示内容向左移动一位。
6. void lcd1602_shiftDisplayRight( 将显示内容向右移动一位。
7. void lcd1602_scrollDisplayLeft( 将整个显示内容向左滚动一格。
8. void lcd1602_scrollDisplayRight( 将整个显示内容向右滚动一格。
9. void lcd1602_noCursor( 关闭光标显示。
10. void lcd1602_cursor( 打开光标显示。
控制接口说明:1、基本操作时序:1.1读状态:输入:RS=L,RW=H,E=H 输出:D0—D7=状态字1.2写指令:输入:RS=L,RW=L,D0—D7=指令码,E=高脉冲输出:无1.3读数据:输入:RS=H,RW=H,E=H 输出:D0—D7=数据1.4写数据:输入:RS=L,RW=L,D0—D7=数据,E=高脉冲输出:无2、状态字说明3、RAM地址映射图控制器内部带有80×8位(80字节)的RAM缓冲区,对应的关系如下图所示:4、指令说明4.1初始化设置显示模式设置控制器内部设有一个数据地址指针,可通过它们来访问内部的全部80字节RAM。
数据指针设置:延时15ms写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)延时5ms写指令38H(不检测忙信号)(以后每次写指令、读/写数据操作之前均需检测忙信号)写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置原文出自:/47okey/blog/item/809c7cfc8dd6541c08244d60.html程序分析:、程序清单:RS BIT P3.7 ;RS1602液晶的数据命令控制端,高电平为数据,低电平为指令;这3位是液晶屏的控制信号,连接方式由具体硬件而定RW BIT P3.6;RW1602液晶的读写控制端,高电平为读,低电平为写E BIT P3.5;E1602的使能端ORG 0000H;程序开始LJMP MAIN;跳转到MAIN处执行程序ORG 0100H;数据存放地址MAIN:LCALL DISPLAY;调用液晶显示子程序LCALL D1S;延时1秒LJMP MAIN;返回到MAIN处;-------液晶显示的子程序(显示前先格式转换)---------------------------------------DISPLAY:LCALL INITIAL;调用初始化子程序MOV A, #10000000B ; LINE1: DB 'This is a TEST',00H,设置第一行的显示地址LCALL WRITE_INSTRUCTION;调用写液晶命令子程序MOV DPTR, #LINE1;将表格1送到DPTR中LCALL PR_STRING;调用写字符子程序LCALL WRITE_LCDDATA;调用写液晶数据子程序MOV A, #11000000B ; LINE2: DB'Design by 47okey',00H,设置第二行的显示地址LCALL WRITE_INSTRUCTION;调用写液晶命令子程序MOV DPTR, #LINE2;将表格2送到DPTR中LCALL PR_STRING;调用写字符子程序RET;---液晶屏初始化,具体请参考资料-------------------------------------------------initial: MOV A, #01H;01H这个指令是设置1602的清屏操作LCALL WRITE_INSTRUCTION;调用液晶命令写入子程序MOV A, #38H;38H这个指令是设置1602的显示模式,2行,16个字符/行LCALL WRITE_instruction;调用液晶命令写入子程序MOV A, #0FH;0FH这个指令是设置1602的显示、显示光标、光标闪烁LCALL WRITE_instruction;调用液晶命令写入子程序MOV A, #06H;06H这个指令是设置1602的输入方式,增量不移位LCALL WRITE_instruction;调用液晶命令写入子程序RET;----写液晶指令的子程序------------------------------------------WRITE_instruction: MOV P1, A;将累加器A中的命令送到P0口做输出数据CLR RS ;写入控制命令,RS低电平为命令CLR RW;读写控制端,RW,低电平为写,就是写命令CLR E;使能端,E发生电平跳变就开始写入命令LCALL DELAY;调用延时子程序,也就是下面写的判断液晶模块是否处于忙状态SETB E;使能端,E发生电平跳变完成,写入命令完成RET;----写液晶数据的子程序---------------------------------------------write_lcddata: MOV P1, A;将累加器A中的数据送到P0口做输出数据SETB RS ;写入显示数据,RS高电平为数据CLR RW;读写控制端,RW低电平为写数据CLR E;使能端E,低电平LCALL DELAY ;判断液晶模块是否忙?SETB E;使能端,E发生电平跳变完成,写入数据完成RET;-----写行字符的子程序---------------------------------------------------------------PR_STRING: CLR A;将累加器A中的内容做清零操作MOVC A, @A+DPTR;查表,将查到的数据送到累加器A中去JZ END_PR;JZ为累加器A判0转移指令,若A 中不为0则往下执行程序,为0则跳转到END_PR处LCALL WRITE_LCDDATA;调用写液晶数据的的子程序INC DPTR;DPTR地址加一LJMP PR_STRING;跳转到PR_STRING处执行程序END_PR: RET;----查看液晶忙碌信号的子程序---------------------------------------------------------DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序 CLR RS;RS低电平,写命令SETB RW;RW高电平,读液晶内部的数据CLR E;使能端低电平NOP;延时一个机器周期SETB E;使能端高电平JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待,JB判bit转移,bit为1则跳转,否则顺序执行程序 RET;---1mS延时(按12MHZ算)-----------------------------------------------------------------D1mS: MOV R7,#250LOOP0: NOPNOPDJNZ R7,LOOP0RET;----1S延时(按12MHZ算)-----------------------------------------------------------------D1S: Mov R6,#4LOOP2: mov R5,#250LOOP1: LCALL D1mSDJNZ R5,LOOP1DJNZ R6,LOOP2RET;--------------------------------------------------------------------------------------LINE1: DB 'This is a TEST !',00HLINE2: DB 'Design by 47okey',00HEND。
LCD1602是个两行显示,且每行能显示16个字符的液晶显示器其控制指令有如下组成控制指令--------设置指令(初始化设置LCD的工作状态,比如是两行显示,还是单行显示)以上就是在LCD显示器上的地址映射数据-----------就是要在对应位置上显示的数据其指令对应指令1 清显示,指令码01H,光标复位到地址00H位置。
指令2 光标复位,光标返回到地址00H。
指令3 光标和显示模式设置。
I/D:光标移动方向,1为右移动,0为左移动。
S:屏幕上所有文字是否左移或者右移。
1表示有效,0表示无效。
指令4 显示开关控制。
D:控制整体显示的开与关,1为开显示,0为关显示。
C:控制光标的开与关,1表示有光标,0表示无光标。
B:控制光标是否闪烁,1闪烁,0不闪烁。
指令5 光标或显示移位。
S/C:1时移动显示的文字。
0时移动光标。
指令6 功能设置命令。
DL:1时为4位总线,0时为8位总线。
N:0时为单行显示,1时为双行显示。
F:0时显示5x7的点阵字符,1时显示5x10的点阵字符。
指令7 字符发生器RAM地址设置。
指令8 DDRAM地址设置。
指令9 读忙信号和光标地址。
BF:为忙标志位,1时表示忙,此时模块不能接收命令或数据,如果为0表示不忙。
指令10 写数据。
指令11 读数据。
管脚说明RS 数据寄存器与指令寄存器的选择端口,RS=0,为指令寄存器,RS=1,为数据寄存器RW 为读写操作,RW=1,为读,RW=0,为写E 使能端,,下降沿使能LCD作用D0---D7 8位数据端口LCD的操作初始化LCD----数据操作----返回总的说来,就是先初始化LCD,在写入地址指令,在写入显示数据初始化LCD(设置LCD的工作状态,其指令如上面框图)参考程序如下(delay为延时,lcd_wcmd为写指令函数)void lcd_init(){ lcd_wcmd(0x38);delay(300);lcd_wcmd(0x0c);delay(300);lcd_wcmd(0x06);delay(300);lcd_wcmd(0x01);delay(300);}初始化完后就可以进行对LCD的操作,但是不管是写指令还是写数据,先要判断其状态(因为它是个慢显示)忙碌判断参考程序如下(da为八位数据口)bit lcd_bz(){ bit result;rs = 0;//选择指令寄存器rw = 1;//读操作ep = 1;delay(3);result = (bit)(da & 0x80);//读取忙碌标志ep = 0;//模拟一个下降沿,使能LCDreturn result;//返回忙碌标志}在写数据之前要先写入地址指令参考程序如下void lcd_wcmd(unsigned char cmd){while(lcd_bz()); //判断LCD忙碌rs = 0;//指令寄存器rw = 0;//写操作ep = 0;delay(3);da= cmd;//写入指令delay(3);ep = 1;delay(3);ep = 0;//模拟一个下降沿,使能LCD}注意初始化那写指令也是用的这个程序,但是区别在于写地址指令时候,cmd变量的最高位要恒为1 比如写03H这个地址指令,则cmd的值要为0x83,这样才会正确地显示地址指令写完后,就可以写入数据参考程序如下(dat为写入的数据)void lcd_wdat(unsigned char dat){while(lcd_bz()); //判断LCD忙碌rs = 1;//数据寄存器rw = 0;//写操作ep = 0;da = dat;//写入数据delay(3);ep = 1;delay(3);ep = 0;//模拟一个下降沿,使能LCD}注意 1. 初始化LCD只需在主程序中执行一次就可。
1602采用标准的16脚接口,其中:
第1脚:VSS为地电源
第2脚:VDD接5V正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
1602液晶模块内部的控制器共有11条控制指令,如表2所示,
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明: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:读数据
DM-162液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3是DM-162的内部显示地址.
比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)
以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序:ORG 0000H
RS EQU P3.7;确定具体硬件的连接方式
RW EQU P3.6 ;确定具体硬件的连接方式
E EQU P3.5 ;确定具体硬件的连接方式
MOV P1,#00000001B ;清屏并光标复位
ACALL ENABLE;调用写入命令子程序
MOV P1,#00111000B ;设置显示模式:8位2行5x7点阵
ACALL ENABLE ;调用写入命令子程序
MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁
ACALL ENABLE ;调用写入命令子程序
MOV P1,#00000110B ;文字不动,光标自动右移
ACALL ENABLE ;调用写入命令子程序
MOV P1,#0C0H ;写入显示起始地址(第二行第一个位置)
ACALL ENABLE ;调用写入命令子程序
MOV P1,#01000001B ;字母A的代码
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
ACALL DELAY ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
AJMP $
ENABLE:
CLR RS ;写入控制命令的子程序
CLR RW
CLR E
ACALL DELAY
SETB E
RET
DELAY:
MOV P1,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待RET
END
程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。
注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字符A的代码41H。