📄 12864中文字库测试程序.asm
字号:
RS EQU P3.0
RW EQU P3.1
E EQU P3.2
PSB EQU P3.4
RST EQU P3.5
ORG 0000H
LJMP MAIN
ORG 0100H
mesg1: DB 020H,04AH,052H,04DH,016H,031H,032H,038H,036H,034H,048H,020H,04CH,043H,04DH,020H
DB 0C9H,0EEH,0DBH,0DAH,0BEH,0C3H,0C8H,0D5H,0B9H,0E2H,0B5H,0E7H,0B9H,0ABH,0CBH,0BEH
mesg2: DB 020H,020H,054H,045H,053H,054H,020H,050H,052H,04FH,047H,052H,041H,04DH,020H,020H
DB 0D6H,0D0H,0CEH,0C4H,0D7H,0D6H,0BFH,0E2H,0D2H,0BAH,0BEH,0A7H,0C4H,0A3H,0BFH,0E9H
CL1: DB 020H,020H,0C9H,0EEH,0DBH,0DAH,0CAH,0D0H,0BEH,0C3H,0C8H,0D5H,0B9H,0E2H,0B5H,0E7H
DB 0D7H,0A8H,0D2H,0B5H,0D2H,0BAH,0BEH,0A7H,0CFH,0D4H,0CAH,0BEH,0C4H,0A3H,0BFH,0E9H
CL2: DB 0D7H,0D3H,0D3H,0D0H,0CFH,0DEH,0B9H,0ABH,0CBH,0BEH,0CAH,0C7H,0D2H,0BBH,0BCH,0D2H
DB 0C9H,0FAH,0B2H,0FAH,0C9H,0CCH,0A3H,0ACH,0C4H,0BFH,0C7H,0B0H,0B2H,0FAH,0C6H,0B7H
CL3: DB 0D3H,0D0H,0D2H,0BBH,0B0H,0D9H,0B6H,0E0H,0BFH,0EEH,0A3H,0ACH,0BCH,0E6H,0C8H,0DDH
DB 0BFH,0E9H,0A3H,0ACH,0B2H,0A2H,0C7H,0D2H,0B8H,0F9H,0BEH,0DDH,0BFH,0CDH,0BBH,0A7H
CL4: DB 0CAH,0D0H,0B3H,0A1H,0C9H,0CFH,0D6H,0F7H,0D2H,0AAH,0B1H,0EAH,0D7H,0BCH,0C4H,0A3H
DB 0D2H,0AAH,0C7H,0F3H,0B6H,0A8H,0D6H,0C6H,0B8H,0F7H,0C0H,0E0H,0B2H,0FAH,0C6H,0B7H
CL5: DB 0BDH,0BBH,0D1H,0F9H,0D6H,0DCH,0C6H,0DAH,0B6H,0CCH,0A3H,0ACH,0BDH,0BBH,0BBH,0F5H
DB 0BBH,0B6H,0D3H,0ADH,0B8H,0F3H,0CFH,0C2H,0B4H,0B9H,0D1H,0AFH,0A1H,0A3H,020H,020H
CL6: DB 0BCH,0B0H,0CAH,0B1H,0A3H,0ACH,0B7H,0FEH,0CEH,0F1H,0D6H,0CAH,0C1H,0BFH,0BAH,0C3H
DB 054H,045H,04CH,02DH,038H,033H,032H,038H,034H,036H,039H,037H,020H,020H,020H,020H
ORG 1400H
MAIN: MOV SP, #30H
SETB PSB
ACALL DELAY2MS
SETB RST
ACALL DELAY2MS
CLR RST
ACALL DELAY2MS
SETB RST
ACALL DELAY2MS
ACALL PonInit ; initialize subroutine
DISP:
MOV DPTR, #mesg1
ACALL mesg_out1
MOV DPTR, #mesg2
ACALL mesg_out2
MOV R7, #0CFH
ACALL delayXms
MOV DPTR, #CL1
ACALL mesg_out1
MOV DPTR, #CL2
ACALL mesg_out2
MOV R7, #0CFH
ACALL delayXms
MOV DPTR, #CL3
ACALL mesg_out1
MOV DPTR, #CL4
ACALL mesg_out2
MOV R7, #0CFH
ACALL delayXms
MOV DPTR, #CL5
ACALL mesg_out1
MOV DPTR, #CL6
ACALL mesg_out2
MOV R7, #0CFH
ACALL delayXms
LJMP DISP
; ***********************************************************************
; routine : mesg_out
;
; Description :
;
; ***********************************************************************
mesg_out1: MOV R4,#10H
MOV A,#80H
ACALL WIR8
m_out1: CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
DJNZ R4,m_out1
RET
mesg_out2: MOV R4,#10H
MOV A,#090H
ACALL WIR8
m_out2: CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
DJNZ R4,m_out2
; MOV R7, #06H
; ACALL delayXms
RET
mesg_out3: MOV R4,#0FFH
MOV A,#00H
ACALL WIR8
MOV A,#00H
ACALL WIR8
m_out3: CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
DJNZ R4,m_out3
RET
; ***********************************************************************
; routine : PonInit
;
; Description :
;
; ***********************************************************************
PonInit: MOV R7, #25H ; wait 20ms for Vcc rises to 4.5v
ACALL delayXms
MOV A, #30H ; wr 3rd byte #30H
ACALL WIR8
ACALL DELAY2MS
MOV A, #30H ; fun.set to 8 bit opr.
ACALL WIR8
ACALL DELAY2MS
MOV A,#08H
ACALL WIR8
ACALL DELAY2MS
MOV A,#10H
ACALL WIR8
ACALL DELAY2MS
; MOV A, #38H ; fun.set 8 bit, 2line, 5*7dot
; ACALL WIR8
MOV A, #0CH ; D=ON, C=OFF, CB=OFF
ACALL WIR8
MOV A,#01H ;Display clear
ACALL WIR8
ACALL DELAY2MS
MOV A, #06H ;
ACALL WIR8
ACALL DELAY2MS
RET
; ***********************************************************************
; routine : home
;
; Description :
;
; ***********************************************************************
home: MOV A, #02H
ACALL WIR8
ACALL delay2ms
RET
; ***********************************************************************
; routine : clrDisp
;
; Description :
;
; ***********************************************************************
clrDisp: MOV A, #01H
ACALL WIR8
ACALL delay2ms
RET
; ***********************************************************************
; routine : WIR8
; Description : write IR (Instructure register) in 8 bit mode
;
; ***********************************************************************
WIR8: PUSH ACC ; Write IR with data store in A
MOV P1, A
CLR RS
CLR RW
CLR E
SETB E
CLR E
ACALL delay2ms ; time for data ready
POP ACC
RET
; ***********************************************************************
; routine : WDR8
;
; Description : write DR (data register) in 8 bit mode
;
; ***********************************************************************
WDR8: PUSH ACC ; Wr DR with data store in A
MOV P1, A
SETB RS
CLR RW
CLR E
SETB E ; set E
CLR E
ACALL delay2ms
POP ACC
RET
; ***********************************************************************
; routine : delayXms
;
; Description : No. of ms is defined by Register R7
;
; ***********************************************************************
delayXms: MOV R2, #10H ; 1st delay loop 256us * 8 = 2ms
delay0: MOV R3, #0FFH ; 2nd delay loop 1us * 256 = 256us
delay1: DJNZ R3, delay1
DJNZ R2, delay0
DJNZ R7, delayXms
RET
; ***********************************************************************
; routine : delay2ms
;
; Description : 1 ms delay loop
;
; ***********************************************************************
delay2ms: MOV R2,#02H ; 1st delay loop 256us * 8 = 2ms
delay_0: MOV R3,#0FFH ; 2nd delay loop 1us * 256 = 256us
delay_1: DJNZ R3, delay_1
DJNZ R2, delay_0
RET
; ***********************************************************************
; routine : setCGADR
;
; Description : set CG RAM address
;
; ***********************************************************************
setCGADR: CLR ACC.7
SETB ACC.6
ACALL WIR8
RET
; ***********************************************************************
; routine : setDDADR
;
; Description : set DD RAM address
;
; ***********************************************************************
setDDADR: SETB ACC.7
ACALL WIR8
RET
; ***********************************************************************
; routine : CGRinit
;
; Description : Reg A = NO. of character patterns to be write into CG RAM
; CG Ram start address = 00H
;
; ***********************************************************************
CGRinit: MOV A,#20H
XCH A, R0
CLR A ; set CGRAM
ACALL setCGADR
L_INIT: CLR A
MOVC A, @A+DPTR
ACALL WDR8
INC DPTR
DJNZ R0,L_INIT
RET
; ***********************************************************************
; routine : fillPatn
;
; Description : fill patterns on all characters( both Line 1 & Line 2 )
; Reg A = character code for the pattern
;
; ***********************************************************************
fillPatn: XCH A, R5 ; store character code in R5
CLR A ; point to first line
ACALL setDDADR
MOV R0, #14H ; fill first line
MOV A, R5 ; restore character code
B1: ACALL WDR8
DJNZ R0,B1
MOV A, #40H ; point to second line
ACALL setDDADR
MOV R0,#14H
MOV A, R5 ; restore character code
B2: ACALL WDR8
DJNZ R0,B2
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -