《2037.基于MCS51单片机与LCD液晶显示器的接口技术 .doc》由会员分享,可在线阅读,更多相关《2037.基于MCS51单片机与LCD液晶显示器的接口技术 .doc(38页珍藏版)》请在三一办公上搜索。
1、专科毕业设计(论文)设计题目: 基于MCS51单片机与LCD液晶显示器的接口技术 系 部: 信息工程系 专 业: 电子信息工程 班 级: 电子信息 姓 名: 学 号: 指导教师: 职 称 讲师 2009年6月 南京摘 要LCD液晶显示已经是人机界面的关键技术。本文对基于单片机的LCD液晶显示器控制技术进行了研究。本文阐明用单片机(STC89C52)控制LCD1602显示屏的方法。首先本文研究了LCD1602液晶屏(HD44780)的点阵显示原理及字库代码获取方法,随后通过在Proteus仿真软件上构建相关的仿真电路,并连接在Keil软件上编写、编辑及编译生成的相关的.Hex驱动程序进行电路仿真
2、,成功仿真出对所需内容的循环显示。编程语言主要使用的是汇编。在成功模拟仿真后本文进一步进行了在单片机开发板上的程序烧录。本文所描述的设计产品实际制作是基于原理图生成的PCB板,最后通过购买元件、元件测试、电路焊接、产品调试完成了本次设计的全部过程。 关键词 :LCD,单片机,显示屏,驱动,扫描,仿真,设计 AbstractLCD liquid crystal display is the key to man-machine interface technology. In this paper, based on single-chip LCD liquid crystal display
3、control technology is studied. This article set out to use single-chip microcomputer (STC89C52) control method LCD1602 display. First of all, this paper LCD1602 LCD (HD44780) and the principle of the dot matrix display font access method code, followed by Proteus simulation software circuit simulati
4、on to build relevant and connected to the Keil software to prepare, edit and compile the relevant generating . Hex driver circuit simulation, the success of the simulation cycle required to display the content. The main programming language used was compiled. After the success of simulation in this
5、paper for further development in the single-chip on-board procedures for burning. This paper describes the design of the actual production of products is based on the schematic diagram of the PCB board to generate, and finally through the purchase of components, component testing, circuit welding, p
6、roduct testing was completed the design of the whole process.Keywords: LCD,singlechip,display,drive,scan,simulation,design目 录摘 要II1 绪论11.1液晶显示器在单片机系统中的应用11.2液晶显示器的优点12 LCD1602液晶显示器的显示原理32.1液晶显示原理简介32.2 1602字符型LCD简介42.3 LCD1602的基本参数及引脚功能42.4 LCD1602的RAM地址映射及标准字库表62.5 LCD1602的一般初始化(复位)过程133 电路软件模拟及仿真1
7、43.1 Keil及Proteus使用介绍143.2 LCD1602入门程序的实现163.3 字符型液晶显示模块与单片机的连接183.4字符型液晶显示模块应用233.5 液晶模块显示的拓展提高264 硬件电路原理图及程序的烧写294.1 硬件电路原理图及硬件图294.2 程序的烧写方法及演示30结 论32致 谢33参 考 文 献341 绪论当今是一个信息化的时代,信息的重要性是不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏及LCD液晶显示,而在这些显示技术中,尤其以液晶显示器
8、LCD(Liquid Crystal Display)为代表的平板显示器发展最快、应用最广。LCD是典型的光电器件,它以材料科学为基础,综合利用了精密机械、光电及计算机技术,并正在微机械、微光学、纤维光学等前沿领域研究基础上,向高集成化、智能化方向发展。1.1液晶显示器在单片机系统中的应用在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通用器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在
9、小型智能化电子产品中,普通的7段LED数码管只能显示数字,若要显示英文字母或图像汉字,则必须使用液晶显示器,所以本课题重点研究液晶显示器。 1.2液晶显示器的优点在单片机系统中应用晶液显示器作为输出器件有以下几个优点:1.1.1显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。1.1.2数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方。1.1.3体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传
10、统显示器要轻得多。1.1.4功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。2 LCD1602液晶显示器的显示原理2.1液晶显示原理简介2.1.1液晶显示原理液晶显示的原理是利用液晶的物理特性, 通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。2.1.2液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式LCD、字符式LCD、点阵式LCD等。除了黑白显示外,
11、液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。2.1.3液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮
12、线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在L
13、CD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。2.2 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1
14、,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图2.2.1:图2.2.12.3 LCD1602的基本参数及引脚功能市面上1602字符液晶显示屏绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,外形尺寸和引脚接口信号说明分别如图2.3.1和表2.3.1所示1
15、:图2.3.1表2.3.11602LCD主要技术参数:表2.3.2引脚接口说明:第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端由高电
16、平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。2.4 LCD1602的RAM地址映射及标准字库表HD44780内置了DDRAM、CGROM和CGRAM。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如表2.4.1:表2.4.1也就是说想要在LCD1602屏幕的第一行第一列显示一个A字,就要向DDRAM的00H地址写入“A”字的代码就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面将会提到。我们很容易发现每一行有40个地址,在1602中我们就用前16个就行了。第二行也一
17、样用前16个地址。对应如表2.4.2:DDRAM地址与显示位置的对应关系表2.4.2我们知道文本文件中每一个字符都是用一个字节的代码记录的。一个汉字是用两个字节的代码记录。在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS里都固化有字符字模。什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。例如“A”字的字模: 01110 10001 10001 10001 11111 10001 10001 上图左边的数据就是字模数据,右边就是将左边数据用“”代表0,用“”代表1。看出是个“A”字了吗?在文本文件中“A”字的代码是41H,PC收到41H的代码后就去字模文
18、件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字了。 刚才我说了想要在LCD1602屏幕的第一行第一列显示一个A字,就要向DDRAM的00H地址写入“A”字的代码41H就行了,可41H这一个字节的代码如何才能让LCD模块在屏幕的阵点上显示“A”字呢?同样,在LCD模块上也固化了字模存储器,这就是CGROM和CGRAM。HD44780内置了192个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。图2.4.1说明了C
19、GROM和CGRAM与字符的对应关系。图2.4.12从上图可以看出,“A”字的对应上面高位代码为0100,对应左边低位代码为0001,合起来就是01000001,也就是41H。可见它的代码与我们PC中的字符代码是基本一致的。字符代码0x000x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。 0x200x7F为标准的ASCII码,0xA00xFF为日文字符和希腊文字符,其余字符码(0x100x1F及0x800x9F)没有定义。如果要对DDRAM的内容和地址进行具体操作,首先就要了解HD44780的指令集及其设置说明。该指令
20、集及其对DDRAM的内容和地址进行操作的指令如下。共11条指令2:1.清屏指令表2.4.3 功能: 清除液晶显示器,即将DDRAM的内容全部填入空白的ASCII码20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为0。2.光标归位指令 表2.4.4功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持DDRAM的内容不变。 3.进入模式设置指令表2.4.5功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:位名 设置I/D 0=写入新数据后光标左移 1=写入新数据后光标右移S0=写入新数据
21、后显示屏不移动 1=写入新数据后显示屏整体右移1个字符 4.显示开关控制指令表2.4.6功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。位名设置D 0=显示功能关 1=显示功能开C 0=无光标 1=有光标B 0=光标闪烁 1=光标不闪烁5.设定显示屏或光标移动方向指令 表2.4.7功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/CR/L设定情况00光标左移1格,且AC值减101光标右移1格,且AC值加110显示器上字符全部左移一格,但光标不动11显示器上字符全部右移一格,但光标不动6.功能设定指令表2.4.8功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:
22、位名设置DL0=数据总线为4位1=数据总线为8位N0=显示1行1=显示2行F0=57点阵/每字符1=510点阵/每字符7.设定CGRAM地址指令 表2.4.9功能:设定下一个要存入数据的CGRAM的地址。8.设定DDRAM地址指令表2.4.10功能:设定下一个要存入数据的CGRAM的地址。9.读取忙信号或AC地址指令 表2.4.11功能: 读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(AC)的内容。10.数据写入DDRAM或CGRAM指令一览 表2.4.12功能: 将字符码写入DD
23、RAM,以使液晶显示屏显示出相对应的字符; 将使用者自己设计的图形存入CGRAM。11.从CGRAM或DDRAM读出数据的指令一览 表2.4.13功能:读取DDRAM或CGRAM中的内容。基本操作时序:读状态输入:RS=L,RW=H,E=H输出:DB0DB7=状态字写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0DB7=数据写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据 输出:无2.5 LCD1602的一般初始化(复位)过程延时15Ms写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信
24、号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置3 电路软件模拟及仿真3.1 Keil及Proteus使用介绍单片机编程及仿真软件有很多种,本课程设计主要使用的是Keil及Proteus,下面对两种软件的使用大体介绍下。3.1.1Keil中驱动程序的实现4为了能使Keil成功与Proteus连接,其关键就是在Keil中编写驱动程序并生成.Hex文件。图3.1.1用红线圈住的部分为生成.Hex文件必做步骤,图3.1.2为软件中一
25、些常用的项或注意点。图3.1.1图3.1.23.1.2Proteus中.Hex文件的导入5在Proteus中连接好仿真电路图以后,就要开始向单片机中导入生成的.Hex文件。双击单片机,会出现图3.1.3所示图形,点击Program File里面用红线圈住的文件夹样式的按钮,然后从保存的文件夹中导入.Hex文件,再点击OK键,就可以进行模拟仿真了。图3.1.33.2 LCD1602入门程序的实现液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.2.1为1602显示要用
26、到的地址。图3.2.1例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。为了直观的说明这个问题,我用LCD1602入门的一个程序来显示一个字符。还是以A字为例,实现在第二行第一个字符的位置显示一个A字。我们已经知道A字的代码是41H,所以代码41H和C0H是本程序的关键。详细程序如下:RS EQU P3.7;确定具体硬件的连接方式RW EQU P3.6 ;确定具体硬件的连接方
27、式E EQU P3.5 ;确定具体硬件的连接方式MOV P1,#00000001BACALL ENABLE;调用写入命令子程序MOV P1,#00111000BACALL ENABLE ;调用写入命令子程序MOV P1,#00001111BACALL ENABLE ;调用写入命令子程序MOV P1,#00000110BACALL ENABLE ;调用写入命令子程序MOV P1,#0C0HACALL ENABLE ;调用写入命令子程序MOV P1,#01000001BSETB RS CLR RW;准备写入数据CLR E;执行显示命令ACALL DELAY ;判断液晶模块是否忙?SETB E;显示
28、完成,程序停车AJMP $ENABLE:CLR RSCLR RWCLR EACALL DELAYSETB ERETDELAY:MOV P1,#0F0HCLR RSSETB RWCLR ENOPSETB EJB P1.7,DELAYRETEND将本程序输入单片机后,仿真效果如图3.2.1:图3.2.13.3 字符型液晶显示模块与单片机的连接单片机与液晶显示器的连接方法有两种。一:直接访问方式;二:间接控制方式。一:直接访问方式模拟接口电路见图3.3.12: 图3.3.1直接访问方式的驱动子程序如下:A15 = E的选通信号A9 = R/W A8 = RSCOM EQU 20H ; 指令寄存器DA
29、T EQU 21H ; 数据寄存器CW_Add EQU 8000H ; 指令口写地址CR_Add EQU 8200H ; 指令口读地址DW_Add EQU 8100H ; 数据口写地址DR_Add EQU 8300H ; 数据口读地址1、读BF和AC值PR0: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_Add ; 设置指令口读地址MOVX A,DPTR ; 读BF和AC值MOV COM,A ; 存入COM 单元POP ACCPOP DPLPOP DPHRET2、写指令代码子程序PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_A
30、dd ; 设置指令口读地址PR11: MOVX A,DPTRJB ACC.7,PR11 ; 判BF=0? 是继续MOV A,COMMOV DPTR,#CW_Add ; 设置指令口写地址MOVX DPTR,A ; 写指令代码POP ACCPOP DPLPOP DPHRET3、写显示数据子程序PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_Add ; 设置指令口读地址PR21: MOVX A,DPTRJB ACC.7,PR21 ; 判BF=0? 是继续MOV A,DATMOV DPTR,#DW_Add ; 设置数据口写地址MOVX DPTR,A ; 写数据POP
31、 ACCPOP DPLPOP DPHRET4、读显示数据子程序PR3: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_Add ; 设置指令口读地址PR31: MOVX A,DPTRJB ACC.7,PR31 ; 判BF=0? 是继续MOV DPTR,#DR_Add ; 设置数据口读地址MOVX A,DPTR ; 读数据MOV DAT,A ; 存入DAT 单元POP ACCPOP DPLPOP DPHRET二:间接控制方式间接控制方式(4位总线)是利用HD44780所具有的4位数据总线的功能简化电路接口的一种接口方式实用电路如图3.3.2:图3.3.2间接控制方式的驱
32、动子程序如下RS EQU P3.3 ; 寄存器选择信号R/W EQU P3.4 ; 读/写选择信号E EQU P3.5 ; 使能信号1、读BF和AC值PR0: PUSH ACCMOV P1,#0FFH ; P1置位, 准备读CLR RS ; RS=0SETB R/W ; R/W=1SETB E ; E=1MOV COM,P1 ; 读BF和AC6-4值CLR E ; E=0MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV A,P1 ; 读AC3-0值CLR E ; E=0SWAP A ; 转换成 8位数据ANL A,#0FHANL COM,#0F0HORL A,CO
33、MMOV COM,A ; 送入COM 单元POP ACCRET2、写指令代码子程序PR1: PUSH ACCCLR RS ; RS=0SETB R/W ; R/W=1PR11: MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV A,P1 ; 读BF和AC6-4值CLR E ; E=0MOV C,ACC.7 ; BF?进位位CSETB E ; E=1CLR E ; E=0 (读AC3-0值)JC PR11 ; 判别BF=1? 是转CLR R/W ; R/W=0MOV P1,COM ; 写入指令代码高 4位SETB E ; E=1CLR E ; E=0MOV A,CO
34、M ; 写入指令代码低 4位SWAP AMOV P1,ASETB E ; E=1CLR E ; E=0POP ACCRET3、写显示数据子程序PR2: PUSH ACCCLR RS ; RS=0SETB R/W ; R/W=1PR21: MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV A,P1 ; 读BF和AC6-4值CLR E ; E=0MOV C,ACC.7 ; BF?进位位CSETB E ; E=1CLR E ; E=0 (读AC3-0值)JC PR21 ; 判别BF=1? 是转SETB RS ; RS=1CLR R/W ; R/W=0MOV P1,DAT
35、 ; 写入数据高 4位SETB E ; E=1CLR E ; E=0MOV A,DAT ; 写入数据低 4位SWAP AMOV P1,ASETB E ; E=1CLR E ; E=0POP ACCRET4、读显示数据子程序PR3: PUSH ACCCLR RS ; RS=0SETB R/W ; R/W=1PR31: MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV A,P1 ; 读BF和AC6-4值CLR E ; E=0MOV C,ACC.7 ; BF?进位位CSETB E ; E=1CLR E ; E=0 (读AC3-0值)JC PR31 ; 判别BF=1? 是
36、转SETB RS ; RS=1SETB R/W ; R/W=1MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV COM,P1 ; 读数据高 4位CLR E ; E=0MOV P1,#0FFH ; P1置位, 准备读SETB E ; E=1MOV A,P1 ; 读数据低 4位CLR E ; E=0SWAP A ; 转换成 8位ANL A,#0FHANL DAT,#0F0HORL A,DATMOV DAT,A ; 数据送入DAT 单元POP ACCRET3.4字符型液晶显示模块应用在本章前两节,已详细介绍了液晶显示模块与单片机的连接方法及入门程序的实现,本节进一步深入
37、研究,要求液晶模块在直接访问模式下实现光标左移,使其两行显示一句话,显示内容为“i love my school JMI is my home!”。相关内容如下:这个程序用于实现LCD1602的光标右移显示功能。直接访问方式的驱动子程序如下:;A15=E的选通信号,A9=R/W,A8=RSCOM EQU 30H ;指令寄存器DAT EQU 31H ;数据寄存器CW_Add EQU 8000H ;指令口写地址 RS,R/W为00CR_Add EQU 8200H ;指令口读地址 RS,R/W为01DW_Add EQU 8100H ;数据口写地址 RS,R/W为10DR_Add EQU 8300H
38、;数据口读地址 RS,R/W为11MAIN: MOV SP,#60HMOV P3,#0C7HACALL INITCYCLE:ACALL WRITEACALL DELAYMOV COM,#01HACALL PR1SJMP CYCLE;写指令代码子程序PR1: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_Add ;设置指令口读地址PR11: MOVX A,DPTRJB ACC.7,PR11 ;判BF=0?是继续MOV A,COMMOV DPTR,#CW_Add ;设置指令口写地址MOVX DPTR,A ;写指令代码POP ACCPOP DPLPOP DPHRET;写显
39、示数据子程序PR2: PUSH DPHPUSH DPLPUSH ACCMOV DPTR,#CR_Add ;设置指令口读地址PR21: MOVX A,DPTRJB ACC.7,PR21 ;判BF=0?是继续MOV A,DAT ;不忙时写入数据MOV DPTR,#DW_Add ;置数据口写地址MOVX DPTR,A ;写数据POP ACCPOP DPLPOP DPHRET;直接访问方式下的初始化子程序INIT: MOV A,#38H ;功能设置,单行显示,8位数据口,30H为单行显示MOV DPTR,#CW_Add ;写指令口地址设置MOV R2,#03H ;循环量=3 此循环必要,不可删除INT
40、K: MOVX DPTR,A ;写指令代码LCALL DELAY ;调延时子程序DJNZ R2,INTK ;为什么要写这么多次?MOV COM,#01H ;清屏LCALL PR1 ;写入指令MOV COM,#06H ;设置输入方式,AC自动增1,画面不动LCALL PR1 ;写入指令MOV COM,#0EH ;设置显示方式,光标开,闪烁关LCALL PR1 ;写入指令;MOV COM,#18H ;设置光标,画面位移;LCALL PR1RET;逐字依次输入方式演示程序段WRITE:MOV COM,#80H ;设置DDRAM第一行显示地址LCALL PR1 ;写入指令MOV DPTR,#TAB0
41、;设置数据首地址MOV R2,#0WRIN0:MOV A,R2MOVC A,A+DPTR ;取待写数据MOV DAT,A ;把取到的数据存入数据寄存器LCALL PR2 ;调用写数据子程序LCALL DELAY ;延时INC R2CJNE R2,#16,WRIN0 ;25字符显示完?MOV COM,#0C0HACALL PR1WRIN1:MOV A,R2MOVC A,A+DPTR ;取待写数据MOV DAT,A ;把取到的数据存入数据寄存器LCALL PR2 ;调用写数据子程序LCALL DELAY ;延时INC R2CJNE R2,#32,WRIN1 ;25符显示完?RETDELAY:MOV R7,#200D02: MOV R6,#200D01: NOPNOPNOPDJNZ R6,D01DJNZ R7,D02RETTAB0:DB i,20H,l,o,v,e,20H,m,y,20H,s,c,h,o,o,l DB 20H,J,M,I,20H,i,s,20H,m,y,20h,h,o,m,e,! ;i love my school JMI is my home! END其仿真效果图如图3.4.1所示:图3.4.13.5 液晶模块显示的拓展提高平时我们利用液晶显示模块显示的字符