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 + -
显示快捷键?