📄 paratest.asm
字号:
;OCM12864模块测试程序**************************
;完成时间2008.11.28
;制作人:hdzhangx
;**********************************************
D_I EQU P2.0 ;Data or Instrument Select,H:写数据,L:写指令
R_W EQU P2.1 ;Write or Read,H:read,L:write
E EQU P2.7 ;读写使能
CS1 EQU P2.2 ;CS1=H,选择左半屏
CS2 EQU P2.3
;CS2=H,选择右半屏
RESET EQU P2.4 ;Lcm reset,低有效
DISP_X EQU 30H
DISP_Y EQU 31H
DISP_Z EQU 32H
LONG EQU 33H
WIDE EQU 34H
DATA1_WR EQU 35H
DATA2_WR EQU 36H
COUNTER1 EQU 37H
COUNTER2 EQU 38H
COUNTER3 EQU 39H
;**********************************************
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV SP,#40H
CLR RESET
NOP
NOP
NOP
SETB RESET
MOV DISP_Z,#0C0H
;*************汉字位置*************************
SETB CS1
clr CS2
MOV DISP_X,#0B8H
MOV DISP_Y,#40H
MOV LONG,#30H
MOV WIDE,#02H
MOV DPTR,#para11
LCALL para_DISP
lcall para1
MOV DISP_X,#0BaH
MOV DPTR,#para21
LCALL para_DISP
lcall para2
MOV DISP_X,#0BcH
MOV DPTR,#para31
LCALL para_DISP
lcall para3
MOV DISP_X,#0BeH
MOV DPTR,#para41
LCALL para_DISP
lcall para4
ljmp main
;**************************参数区域赋值********************
; mov r0,#40h
; mov r6,#08h
; mov a,#0
;loopnum: mov @r0,a
; inc a
; inc r0
; djnz r6,loopnum
;****************************
;----------------------------------------------
num_DISP: LCALL DISP ;显示LONGxWIDE大小的图形,本例为汉字
MOV COUNTER1,WIDE
num_DISP1: LCALL WR_ZB
MOV COUNTER2,LONG
num_DISP2: CLR A
MOVC A,@A+DPTR
LCALL WR_DATA
INC DPTR
DJNZ COUNTER2,num_DISP2
INC DISP_X
DJNZ COUNTER1,num_DISP1
RET
ljmp main
;---------------------------写光标---------------------------
para_DISP: LCALL DISP ;显示LONGxWIDE大小的图形,本例为光标
MOV COUNTER1,WIDE
para_DISP1: LCALL WR_ZB
MOV COUNTER2,LONG
para_DISP2: CLR A
MOVC A,@A+DPTR
LCALL WR_DATA
INC DPTR
DJNZ COUNTER2,para_DISP2
INC DISP_X
DJNZ COUNTER1,para_DISP1
RET
;**************************************************************
WR_ZB: MOV A,DISP_X ;写坐标
LCALL WR_INT
MOV A,DISP_Z
LCALL WR_INT
MOV A,DISP_Y
LCALL WR_INT
RET
;----------------------------------------------
DISP: MOV A,#3EH
LCALL WR_INT
MOV A,#3FH
LCALL WR_INT
RET
;**********************************************
WR_INT: LCALL CHE_BUSY ;WRITE INSTRUCTION
CLR D_I
CLR R_W
MOV P0,A
NOP
SETB E
NOP
NOP
CLR E
RET
;----------------------------------------------
WR_DATA: LCALL CHE_BUSY ;WRITE DATA
SETB D_I
CLR R_W
MOV P0,A
NOP
SETB E
NOP
NOP
CLR E
RET
;----------------------------------------------
CHE_BUSY: CLR D_I ;CHECK STATIU
SETB R_W
ANL p0,#0B0H
ORL p0,#80H
NOP
SETB E
JB p0.7,$
JB p0.4,$
CLR E
RET
;*********************参数显示缓冲区********************
para1: SETB CS2
CLR CS1
MOV DISP_X,#0B8H
MOV DISP_Y,#40H
MOV LONG,#08H
MOV WIDE,#02H
;************测试********************************************
mov r7,#08h
mov r0,#40h
loop: mov a,@r0
num0: cjne a,#0,num1
mov dptr,#numtab0
lcall num_disp
;*************************
MOV DISP_X,#0B8H
MOV DISP_Y,#48H
MOV LONG,#08H
MOV WIDE,#02H
;***********************
inc r0
djnz r7,loop
sjmp para1
num1: cjne a,#1,num2
mov dptr,#numtab1
lcall num_disp
;*********************
MOV DISP_X,#0B8H ;该句必须要
MOV DISP_Y,#50H
MOV LONG,#08H
MOV WIDE,#02H
;*********************
inc r0
djnz r7,loop
sjmp para1
num2: cjne a,#2,num3
mov dptr,#numtab2
lcall num_disp
;*******************
MOV DISP_X,#0B8H
MOV DISP_Y,#58H
MOV LONG,#08H
MOV WIDE,#02H
;********************
inc r0
djnz r7,loop
sjmp para1
num3: cjne a,#3,num4
mov dptr,#numtab3
lcall num_disp
;********************
MOV DISP_X,#0B8H
MOV DISP_Y,#60H
MOV LONG,#08H
MOV WIDE,#02H
;********************
inc r0
djnz r7,loop
sjmp para1
num4: cjne a,#4,num5
mov dptr,#numtab4
lcall num_disp
;********************
MOV DISP_X,#0B8H
MOV DISP_Y,#68H
MOV LONG,#08H
MOV WIDE,#02H
;********************
inc r0
djnz r7,loop1
ljmp para1
loop1: ljmp loop
num5: cjne a,#5,num6
mov dptr,#numtab5
lcall num_disp
;**********************
MOV DISP_X,#0B8H
MOV DISP_Y,#70H
MOV LONG,#08H
MOV WIDE,#02H
;******************
inc r0
djnz r7,loop2
ljmp para1
loop2: ljmp loop
num6: cjne a,#6,num7
mov dptr,#numtab6
lcall num_disp
;*******************
MOV DISP_X,#0B8H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -