1602中文资料.docx

上传人:夺命阿水 文档编号:915997 上传时间:2024-01-16 格式:DOCX 页数:29 大小:119.11KB
返回 下载 相关 举报
1602中文资料.docx_第1页
第1页 / 共29页
1602中文资料.docx_第2页
第2页 / 共29页
1602中文资料.docx_第3页
第3页 / 共29页
1602中文资料.docx_第4页
第4页 / 共29页
1602中文资料.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《1602中文资料.docx》由会员分享,可在线阅读,更多相关《1602中文资料.docx(29页珍藏版)》请在课桌文档上搜索。

1、1602中文资料 1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:Vo为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高, 对比度过高时会产生“鬼影”,使用时可以通过一个IOK的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共 同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号, 当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行

2、命令。第714脚:DOD7为8位双向数据线。第1516脚:空脚1602液晶模块内部的字符发生存储器(CGROM )已经存储了 160个不同的点阵字符图 形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假 名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是OIOOOOOlB(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”表13-4 CGROM和CGRAM中字符代码与字符图形对应关系位000000101101000101OllOOlll10101011IlOO11011110Hll0000CGRAM (1)09PP夕三

3、P XOOOl(2)1AQq口T十aq XOOlO(3)2BRbr川6 XOOH(4)U3CSCSJJeCOO 0100(5)$4DTdtX卜0101(6)%5EUeU口才tB00I10(7)&6FVfVT力二3P XOlll(8)7GW8W7X=8x 1000(1)(8HXhX*UJX XlOOl2)9IYiy力J-1y XlOlO(3)tJZiZXVj千 XXlOll(4)+IKCk(才tOX万11005)7N*n3八nn(8)/?O一O7-7D61602液晶模块内部的控制器共有11条控制指令,如表2所示, 表 指令表指令RSR/WD7D6D5D4D3D2DlDOI清显示000000000

4、I2光标返回000000001置输入模式00000001I/DSU显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*.6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址(AGG)S置数据存贮器地址001显示屐据存七藉地址(ADD)J读忙标志或地址01BF计数器地址(AC)P写数到CGRAM或DDRAM10要写的数,/从CGRAM或DDRAM读数11读出的数据它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1 :清显示,指令码01H,光标复位到地址OOH位置指令2 :光标复位,光标返回到地址OOH 指

5、令3 :光标和显示模式设置I/D :光标移动方向,高电平右移,低电平左移S:屏幕上所有 文字是否左移或者右移。高电平表示有效,低电平则无效指令4 :显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显 示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁, 高电平闪烁,低电平不闪烁指令5 :光标或显示移位S/C :高电平时移动显示的文字,低电平时移动光标指令6 :功能设置命令DL :高电平时为4位总线,低电平时为8位总线N:低电平时为单 行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵 字符指令7 :字符发生器R

6、AM地址设置指令8 : DDRAM地址设置指令9 :读忙信号和光标地址BF :为忙标志位,高电平表示忙,此时模块不能接收命令或 者数据,如果为低电平表示不忙。指令10:写数据指令11 :读数据DM-162液晶显示模块可以和单片机AT89C51直接接口,电路如图所示。AT89C51DMT62液晶模块液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电 平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在 哪里显示字符,表3是DM-162的内部显示地址.12345 6 7 8 910 Il 121314 1516000102030405060

7、70809OAOBOCODOEOF第一行404142434445464748494A4B4C4D4E4F第二行比如第二行第一个字符的地址是40H ,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是 C)IOOOOOoB ( 40H ) +10000000B(80H)=11000000B(C0H)以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序:ORG OOOOHRS EQU P3.7;确定具体硬件的连接方式RW EQU P3.6 ;确定具体硬件的连接方式E EQU P3.5 ;确定具体

8、硬件的连接方式MOV P1 ,#00000001B ;清屏并光标复位ACALL ENABLE;调用写入命令子程序MOV P1,#00111OOOB ;设置显示模式:8位2行5x7点阵ACALL ENABLE ;调用写入命令子程序MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁ACALL ENABLE ;调用写入命令子程序MOV P1,#0000011OB ;文字不动,光标自动右移ACALL ENABLE ;调用写入命令子程序MOV P1,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLE ;调用写入命令子程序MOV P1,#01000001B ;字母

9、 A 的代码SETB RS ; RS=ICLR RW ; RW=O ;准备写入数据CLR E ; E=O;执行显示命令ACALL DELA丫 ;判断液晶模块是否忙?SETB E ; E=1 ;显示完成,程序停车AJMP $ENABLE:CLR RS ;写入控制命令的子程序CLR RWCLR EACALL DELAYSETBERETDELAY:MOVP1,#OFFH ;判断液晶显示器是否忙的子程序CLR RSSETB RWCLR ENOPSETBEJB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待RETEND程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符

10、时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY ,然后输入显示位置的地址OCOH ,最后输入要显示的字符A的代码41H。1602液晶仿真的一些发现看了 JJJ的例子:字符液晶1602仿真;则试按自己习惯也写了个,发现些问题JJJ说仿真时要屏蔽掉检查LCD忙的代码,否则会死循环WhiIe(DBPort&0x80);这句要屏蔽我写的程序总是无法正确仿真,因为不检查LCD忙,就不能保证LCD已经空闲查资料LCD清屏命令要1.64ms才完成,一般命令也要40us,最后加上足够的延时后才仿真通过后来又试了下其它LCD资料上的例程,仿真发现检查LCD忙标志也不会

11、死循环分析了下,区别是:它不是一直在使能的情况下读忙信号,而是每次都有EN=O,再EN=I重新读取忙标志 我还没做好实际实验电路板,没试过实际电路根据JJJ的描述和我的仿真实验,我猜仿真和实际硬件的区别是:实际硬件在EN=I的情况FzLCD执行完指令会更新LCD忙标志为0;而仿真需要EN=O,EN=I来重新读取忙信号,否则就不会更新,而一直以为是忙在JJJ的LCD1602.h加了几句,变成VVhiIe(DBPort&0x80) LcdEn=O; _nop_();LcdEn=I; _nop_();仿真就可以检查忙标志了自己的代码也做相应改动,都可以成功检查忙标志,也无需多加延时了在包含文件出里定

12、义函数实体,则keil调试时会出现莫名其秒的问题:在主程序.c里,执行”运行到指定行”,可能实际是执行到了.H里的函数所生成的代码,有点混乱暂停时,光标所指的行未必真是当前正在执行的,总之比较乱所以我把函数定义实体另放在一个c里,使用时添加到工程里,而.h只有函数声明和主程序需要用的常量定 义zu、还有一个奇怪的问题:执行命令0x05,输入方式设置为字符右移,光标不动时,仿真总是无法正常显示其它输入方式都正常!在液晶屏上显示一个字母A液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统 中得到越来越广泛的应用。这里介绍的字符型液晶模块是一种用5x7点阵图

13、形来显示字符的液晶显示器,根据显示的容量可以分为 1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的DM-162液晶模块来介绍它 的编程方法。DM-162采用标准的14脚接口,其中VSS为地电源,VDD接5V正电源,VO为液晶显示器对比度调整 端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 IoK的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令 或者显示地址,当RS为低电平RW为高电平时可以

14、读忙信号,当RS为高电平RW为低电平时可以写入 数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0D7为8位双向数据线。DM-162液晶模块内部的字符发生存储器(CGRoM)已经存储了 160个不同的点阵字符图形,如表1所 示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固 定的代码,比如大写的英文字母“A”的代码是OIOooOolB (41H ),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”DM-162液晶模块内部的控制器共有11条控制指令,如表2所示,表 指令表指令RSR/WD7D6D5D4D3D2D

15、lDOI清显示000000000I2光标返回000000001*,置输入模式00000001I/DSW显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF7置字符发生存贮器地址0001字符发生存亡器地址(AGG)C普蜘肛左r54lnn1显示数据存贮器地址(ADD)读忙标志或地址01BF计数器地址(AC)P写数到CGRAM或DDRAM10要写的数.,U P AM V RM iftCOO 0100(5)$4DTdtX卜Fn XOlOl(G)%5EUeUD才tB00110(7)&6FVfV千力二3P XOlll(8)7GW8WT*Xs8W 1000(

16、1)(8HXhX木9JX XlOOl(2)9IYy9rJ/U-1y XXlOlO(3)IJZiXX9Vi千1011(4)+IKk(才tDX万11005)7Nn.3八nn(8)/?OO*7y-7D6比如第二行第一个字符的地址是40H ,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B ( 40H)+10000000B(80H)=11000000B(C0H)以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序:RW EQU P3.1E EQU P3.5ORG OOOOHMOV

17、 P1,#00000001B;清屏ACALL ENABLEMOV P1 ,#00111OOOB;8位2行5x7点阵ACALL ENABLEMOV P1 ,#00001111B;显示器开、光标开、闪烁开ACALL ENABLEMOV P1 ,#0000011OB;文字不动,光标自动右移ACALL ENABLEMOV P1,#0C0H ;写入显示起始地址(第二行第一个位置)ACALL ENABLEMC)VP1,# OlOOOOOlB ;字母 A 的代码CLR RW ; RW=OCLR E ; E=OACALL DELAYSETBE ; E=1AJMP $ENABLE: CLR RS ;写入控制命令

18、的子程序CLR RWCLREACALL DELAYSETBERETDELAY: MOVP1,#OFFH ;判断液晶显示器是否忙的子程序CLR RSSETB RWCLRENOPSETBEJB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待RETEND程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的, 无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY ,然后输入显示位置的地址 OOOH ,最后输入要显示的字符A的代码41H。;1602 液晶显示 CHINA SHEN ZHEN XUE LIN DIAN Zl *.* ;*

19、 日期:2007-3-25*;* 版本:3.0*;*作者:深圳学林电子有限公司专业8051单片机教学站*;* 邮箱:sxj1974 *;* 网站:http:/www.51 c51 .com http:/www.8951 .com 更多例程请登陆网站 *;*硬件:此程序在本公司XliSP系列单片机实验仪运行通过*;*【版权】COPyright(C)深圳学林电子有限公司 WWW All Rights Reserved *;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *RS EQU p2.0;液晶接口的定义RW EQU p2.1E EQU p2.2 org OOOOhMOV SP

20、,#70H;设置堆栈MOV p0,#01H 清屏CALL ENABLEMOV pO,#38H ;显示功能CALL ENABLEMOV p0,#OFH ;显示开关控制CALL ENABLEMOV p0,#06H ;+1CALL ENABLEMOV p0,#80H;第一行的开始位置CALL ENABLEMOV DPTR,#TABLE1;显示CALL WRlTE1;到 TABLE1 取码?MOV p0,#OCoH;第二行的位置CALL ENABLEMOV DPTR,#TABLE2;显示CALL WRITE1;到 TABLE2 取码;MOV p0,#0C2H;光标定位 OCOHCALL ENABLEJ

21、MP $ENABLE: CLR RS ;送命令CLR RWCLRECALL DELAYSETBERETWRITE1: MOVR1,#OoH ;显示 table 中的值A1: MoVA,R1;到 table 取码MOVC A,A+DPTRcall wRITE2 ;显示到 ICdINC R1CJNE A,#00H,A1 ;是否到 OOhRETWRITE2:MOV pO,A;显示SETB RSCLR RWCLRECALL DELAYSETBERETDELAY: MOV R4,#05D1:M0V R5,#0FFHDJNZ R5,$DJNZ R4,D1RETtable1: dbCHINA-SHEN ZH

22、EN,OOHtable2: db XUE LIN DIAN ZI,00H end这个程序是在上一个程序改进过来的,增加了键盘检测程序。大家仔细体会一下看看。实际上在单片机教学里有一个小键盘控制的数字显示,程 序很类似。当然,这只是个例子程序,没有增加消除键盘抖动的子程序。RS EQU P3.0RWEQU P3.1 E EQU P3.5 mov p3,#OffhMOV Pl.#01 HiqingpinACALLENABLEMOV Pl,#38H;8wei dianzhenACALL ENABLEMOVPl.#OFH;xian shi KaiACALL ENABLEMOV Pl,#06H;yi d

23、ong guang biao ACALLENABLEMOV PL#80H:wei zhi ACALLENABLE13:mov pl,#01h acall enable mov dpir.#table3 call write 1 call enable mov p 1 .#01 hIjmp 11i4:mov pl,#01h acall enablemov dptr.#table2call write 1 call enable mov pl.#01h Ijmp II15:mov pl,#01h acall enablemov dptr.#table 1call write 1 acall ena

24、blemov p 1 ,#01 hIjmp 1116: mov p 1 ,#01 h acall enablemov dptr.#table4call write 1 acall enablemov pl.#01hIjmp 11 ll:jnb p3.3,13;检测键盘,如果P33按下则执行L3jnb p3.4,14jnb p3.5,15JNB P3.2,L6jmp IlENABLE:CLR RSCLRRWCLREACALL DELAYSETBERETwrite 1:mov rI.#OOhal:mov a,rlmove a,a+dptrcall write2inc rlcjne a.#OOh,a

25、lretwrite2:mov pl,asetb rsclr rwclr ecall delaysetb eret delay:mov r7,#255d l:mov r6,#255 d2:djnz r6,d2 djnz r7,d 1 ret table I: db 57h,57h,57h,2Eh,35h,31 h,43h,35h,31 h,2Eh,43h,4Fh,4Dh,20h,20h,20h,20h,00h;数据表,参看上一个实验的注释table3: db 53h,58Hl4AH,31H,39H,37Hl34H,40H,31H,36H,33H,2EH,43H,4FHl4DH,20H,20hl0

26、0H table2: db 54h,45h,4Ch130h,37h,35h,35h,20H,32H,38H,37H,39H,34H,33H,37H,36H,20H,00HTable4: db 49H,20H,4CH,4FH,56H,45H,20Hl38H,39Hf43H,35H,31 H,21 H,4FH,4BH,20H,20H,00H endSMCl602接口程序(MCS51模拟口线方式)以上为运行的照片,实际是动态的,从09;1602液晶全屏幕显小0-9 *.*;* 日期:2007325*;* 版本:3.0*;*作者:深圳学林电子有限公司专业8051单片机教学站*;* 邮箱:sxj1974

27、*;* 网站:http:/www.51 c51 .com http:/www.8951 .com 更多例程请登陆网站;*硬件:此程序在本公司XliSP系列单片机实验仪运行通过*;*【版权】COPyright(C)深圳学林电子有限公司 WwW All Rights Reserved;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *RSPIN EQU P2.0RWPIN EQU P2.1EPIN EQU P2.2XPOS EQU 20H ;列方向地址指针(用于LCDPoS子程序)YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序)ORG OOOOHJMP START

28、START: MOV SP,#60HCLR EPINMAIN:MOV R7,#O ;测试主程序MN_PA:;整屏循环显示0到9及空格call LcdresetMOV A,R7CALL LCDFILLCALL DELAY400MSINC R7MOV A,R7CJNE A,9,+1,MN.PAMOV A,#CALL LCDFILLCALL DELAY400MSJMP MAINLCDFILL:MOV B1AMOV YPOS,#0LFL_PB: MOV XPOS,#0 ;整屏显示A中所代表字符LFL_PA: MOV A,Bcall LcdwriteINC XPOSMOV A1XPOSCJNE A,#2

29、0,LFL_PAINC YPOSMOV A1YPOSCJNE A,#4,LFL_PBRETLCDPOS:;设置第(XPOS,YPOS)个字符的DDRAM地址PUSH ACCCLR C;X位置范围(0到19)MOV A1XPOSSUBB A,#20JC LPS_LBXMOV XPOS,#0LPS_LBX:ANL YPOS,#03H ;Y 位置范围(O 到 3)MOV A1YPOS XXPOS,YPOS)对应 DDRAM 地址CJNE A,#00,LPS_LA1MOV A1XPOS X第一行)X:第 个字符JMP LPS_LAX ; DDRAM: 0-13HLPS_LA1:CJNE A,#01 ,

30、LPS_LA2MOV A1XPOS X第二行)X:第 0-19 个字符ADD A,#40H ; DDRAM: 40-53HJMP LPS_LAX ;LPS_LA2:CJNE A,#02,LPS_LAYMOV A1XPOS ;(第三行)X:第0-19个字符ADD A,#14H ; DDRAM: 14-27HJMP LPS_LAXLPS_LAY:MOV A,XPOS X第四行)X:第 0-19 个字符ADD A,#54H ; DDRAM: 54-67HLPS_LAX:0RL A,#80H ;设置 DDRAM 地址CALL LCDWCPOP ACCRETLCDWRITE:;定位写字符子程序CALL

31、LCDPOS ;定位显示地址CALL LCDWD ;写字符RETLCDRESET:;初始化程序CALL DELAY5MS 越时 15MSCALL DELAY5MSCALL DELAY5MSMOV A,#38H ;显示模式设置(不检测忙信号)CALL LCDWCN 洪三次CALL DELAY5MSMOV A,#38HCALL LCDWCNCALL LCDWCNMOV A,#38H ;显示模式设置(以后均检测忙信号)CALL LCDWCMOV A,#08H ;显示关闭CALL LCDWCMOV A,#01H ;显示清屏CALL LCDWCMOV A,#06H ;显示光标移动设置CALL LCDWC

32、MOV A,#OCH ;显示开及光标设置CALL LCDWCRETLCDWC:;送控制字子程序(检测忙信号)call WaitidleLCDWCN送控制字子程序(不检测忙信号)CLR RSPIN ;RS=O RW=O E=高脉冲CLR RWPINMOV PO,ASETB EPINNOPCLR EPINRETLCDWD:;写字符子程序call WaitidleSETB RSPlN ;RS=1 RW=O E=高脉冲CLR RWPINMOV PO,ASETB EPINNOPCLR EPINRETWAITIDLE:PUSH ACC ;正常读写操作之前必须检测LCD控制器状态MOV PO,#OFFHCL

33、R RSPIN ;RS=O RW= 1 E=高电平SETB RWPINSETB EPINWTD_PA: NOP ;DB7: O LCD 控制器空闲JB P0.7,WTD.PA ; 1 LCD 控制器忙CLR EPINPOP ACCRETMOV R1,#25 ;延时子程序(5MS)DL5_PA: MOV R2,#100DJNZ R2,$DJNZ R1,DL5_PARETDELAY400MS:MOV R0,#20 海时子程序(400MS)DL4_PA: MOV R1,#100DL4_PB: MOV R2,#100DJNZ R2,$DJNZ R1,DL4.PBDJNZ R0,DL4.PARETEND

34、这个问题大虾可能会笑话,但是相信不少初学者会有深深的疑问,在我们的液晶程序里有这样子一段代码table1: db 57h,57h,57h,2Eh,35h,31h,43h,35h,31 h,2Eh,43h,4Fh,4Dh,20h,20h,20h,00h;数据 WWW.51 C51.COM 空格,这个为啥就会显示成呢?别着急;实际上,任何汉字,数字,字母等等信息他们在计算机里都是以hex格式存放的,别指望电脑会汉字。那么怎么知道哪个字的代码呢,这个都是贤哲们已经定义好了的。我们只需要查询就好了。在我们的网站有一个汉字内码查询器的小软件;运行他。左边输入汉字,右边就出来他的代码啦;凶榆入汉W W 而

35、鸡支Pl C3C0忆汉字内码查询器vl.4例如;我们输入一个美丽的美显示他的内码为C3C0I付汉字内码查询器vl.4j榆入汉名-w向居更赤57我们输入字母W那么显示他的内码为57在单片机里为了表示他为16进制,写为57Hff,汉字内码查询器vl.4榆入汉名5 的遇一点I 35我们输入数字5那么显示他的内码为35 ,在单片机里为了表示他为16进制,写为35H开汉字内码查询器vl.4输入及W 两居更卡| 20 I我们不输入敲一个空格,那么他的内码为20 好了,大家现在明白了代码表的意思了吧?在上一节中1602液晶显示一个A字,用到了 MOVP1,#OIlOOlolB这样的代码,这个是为了加强大家的理解,实际上写代码不必这么麻烦,我们可以直接写他的16进制代码就可以了,可以用计算器,把2进制转换为16进制。参看跟我学做加减法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号