📄 lcd1602液晶显示.txt
字号:
描述:
;*: 实现1602液晶显示"LCD Testing___" 和 " WWW.PICAVR.COM " 两行字符
;*:
******************************************************************************;* 【版权】 Copyright(C)东哥单片机学习网 www.picavr.com All Rights Reserved
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!
;******************************************************************************
RS BIT P2.0 ;定义LCM的接脚RS、R/W、 Enable为P2.0、P2.1、P2.2
R_W BIT P2.1
ENABLE BIT P2.2
DB0_DB7 DATA P0 ;DB0-DB7的接脚为P0来控制,以方便程式的撰写与维护
;*------------------------------------------------------------------------
ORG 00H ;通知编译器下面的程式由程式记忆体地址0000H开始存放
JMP START ;跳到标记start处执行程式
ORG 000BH ;
AJMP INSERS ;跳到中断服务程式
ORG 30H ;通知编译器下面的程式由程式记忆体地址0030H开始存入。
START: NOP
MOV TMOD,#0 ;初始化TO
MOV TL0,#0 ;
MOV TH0,#0 ;
SETB EA ;
SETB ET0 ;
SETB TR0 ;
MOV R5,#50 ;设定延时次数。
; CLR P3.2 ;
; SETB P3.1 ;
MOV SP,#60H ;设定MCS-51从内容资料记忆体地址61H开始存放堆栈资料。
CALL Initial ;调用启动LCM的子程式
CALL CLS ;调用清除显示器的子程式
MOV A,#10000000B ;将二进制10000000的值放入累加器内,代表设定DDRAM的地址为00H,
;即将光标移到第一行第一个列的位置上。
CALL Write_instruction ;调用写指令码到IR寄存器的子程式。
MOV DPTR,#LINE1 ;将第一行字串在程式记忆体中的起始地址存入DPTR
CALL STRING ;调用PRSTRING子程式,将字串显示到LCM
MOV A,#11000000B ;将二进制11000000的值放入累加器内,代表设定DDRAM的地址为40H,
;即将光标移到第二行第一个列的位置上
CALL Write_instruction ;调用写指令码到IR寄存器的子程式。
MOV DPTR,#LINE2 ;将第二行字串在程式记忆体中的起始地址存DPTR。
CALL STRING ;调用PRSTRING子程式,将字串显示到LCM
;---------------------------------------------
LOOP: JMP LOOP ;执行无穷循环?
;--------------------------------------------
LINE1: DB " LCD Testing___ ",00H ;在LCM第一行显示字串"LCD Testing___"
LINE2: DB " WWW.PICAVR.COM ",00H ;在LCM第二行显示字串" WWW.PICAVR.COM "
;------------------------------------------------------------------
;TO中断服务子程式?
;------------------------------------------------------------------
INSERS: MOV TH0,#0 ;
MOV TL0,#0 ;
DJNZ R5,NO ;
MOV R5,#50 ;
; CPL P3.2 ;
; CPL P3.1 ;
NO: RETI ;
;------------------------------------------------------------------
;Initial子程序
;设定LCM使用8BITS汇流排,显示两行,使用5*7字型,显示器要显示
;光标要显示但不闪烁
;------------------------------------------------------------------
Initial: MOV A,#00111000B ;
CALL Write_instruction ;
MOV A,#00001110B ;
CALL Write_instruction ;
MOV A,#00000110B ;
CALL Write_instruction ;
RET
;-----------------------------------------------------------------
;CheckBusy子程序
;等待LCM有空可以执行下一行命令
;-----------------------------------------------------------------
CheckBusy:
PUSH ACC ;将累加器ACC的内容放到堆栈内,
;以免破坏原来的ACC的资料
CheckBusyLoop:
CLR ENABLE ;设定E=0,禁能读模式
SETB R_W ;设定R/W=1,选择读模式
CLR RS ;设定RS=0,选择指令寄存器IR
SETB ENABLE ;将P3.3脚设定为1,使能LCM
MOV A,DB0_DB7 ;将存在ACC内的资料经由P1存入ACC中,
;以便查封第7位元及BF是否为0什么
CLR ENABLE ;将P3.3脚设定为0
JB ACC.7,CheckBusyLoop ;判断由LCM读入资料的第7位及BF
;是否为1,若等于1表示LCM忙碌中,CPU
;跳到标记CheckBusyLoop继续执行程序
POP ACC ;将累加器ACC内容从堆栈区取出
CALL DELAY ;调用延迟子程序,延时约数个mS
RET ;返回主程序
;-----------------------------------------------------------------
;Write_instruction子程序
;将ACC内的资料输入到LCM的IR寄存器
;-----------------------------------------------------------------
Write_instruction:
CALL CheckBusy ;调用CheckBusy子程序确定LCM可以执行指令
CLR ENABLE ;设定E=0,禁能LCM
CLR R_W ;设定R/W=0,选择写模式
CLR RS ;设定RS=0,选择指令寄存器IR
SETB ENABLE ;将P3.3脚设定为1,使能LCM
MOV DB0_DB7,A ;将存在ACC内的指令码经由P1输出到LCM
CLR ENABLE ;将P3.3设定为0,MCS-51向LCM存取资料后,
;必须将LCM的E脚输出0,让LCM禁能(Disable)
;不做介面的资料传送或设定
RET ;返回主程序
;-----------------------------------------------------------------
;WriteLCDData子程序
;将ACC内的资料输入到LCM的DR寄存器
;-----------------------------------------------------------------
WriteLCDData:
CALL CheckBusy ;调用CheckBusy子程序,确定LCM可以执行指令
CLR ENABLE ;设定E=0,禁能LCM
CLR R_W ;设定R/W=0,选择写模式
SETB RS ;设定RS=1,选择U寄资料存器DR
SETB ENABLE ;将P3.3脚设定为1,使能LCM
MOV DB0_DB7,A ;将存在ACC内的指令码经由P1输出到LCM
CLR ENABLE ;
RET ;返回主程序
;-----------------------------------------------------------------
;CLS子程序
;清除LCM的显示字幕
;-----------------------------------------------------------------
CLS: MOV A,#01H ;
CALL Write_instruction ;
RET
;-----------------------------------------------------------------
;STRING子程序
;将一个字幕显示在LCM,字串的起地址要存入DPTR,字串必须以00H结束
;-----------------------------------------------------------------
STRING:
PUSH ACC ;
LOOP1:
CLR A ;
MOVC A,@A+DPTR ;
JZ END_PR ;
CALL WriteLCDData ;
INC DPTR ;
JMP LOOP1 ;
END_PR:
POP ACC ;
RET ;
;-----------------------------------------------------------------
;DELAY子程
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -