📄 perfect.asm
字号:
;***********************************************
;r5列扫描初值
;r6扫描列号
;r3键值
;r0显示参数首地址
;r2坐标计算时的键值保护寄存器
;r7显示参数字节个数
;20H页码保存单元(字节)
;28h
;f0=1,进入参数输入界面
;r4 键入参数是,坐标disp_y存放单元
;********************************************
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
LJMP MAIN
ORG 0003H
LJMP KEYVAL
ORG 0030H
MAIN: MOV SP,#3AH
SETB EA
SETB EX0
SETB IT0
lcall clears
lcall start
mov r4,#40h ;用户参数输入时的DISP_Y坐标保存单元
MOV 20H,#00H ;页码保存单元
;********************模拟显示参数**************
mov a,#00h
mov r1,#50h
mov r4,#06h
loopp1: mov @r1,a
inc a
inc r1
djnz r4,loopp1
mov a,#00h
mov r1,#56h
mov r4,#06h
loopp2: mov @r1,a
inc a
inc r1
djnz r4,loopp2
mov a,#00h
mov r1,#5ch
mov r4,#06h
loopp3: mov @r1,a
inc a
inc r1
djnz r4,loopp3
mov a,#00h
mov r1,#62h
mov r4,#06h
loopp4: mov @r1,a
inc a
inc r1
djnz r4,loopp4
;********************模拟显示参数**************
MOV P1,#0F0H
SJMP $
KEYVAL: MOV r5,#0F7H ;送扫描初值
MOV r6,#00H ;扫描列号
LK: MOV A,r5
MOV P1,A ;扫描值送入p1口
MOV A,P1 ;读出p1口数据判断键值
JB ACC.7,LONE ;第一行 P1.7
MOV A,#01H
AJMP LKP
LONE: JB ACC.6,LTWO ;第二行 P1.6
MOV A,#05H
AJMP LKP
LTWO: JB ACC.5,LTHR ;第三行 P1.5
MOV A,#09H
AJMP LKP
LTHR: JB ACC.4,NEXT ;第四行 P1.4
MOV A,#0dH
LKP: ADD A,r6
MOV R3,A ;键值存入R3中
LCALL KEYDW
RETI
NEXT: INC r6
MOV A,r5
JNB ACC.0,KND
RR A
MOV r5,A
AJMP LK
KND: MOV P1,#0F0H
RETI
;键处理子程序
KEYDW: MOV A,R3
CLR C
RLC A
MOV DPTR,#TAB
JMP @A+DPTR
;TAB:
;***********************键盘处理方法2********************
;KEYDW: MOV A,R3
; CJNE A,#09H,KEYA
; AJMP NUM
;KEYA: JC NUM
;KEY1: MOV DPTR,#TAB
; CLR C
; SUBB A,#0AH
; RL A
; JMP @A+DPTR
;**********************键盘处理方法2************************
TAB: db 00h,01h
AJMP NUM1
AJMP NUM2
AJMP NUM3
AJMP NUM4
AJMP NUM5
AJMP NUM6
AJMP NUM7
AJMP NUM8
AJMP NUM9
AJMP NUM0
AJMP FUNC1
AJMP FUNC2
AJMP FUNC3
AJMP FUNC4
AJMP FUNC5
AJMP FUNC6
NUM1: MOV P1,#0F0H
RET
NUM2: MOV P1,#0F0H
RET
NUM3: MOV P1,#0F0H
RET
NUM4: MOV P1,#0F0H
RET
NUM5: MOV P1,#0F0H
RET
NUM6: MOV P1,#0F0H
RET
NUM7: MOV P1,#0F0H
RET
NUM8: MOV P1,#0F0H
RET
NUM9: MOV P1,#0F0H
RET
NUM0: MOV P1,#0F0H
RET
;****************第一功能键,系统参数显示键*************************
FUNC1: push a
inc 20H
mov a,20h
scr1: cjne a,#01h,scr2 ;页码保存单元内容为1,显示第一屏,否则显示第二屏
pop a
lcall clears
lcall firsts
ret
scr2: cjne a,#02h,rets1 ;scr3 ;页码保存单元内容为2,显示第二屏,否则显示第三屏
pop a
lcall clears
lcall start
ret ;做实验 暂时改成 初始界面
;scr3: cjne 20h,#03h,rets1 ;页码保存单元内容为3,显示第三屏,否则到返回第一屏子程序
; mov 20h,#00h
; lcall threes
rets1: pop a
mov 20h,#00h ;页码内容清零,从第一页开始显示return to screen1
MOV P1,#0F0H
RET
lcall firsts
MOV P1,#0F0H
RET
;***************************删除键12-7*******************************
FUNC2: MOV DISP_Z,#0C0H
SETB CS2
clr CS1
dec disp_x ;MOV DISP_X,#0B8H
dec disp_y ;MOV DISP_Y,#40H
MOV LONG,#08H
MOV WIDE,#02H
MOV DPTR,#del
lcall disp
reti
;MOV R6,A
lcall firsts
MOV P1,#0F0H
RET
FUNC3: ;MOV R6,A
MOV P1,#0F0H
RET
FUNC4: ;MOV R6,A
MOV P1,#0F0H
RET
FUNC5: ;MOV R6,A
MOV P1,#0F0H
RET
FUNC6: ;MOV R6,A
MOV P1,#0F0H
RET
NUM: MOV R6,A
MOV P1,#0F0H
RET
;***********************初始界面****************
;初始界面
start: SETB CS1
CLR CS2
MOV DISP_X,#0B9H
MOV DISP_Y,#40H
MOV LONG,#40H
MOV WIDE,#02H
MOV DPTR,#HZ11
LCALL para_DISP
MOV DISP_X,#0BbH
MOV DPTR,#HZ21
LCALL para_DISP
MOV DISP_X,#0BdH
MOV DPTR,#HZ31
LCALL para_DISP
;MOV DISP_X,#0BeH
;MOV DPTR,#HZ41
;LCALL CHN_DISP
CLR CS1
SETB CS2
MOV DISP_X,#0B9H
MOV DISP_Y,#40H
MOV LONG,#40H
MOV WIDE,#02H
MOV DPTR,#HZ12
LCALL para_DISP
MOV DISP_X,#0BbH
MOV DPTR,#HZ22
LCALL para_DISP
MOV DISP_X,#0BdH
MOV DPTR,#HZ32
LCALL para_DISP
ret
;**********************清屏***********************
clears: MOV DISP_Z,#0C0H
SETB CS1
CLR CS2
MOV DISP_X,#0B8H
MOV DISP_Y,#40H
MOV LONG,#40H
MOV WIDE,#02H
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BAH
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BCH
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BEH
MOV DPTR,#clear
LCALL para_DISP
CLR CS1
SETB CS2
MOV DISP_X,#0B8H
MOV DISP_Y,#40H
MOV LONG,#40H
MOV WIDE,#02H
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BAH
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BCH
MOV DPTR,#clear
LCALL para_DISP
MOV DISP_X,#0BEH
MOV DPTR,#clear
LCALL para_DISP
ret
;***********************第一屏系统参数*******************
firsts: ;MOV SP,#70H
setb rs0
clr rs1
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
MOV DISP_X,#0BaH
MOV DPTR,#para21
LCALL para_DISP
MOV DISP_X,#0BcH
MOV DPTR,#para31
LCALL para_DISP
MOV DISP_X,#0BeH
MOV DPTR,#para41
LCALL para_DISP
;***********************系统参数值************
SETB CS2
clr CS1
MOV DISP_X,#0B8H
MOV DISP_Y,#40H
MOV LONG,#08H
MOV WIDE,#02H
lcall paraf
MOV DISP_X,#0BaH
MOV DISP_Y,#40H
lcall paras
MOV DISP_X,#0BcH
MOV DISP_Y,#40H
lcall parat
MOV DISP_X,#0BeH
MOV DISP_Y,#40H
lcall parafr
ret ;ljmp main 12月5日改
;*********************12-3********************
;***************第一行参数显示*****************
paraf: mov r7,#06h
mov r0,#50h
loopf: mov a,@r0
numf0: cjne a,#0,numf1
mov dptr,#numtab0
lcall para_disp
;*************************
lcall parazbf
;***********************
inc r0
djnz r7,loopf
ret
numf1: cjne a,#1,numf2
mov dptr,#numtab1
lcall para_disp
;*********************
lcall parazbf
;*********************
inc r0
djnz r7,loopf
ret
numf2: cjne a,#2,numf3
mov dptr,#numtab2
lcall para_disp
;*******************
lcall parazbf
;********************
inc r0
djnz r7,loopf
ret
numf3: cjne a,#3,numf4
mov dptr,#numtab3
lcall para_disp
;********************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -