📄 xainshi.asm
字号:
ORG 0000H
LJMP MAIN
INTCOL EQU 27H ;滚屏起始列寄存器
COM EQU 25H ;指令寄存器
DAT EQU 26H ;数据寄存器
PD1 EQU 3DH ;模块参数
COLUMN EQU 30H ;列地址寄存器
PAG EQU 31H ;页地址寄存器
COD EQU 32H ;字符代码寄存器
COUNT EQU 33H ;计数器
BEGINECOL EQU 34H ;起始列寄存器
A0 BIT P3.5 ;寄存器选择信号
E1 BIT P3.3 ;使能信号E1
E2 BIT P3.2 ;使能信号E2
RW BIT P3.6 ;读写选择信号
DWSH EQU 47H
DWSE EQU 48H
DWSI EQU 49H
DWSJ EQU 4AH
DX1 BIT 00H
DX2 BIT 01H
DX3 BIT 02H
;;;**********************************************************************************
;写指令子程序 左半屏 E1
PR0: CLR A0 ;A0=O
SETB RW ;R/W=1
PR01: MOV P1,#0FFH ;P1口准备输入
SETB E1 ;E1=1
MOV A,P1 ;读状态字
CLR E1 ;E1=0
JB ACC.7,PR01 ;判“忙”标?
CLR RW ;R/W=0
MOV P1,COM ;写指令代码
SETB E1 ;E1=1
CLR E1 ;E1=0
NOP
NOP
RET
;;;*************************************************************************************
;(2)写显示数据子程序 左半屏E1
PR1: CLR A0 ;A0=O
SETB RW ;R/W=1
PR11: MOV P1,#0FFH ;P1口准备输入
SETB E1 ;E1=1
MOV A,P1 ;读状态字
CLR E1 ;E1=0
JB ACC.7,PR11 ;判“忙”标志,标志为0,否,再读
SETB A0 ;A0=1
CLR RW ;R/W=0
SETB E1 ;E1=1
MOV P1,DAT ;写数据代码
CLR E1 ;E1=O
NOP
NOP
RET
;;;*************************************************************************************
;(3)读显示数据子程序
PR2: CLR A0 ;A0=O
SETB RW ;R/W=1
PR21: MOV P1,#0FFH ;P1口准备输入
SETB E1 ;E1=1
MOV A,P1 ;读状态字
CLR E1 ;E1=0
JB ACC.7,PR21 ;判“忙”标志,标志为0,否,再读
SETB A0 ;A0=1
MOV P1,#0FFH ;P1口准备输入
SETB E1 ;E1=1
MOV DAT,P1 ;读数据
CLR E1 ;E1=0
NOP
NOP
RET
;;;*************************************************************************************
;(4)写指令代码子程序 E2
PR3: CLR A0 ;A0=O
SETB RW ;R/W=1
PR31: MOV P1,#0FFH ;P1口准备输入
SETB E2 ;E2=1
MOV A,P1 ;读状态字
CLR E2 ;E2=0
JB ACC.7,PR31 ;判“忙”标志,标志为0,否,再读
CLR RW ;R/W=0
SETB E2 ;E2=1
MOV P1,COM ;写指令代码
CLR E2 ;E2=0
NOP
NOP
RET
;;;*************************************************************************************
;(5)写显示数据子程序 E2
PR4: CLR A0 ;A0=O
SETB RW ;R/W=1
PR41: MOV P1,#0FFH ;P1口准备输入
SETB E2 ;E2=1
MOV A,P1 ;读状态字
CLR E2 ;E2=0
JB ACC.7,PR41 ;判“忙”标志,标志为0,否,再读
SETB A0 ;A0=1
CLR RW
SETB E2 ;E2=1
MOV P1,DAT ;读数据
CLR E2 ;E2=0
NOP
NOP
RET
;;;*************************************************************************************
;(6)读显示数据子程序 右半屏E2
PR5: CLR A0 ;A0=O
SETB RW ;R/W=1
PR51: MOV P1,#0FFH ;P1口准备输入
SETB E2 ;E2=1
MOV A,P1 ;读状态字
CLR E2 ;E2=0
JB ACC.7,PR51 ;判“忙”标志,标志为0,否,再读
SETB A0 ;A0=1
MOV P1,#0FFH ;P1口准备输入
SETB E2 ;E2=1
MOV DAT,P1 ;读数据
CLR E2 ;E2=0
NOP
NOP
RET
;;;*************************************************************************************
;初始化子程序
INT: MOV COM,#0E2H ;复位
LCALL PR0
LCALL PR3
MOV COM,#0A4H ;关闭等待状态
LCALL PR0
LCALL PR3
MOV COM,#0A9H ;设置1/32占空比
LCALL PR0
LCALL PR3
MOV COM,#0A0H ;正向排序设置
LCALL PR0
LCALL PR3
MOV COM,#0C0H ;设置显示起始行为第一行
LCALL PR0
LCALL PR3
MOV COM,#0AFH ;开显示设置
LCALL PR0
LCALL PR3
NOP
NOP
RET
;;;***********************************************************************
;清屏子程序
CLEAR: MOV R4,#00H ; 页面地址暂存器设置
CLEAR1: MOV A,R4 ;取页面地址
ORL A,#0B8H ;“或”页面地址设置代码
MOV COM,A ;页面地址设置
LCALL PR0
LCALL PR3
MOV COM,#00H ;列地址设置“0”
LCALL PR0
LCALL PR3
MOV R3,#3DH ;一页清61个字节
CLEAR2:MOV DAT,#00H ;显示数据为“0”
LCALL PR1 ;写数据E1
LCALL PR4 ;写数据E2
DJNZ R3,CLEAR2 ;页内字节清零循环
INC R4 ;页地址暂存器加1
CJNE R4,#04H,CLEAR1 ;RAM区清零循环
NOP
NOP
RET
;;;*************************************************************************
;延时子程序
;T=R5*R6*R7*2us
DELAY: MOV R5,#250 ;延时1秒
D3: MOV R6,#50
D2: MOV R7,#200
D1: DJNZ R7,D1
DJNZ R6,D2
DJNZ R5,D3
NOP
NOP
RET
D10MS: MOV R5,#150 ;延时1秒
D33: MOV R6,#25
D22: MOV R7,#15
D11: DJNZ R7,D11
DJNZ R6,D22
DJNZ R5,D33
NOP
NOP
RET
DELAYA: MOV R5,#250 ;延时1秒
DA3: MOV R6,#80
DA2: MOV R7,#20
DA1: DJNZ R7,DA1
DJNZ R6,DA2
DJNZ R5,DA3
NOP
NOP
RET
;;;*************************************************************************************
;汉字写入程序
CCW_PR: MOV DPTR,#CCTAB
MOV A,COD
MOV B,#20H
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN
PUSH COLUMN
MOV COD,#00H
CCW_1: MOV COUNT,#10H
MOV A,PAG
ANL A,#03H
ORL A,#0B8H
MOV COM,A
LCALL PR0
LCALL PR3
POP COLUMN
MOV A,COLUMN
CLR C
SUBB A,#PD1
JC CCW_2
MOV COLUMN,A
MOV A,PAG
SETB ACC.3
MOV PAG,A
CCW_2 : MOV COM,COLUMN
MOV A,PAG
JNB ACC.3,CCW_3
LCALL PR3
LJMP CCW_4
CCW_3 : LCALL PR0
CCW_4 : MOV A,COD
MOVC A,@A+DPTR
MOV DAT,A
MOV A,PAG
JNB ACC.3, CCW_5
LCALL PR4
LJMP CCW_6
CCW_5 : LCALL PR1
CCW_6 : INC COD
INC COLUMN
MOV A,COLUMN
CJNE A,#PD1,CCW_7
CCW_7 : JC CCW_8
MOV A,PAG
JB ACC.3, CCW_8
SETB ACC.3
MOV PAG,A
MOV COM,#00H
LCALL PR3
CCW_8 : DJNZ COUNT,CCW_4
MOV A,PAG
JB ACC.7,CCW_9
INC A
SETB ACC.7
CLR ACC.3
MOV PAG,A
MOV COD,#10H
LJMP CCW_1
CCW_9: NOP
NOP
RET
;;;*************************************************************************************
;;;*************************************************************************************
;汉字选中变黑
CCFW_PR: MOV DPTR,#CCTAB
MOV A,COD
MOV B,#20H
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN
PUSH COLUMN
MOV COD,#00H
CCFW_1: MOV COUNT,#10H
MOV A,PAG
ANL A,#03H
ORL A,#0B8H
MOV COM,A
LCALL PR0
LCALL PR3
POP COLUMN
MOV A,COLUMN
CLR C
SUBB A,#PD1
JC CCFW_2
MOV COLUMN,A
MOV A,PAG
SETB ACC.3
MOV PAG,A
CCFW_2 : MOV COM,COLUMN
MOV A,PAG
JNB ACC.3,CCFW_3
LCALL PR3
LJMP CCFW_4
CCFW_3 : LCALL PR0
CCFW_4 : MOV A,COD
MOVC A,@A+DPTR
MOV B,A
CPL A
MOV DAT,A
MOV A,B
MOV A,PAG
JNB ACC.3, CCFW_5
LCALL PR4
LJMP CCFW_6
CCFW_5 : LCALL PR1
CCFW_6 : INC COD
INC COLUMN
MOV A,COLUMN
CJNE A,#PD1,CCFW_7
CCFW_7 : JC CCFW_8
MOV A,PAG
JB ACC.3, CCFW_8
SETB ACC.3
MOV PAG,A
MOV COM,#00H
LCALL PR3
CCFW_8 : DJNZ COUNT,CCFW_4
MOV A,PAG
JB ACC.7,CCFW_9
INC A
SETB ACC.7
CLR ACC.3
MOV PAG,A
MOV COD,#10H
LJMP CCFW_1
CCFW_9: NOP
NOP
RET
;;;*************************************************************************************
;;;*************************************************************************************
CCTAB:
;-- 文字: 安 --
;-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --
DB 080H,090H,08CH,084H,084H,0F4H,0A5H,086H,084H,084H,084H,084H,094H,08CH,084H,000H
DB 080H,080H,080H,040H,047H,028H,028H,010H,028H,024H,043H,0C0H,040H,000H,000H,000H ;00
;-- 文字: 徽 --
;-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --
DB 090H,048H,0E7H,01AH,0B0H,0EEH,0A8H,0AFH,0A8H,04EH,0F8H,017H,012H,0F0H,010H,000H
DB 000H,000H,0FFH,020H,054H,086H,07DH,004H,014H,0A4H,040H,027H,01CH,0E3H,040H,000H ;01
;-- 文字: 大 --
;-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --
DB 020H,020H,020H,020H,020H,020H,0A0H,07FH,0A0H,020H,020H,020H,020H,020H,020H,000H
DB 000H,080H,040H,020H,010H,00CH,003H,000H,001H,006H,008H,030H,060H,0C0H,040H,000H ;02
;-- 文字: 学 --
;-- Times New Roman12; 此字体下对应的点阵为:宽x高=16x16 --
DB 040H,030H,010H,012H,05CH,054H,050H,051H,05EH,0D4H,050H,018H,057H,032H,010H,000H
DB 000H,002H,002H,002H,002H,002H,042H,082H,07FH,002H,002H,002H,002H,002H,002H,000H ;03
;-- 文字: 清 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
DB 010H,061H,006H,0E0H,018H,020H,0AAH,0AAH,0AAH,0BFH,0AAH,0AAH,0AAH,02AH,000H,000H
DB 004H,004H,0FFH,000H,000H,000H,0FFH,00AH,00AH,00AH,04AH,08AH,07FH,000H,000H,000H ;04
;-- 文字: 华 --
;-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -