keydisp12-4.asm
来自「详细介绍了C语言开发DSP嵌入式系统」· 汇编 代码 · 共 992 行 · 第 1/2 页
ASM
992 行
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,#40H
SETB EA
SETB EX0
SETB IT0
MOV P1,#0F0H
SJMP $
KEYVAL: ;setb rs1
;clr rs0
MOV R2,#0FEH ;送扫描初值
MOV R4,#00H ;扫描列号
LK: MOV A,R2
MOV P1,A ;扫描值送入p1口
MOV A,P1 ;读出p1口数据判断键值
JB ACC.4,LONE ;第一行
MOV A,#00H
AJMP LKP
LONE: JB ACC.5,LTWO ;第二行
MOV A,#04H
AJMP LKP
LTWO: JB ACC.6,LTHR ;第三行
MOV A,#08H
AJMP LKP
LTHR: JB ACC.7,NEXT
MOV A,#0CH
LKP: ADD A,R4
MOV R3,A ;键值存入R3中
LCALL KEYDW
RETI
NEXT: INC R4
MOV A,R2
JNB ACC.3,KND
RL A
MOV R2,A
AJMP LK
KND: RETI
;键处理子程序
;KEYDW: MOV A,R3
; CLR C
; RLC A
; MOV DPTR,#TAB
; JMP @A+DPTR
;TAB:
KEYDW: MOV A,R3
CJNE A,#09H,KEYA
AJMP NUM
KEYA: JC NUM
KEY1: MOV DPTR,#TAB
CLR C
SUBB A,#0aH ;功能键值减10
RL A
JMP @A+DPTR
TAB: AJMP FUNC1
AJMP FUNC2
AJMP FUNC3
AJMP FUNC4
AJMP FUNC5
AJMP FUNC6
FUNC1: lcall firsts
mov P1,#0F0H
RET
FUNC2: 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
;***********************第一屏*******************
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
ljmp main
;*********************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
;********************
lcall parazbf
;********************
inc r0
djnz r7,loopf
ret
numf4: cjne a,#4,numf5
mov dptr,#numtab4
lcall para_disp
;********************
lcall parazbf
;********************
inc r0
djnz r7,loopf1
ret
loopf1: ljmp loopf
numf5: cjne a,#5,numf6
mov dptr,#numtab5
lcall para_disp
;**********************
lcall parazbf
;******************
inc r0
djnz r7,loopf2
ret
loopf2: ljmp loopf
numf6: cjne a,#6,numf7
mov dptr,#numtab6
lcall para_disp
;*******************
lcall parazbf
;*****************
inc r0
djnz r7,loopf3
ret
loopf3: ljmp loopf
numf7: cjne a,#7,numf8
mov dptr,#numtab7
lcall para_disp
;**********************
lcall parazbf
;************************
inc r0
djnz r7,loopf4
ret
loopf4: ljmp loopf
numf8: cjne a,#8,numf9
mov dptr,#numtab8
lcall para_disp
;***********************
lcall parazbf
;**********************
inc r0
djnz r7,loopf5
ret
loopf5: ljmp loopf
numf9: cjne a,#9,loopf1
mov dptr,#numtab9
lcall para_disp
;*******************
lcall parazbf
;*********************
inc r0
djnz r7,loopf6
ret
loopf6: ljmp loopf
;****************第一行参数显示坐标计算***********
parazbf: mov disp_x,#0b8h
mov r2,a
mov a,disp_y
add a,#08h
mov disp_y,a
mov a,r2
ret
;***************第二行参数显示*****************
paras: mov r7,#06h
mov r0,#56h
loops: mov a,@r0
nums0: cjne a,#0,nums1
mov dptr,#numtab0
lcall para_disp
;*************************
lcall parazbs
;***********************
inc r0
djnz r7,loops
ret
nums1: cjne a,#1,nums2
mov dptr,#numtab1
lcall para_disp
;*********************
lcall parazbs
;*********************
inc r0
djnz r7,loops
ret
nums2: cjne a,#2,nums3
mov dptr,#numtab2
lcall para_disp
;*******************
lcall parazbs
;********************
inc r0
djnz r7,loops
ret
nums3: cjne a,#3,nums4
mov dptr,#numtab3
lcall para_disp
;********************
lcall parazbs
;********************
inc r0
djnz r7,loops
ret
nums4: cjne a,#4,nums5
mov dptr,#numtab4
lcall para_disp
;********************
lcall parazbs
;********************
inc r0
djnz r7,loops1
ret
loops1: ljmp loops
nums5: cjne a,#5,nums6
mov dptr,#numtab5
lcall para_disp
;**********************
lcall parazbs
;******************
inc r0
djnz r7,loops2
ret
loops2: ljmp loops
nums6: cjne a,#6,nums7
mov dptr,#numtab6
lcall para_disp
;*******************
lcall parazbs
;*****************
inc r0
djnz r7,loops3
ret
loops3: ljmp loops
nums7: cjne a,#7,nums8
mov dptr,#numtab7
lcall para_disp
;**********************
lcall parazbs
;************************
inc r0
djnz r7,loops4
ret
loops4: ljmp loops
nums8: cjne a,#8,nums9
mov dptr,#numtab8
lcall para_disp
;***********************
lcall parazbs
;**********************
inc r0
djnz r7,loops5
ret
loops5: ljmp loops
nums9: cjne a,#9,loops1
mov dptr,#numtab9
lcall para_disp
;*******************
lcall parazbs
;*********************
inc r0
djnz r7,loops6
ret
loops6: ljmp loops
;****************第二行参数显示坐标计算***********
parazbs: mov disp_x,#0BAh
mov r2,a
mov a,disp_y
add a,#08h
mov disp_y,a
mov a,r2
ret
;***************第三行参数显示*****************
parat: mov r7,#06h
mov r0,#5ch
loopt: mov a,@r0
numt0: cjne a,#0,numt1
mov dptr,#numtab0
lcall para_disp
;*************************
lcall parazbt
;***********************
inc r0
djnz r7,loopt
ret
numt1: cjne a,#1,numt2
mov dptr,#numtab1
lcall para_disp
;*********************
lcall parazbt
;*********************
inc r0
djnz r7,loopt
ret
numt2: cjne a,#2,numt3
mov dptr,#numtab2
lcall para_disp
;*******************
lcall parazbt
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?