;===============功能提要====================
;1602液晶屏的静态显示程序与用户自定RAM的使用
;本课难点在于初始化LCD指令的功能
;本讲重要和难点为液晶的通信协议
;===========================================
RS BIT P2.0 ;RS位为1表示送数据,为0表示送指令
RW BIT P2.1 ;RW位为1表示读,为0表示写。
E BIT P2.2 ;E位为1表示允许开关打开,为0表示关闭传送通道。
COM DATA 30H ;送指令寄存器
DAT DATA 31H ;读数据寄存器
ORG 0000H
MAIN: MOV SP,#80H
LCALL CSH
LCALL CGRAM
LCALL LCD1H
LCALL LCD2H
SJMP $
CSH: MOV R2,#0
;初始化LCD
CSLCD: MOV COM,#38H
ACALL WRI
MOV COM,#0CH
ACALL WRI
MOV COM,#06H
ACALL WRI
MOV COM,#01H
ACALL WRI
RET
CGRAM: MOV COM,#40H
ACALL WRI
LCG1: LCALL CB
ACALL WRD
CJNE R2,#32,LCG1
MOV R2,#0
RET
LCD1H: MOV COM,#80H ;选择1602液晶第一行的指令
ACALL WRI
L1H1: LCALL CB1
ACALL WRD
CJNE R2,#16,L1H1
RET
LCD2H: MOV COM,#0C0H ;选择1602液晶第二行的指令
ACALL WRI
L2H1: LCALL CB1
ACALL WRD
CJNE R2,#32,L2H1
MOV R2,#0
RET
CB: MOV DPTR,#TAB
LCALL CB2
RET
CB1: MOV DPTR,#TABLE
CB2: MOV A,R2
MOVC A,@A+DPTR
MOV DAT,A
INC R2
RET
;1602通信协议
;=================================
WRI: ACALL RDBF ;调用忙标志位诊断(忙标志是否空闲)
CLR RW
MOV P0,COM ;把我们写的指令送给1602
SETB E ;打开允许通信(注:打开通信后,后面一定要跟着关闭)
CLR E
RET
WRD: ACALL RDBF
SETB RS
CLR RW
MOV P0,DAT ;把我们写的数据送给1602
SETB E
CLR E
RET
RDBF: CLR RS ;选择送指令通道
SETB RW ;选中读
LBF1: MOV P0,#80H ;把忙标志置1
SETB E
MOV A,P0 ;把忙标志位送给累加器做诊断
CLR E
JB ACC.7,LBF1 ;忙标志位为0表示空闲,空闲就退出
RET
;=================================
TAB:
DB 04H,0FH,12H,0FH,0AH,1FH,02H,00H
DB 0FH,09H,0FH,09H,0FH,09H,13H,00H
DB 1FH,11H,11H,1FH,11H,11H,1FH,00H
DB 0CH,12H,12H,0CH,00H,00H,00H,00H
TABLE:
DB '2011',00H,'01',01H,'11'02H,' 12',03H,'C'
DB 'LunShang LanQu86'
END
文章评论(0条评论)
登录后参与讨论