📄 lcd2005.asm
字号:
;程序名:MCU2005
;功 能:XPH-3实验板液晶演示程序
;时 间:2005年6月
;字 模:阴码、逆向、列行式
;Designed by PP.T
;信号引脚及常量定义
LCDIR EQU 0C000H
LCDDR EQU 0E000H
cs1 BIT p3.5
CS2 BIT P1.0
RST BIT P2.6
XADR EQU 0B8H
YADR EQU 40H
X EQU 23H
Y EQU 24H
RAM EQU 22H
ORG 00H
JMP START
;主程序
START:
;初始化
MOV SP,#60H
CLR RST
CALL DELAY
SETB RST
SETB CS1
SETB CS2
MOV RAM,#3FH
CALL PUTIR
MOV RAM,#0C0H
CALL PUTIR
;清屏
CALL CLEAR
CALL CLEAR
;显示字符
MOV X,#01H
MOV Y,#14H
MOV DPTR,#hua
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#01H
MOV A,#0FH
ADD A,Y
MOV Y,A
MOV DPTR,#zhong
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#01H
MOV A,#0FH
ADD A,Y
MOV Y,A
MOV DPTR,#ke
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#01H
MOV A,#0FH
ADD A,Y
MOV Y,A
MOV DPTR,#ji
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#01H
MOV A,#0FH
ADD A,Y
MOV Y,A
MOV DPTR,#dada
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#01H
MOV A,#0FH
ADD A,Y
MOV Y,A
MOV DPTR,#xue
CALL DISP
CALL DELAY5
CALL DELAY5
;显示EDA-IV实验系统
MOV X,#04H
MOV Y,#00H
MOV DPTR,#e
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#0FH
MOV DPTR,#d
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#1EH
MOV DPTR,#I
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#2DH
MOV DPTR,#V
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#3CH
MOV DPTR,#shi
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#4BH
MOV DPTR,#yan
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#5AH
MOV DPTR,#xi
CALL DISP
CALL DELAY5
CALL DELAY5
MOV X,#04H
MOV Y,#69H
MOV DPTR,#tong
CALL DISP
CALL DELAY6
;停机
LJMP START
;模块名:DISP
;参 数:X,Y - 坐标
; DPTR - 地址
;功 能:在X,Y的坐标显示一个16*16点阵的汉字或字符
;注 意:字模方向为 列行式,逆向
DISP:
;暂存坐标
PUSH X
PUSH Y
;行坐标
MOV R6,X
;共两行
MOV R4,#02H
ROW:
;列坐标
MOV R7,Y
;设置片选信号
SETB CS1 ;设置为左边区域(默认)
CLR CS2
;CALL DELAY
CLR C ;判断显示的区域
MOV A,Y
SUBB A,#40H
JC ADDR
;设置为右边区域
MOV R7,A
CLR CS1
SETB CS2
;CALL DELAY
;计算字符显示位置的起始地址
ADDR:
;显示一行
MOV R5,#10H ; 16 列
COL:
CLR A
MOV A,#XADR ;计算X坐标
ADD A,R6
MOV RAM,A ;保存X坐标对应的地址
CALL PUTIR
MOV A,#YADR ;计算Y坐标对应的地址
ADD A,R7
MOV RAM,A ;保存Y坐标
CALL PUTIR
CLR A
MOVC A,@A+DPTR;写一列数据
MOV RAM,A
CALL PUTCHR
INC DPTR ;修改指针
INC R7 ;修改Y地址
CLR C ;检测是否超过#3F
MOV A,R7
SUBB A,#40H
JC NEXT ;检测是否溢出
;溢出
CLR C ;检测是哪个边界溢出
MOV C,CS1 ;检测左边界
JNC RIGHT
;左边界越界选通右边区域
MOV R7,A
CLR CS1
;CALL DELAY1
SETB CS2
SJMP NEXT
;右边界越界选通左边区域
RIGHT:
MOV R7,A
SETB CS1
;CALL DELAY1
CLR CS2
NEXT:DJNZ R5,COL ;判断是否已显示完一行?
INC R6 ;计算下一行地址
DJNZ R4,ROW ;全部显示完了吗?
;恢复片选信号
CLR CS1
CLR CS2
POP Y
POP X
RET
;模块名:PUTIR
;参 数:无
;功 能:向液晶发送写指令命令
;时 间:2004年7月
PUTIR:
PUSH DPH
PUSH DPL
CALL BUSY
MOV DPTR,#LCDIR
MOV A,RAM
MOVX @DPTR,A
POP DPL
POP DPH
RET
;模块名:PUTCHR
;参 数:无
;功 能:向液晶发送写数据命令
;时 间:2004年7月
PUTCHR:
PUSH DPH
PUSH DPL
CALL BUSY
MOV DPTR,#LCDDR
MOV A,RAM
MOVX @DPTR,A
POP DPL
POP DPH
RET
;模块名:BUSY
;参 数:无
;功 能:检测液晶忙状态
;时 间:2004年7月
BUSY:
MOV DPTR,#LCDIR
BUSY1: MOVX A,@DPTR
ANL A,#80H
XRL A,#80H
JZ BUSY1
RET
;模块名:CLEAR
;参 数:无
;功 能:清屏
;时 间:2004年7月
CLEAR:
SETB CS1
SETB CS2
MOV R2,#08
MOV R4,#00
CLR0: MOV A,R4
ADD A,#XADR
MOV RAM,A
CALL PUTIR
MOV RAM,#YADR
CALL PUTIR
MOV R3,#64
CLR1: MOV RAM,#00H
CALL PUTCHR
DJNZ R3,CLR1
INC R4
DJNZ R2,CLR0
MOV RAM,#YADR
CALL PUTIR
MOV RAM,#XADR
CALL PUTIR
CLR CS1
CLR CS2
RET
DELAY6: MOV R5,#04FH
D6: MOV R6,#0FFH
D7: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,D7
DJNZ R5,D6
RET
DELAY5: MOV R6,#07FH
D5: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,D5
RET
;模块名:DELAY
;参 数:无
;功 能:延时
;时 间:2004年7月
DELAY: MOV R6,#8
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
;模块名:DELAY1
;参 数:无
;功 能:延时
;时 间:2004年7月
DELAY1: MOV R6,#2
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
RET
;====字模====
DB 040H,040H,044H,054H,054H,054H,054H,07FH,054H,054H,054H,054H,044H,040H,040H,000H ;
DB 000H,000H,000H,0FFH,015H,015H,015H,015H,015H,055H,095H,07FH,000H,000H,000H,000H ; "青" 0
DB 040H,040H,044H,054H,054H,0D4H,074H,05FH,054H,054H,0D4H,054H,054H,044H,040H,000H ;
DB 004H,004H,002H,002H,07FH,04AH,04AH,04AH,04AH,04AH,07EH,001H,003H,006H,002H,000H ; "春" 1
DB 000H,002H,002H,002H,002H,082H,042H,0FEH,006H,042H,0C2H,082H,002H,003H,002H,000H ;
DB 000H,008H,004H,002H,001H,000H,000H,07FH,000H,000H,000H,001H,007H,002H,000H,000H ; "不" 2
DB 000H,000H,0FEH,042H,02AH,011H,061H,080H,062H,01EH,042H,082H,042H,03EH,000H,000H ;
DB 000H,000H,000H,0FFH,049H,049H,049H,07FH,049H,049H,049H,049H,0FFH,000H,000H,000H ; "留" 3
DB 000H,000H,0F8H,008H,008H,00CH,00BH,008H,008H,008H,008H,008H,0F8H,000H,000H,000H ;
DB 000H,000H,07FH,021H,021H,021H,021H,021H,021H,021H,021H,021H,07FH,000H,000H,000H ; "白" 4
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ;
DB 000H,000H,058H,038H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ; "," 5
DB 000H,080H,060H,01EH,010H,010H,010H,010H,0FFH,012H,010H,010H,098H,010H,000H,000H ;
DB 001H,040H,040H,041H,041H,041H,041H,041H,07FH,041H,041H,041H,041H,061H,040H,000H ; "生" 6
DB 040H,040H,0A0H,090H,0A8H,0A4H,0A2H,021H,0A2H,0A4H,0A8H,090H,0B0H,060H,020H,000H ;
DB 000H,000H,03FH,008H,008H,008H,01FH,000H,0FFH,000H,010H,030H,01FH,000H,000H,000H ; "命" 7
DB 010H,060H,001H,0C6H,010H,012H,092H,072H,01EH,032H,052H,092H,092H,010H,010H,000H ;
DB 004H,004H,0FFH,002H,022H,019H,040H,080H,07FH,008H,030H,000H,009H,033H,001H,000H ; "添" 8
DB 000H,040H,020H,0F0H,028H,027H,024H,0E4H,024H,034H,02CH,0E4H,000H,000H,000H,000H ;
DB 000H,000H,000H,03FH,042H,042H,042H,043H,042H,042H,042H,043H,040H,078H,000H,000H ; "色" 9
DB 082H,08AH,0B2H,086H,0DBH,0A1H,091H,08DH,088H,020H,010H,008H,086H,064H,040H,000H ;
DB 020H,010H,008H,006H,0FFH,002H,004H,058H,048H,020H,022H,011H,008H,007H,002H,000H ; "彩" 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -