⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 总程序.asm

📁 (1)完成键盘
💻 ASM
📖 第 1 页 / 共 2 页
字号:
             CLR   P2.5
             RET
;-------------------------------------------------
;位选子程序
;功能:选通第5位
;-------------------------------------------------
WUSEL5:      CLR  P2.7
             CLR  P2.6
             SETB P2.5
             RET
;-------------------------------------------------
;延时子程序3
;功能:完成显示的延时
;-------------------------------------------------
WUDELAY3:    MOV        R6,#5
WULP1:       MOV        R7,#0FFH
WULP2:       NOP
             DJNZ       R7,WULP2
             DJNZ       R6,WULP1
             RET
WULED1:      DB  7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH,0EEH,0F8H,72H,0BCH,0F2H,0E2H


;**************************************************
;键盘自检子程序:
;功能:完成K1-K4键的自检,占用"0"区的R7,R6
;**************************************************
WXD:         MOV        R0,#4              ;检测四个按键
             CLR        RS1                ;选用"0"区
             CLR        RS0                ;用到R7,R6
KEYBOARD:    MOV        P0,#0
             LCALL      SELL8              ;选通三态门,进行键值采样
;判断是否有键按下:
YJAX:        ANL        A,#0FH
             CJNE       A,#0FH,WXD_KEY
             AJMP       KEYBOARD           ;没键按下继续采样
;主程序:
WXD_KEY:
A1:          CJNE       A,#0EH,A2         ;K1键按下
             LCALL      LEDD1              ;调显示
             LCALL      BEEP1              ;调蜂鸣器
             AJMP       A9
A2:          CJNE       A,#0DH,A3         ;K2键按下
             LCALL      LEDD2
             LCALL      BEEP2
             AJMP       A9
A3:          CJNE       A,#0BH,A4         ;K3键按下
             LCALL      LEDD3
             LCALL      BEEP3
             AJMP       A9
A4:          CJNE       A,#07H,A5         ;K4键按下
             LCALL      LEDD4
             LCALL      BEEP4
             AJMP       A9
A5:          LJMP       KEYBOARD
A9:          DEC        R0
             CJNE       R0,#0,KEYBOARD
             RET
SELL8:       LCALL      SEL8               ;选通三态门子程序
             MOV        P1,#0FFH
             MOV        A,P1
             LCALL      SEL7
             RET
SEL7:        CLR        P2.7
             SETB       P2.6
             SETB       P2.5
             RET
SEL8:        SETB       P2.7
             SETB       P2.6
             SETB       P2.5
             RET

DELAY1:      MOV        R7,#0FFH            ;延时约0.3秒子程序
D1:          MOV        R6,#0FFH
D2:          NOP
             NOP
             DJNZ       R6,D2
             DJNZ       R7,D1
             RET

;蜂鸣器子程序
BEEP1:       CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             RET
BEEP2:       CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             RET
BEEP3:       CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             RET
BEEP4:       CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             LCALL      DELAY1
             CLR        P2.3
             LCALL      DELAY1
             SETB       P2.3
             RET

;LED子程序:
LEDD1:       MOV        P0,#0CH
             LCALL      L
             LCALL      DELAY1
             RET
LEDD2:       MOV        P0,#0B6H
             LCALL      L
             LCALL      DELAY1
             RET
LEDD3:       MOV        P0,#9EH
             LCALL      L
             LCALL      DELAY1
             RET
LEDD4:       MOV        P0,#0CCH
             LCALL      L
             LCALL      DELAY1
             RET

L:           CLR        P2.7
             CLR        P2.6
             SETB       P2.5
             RET
;***************键盘自检子程序完毕*******************


;***************************************************
;A\D自检子程序
;**************************************************
;占用区0的R1
;************************************************
FQMAIN:      MOV        R1,#30H
             MOV        @R1,#92H
             INC        R1
             MOV        @R1,#92H
             INC        R1
             MOV        @R1,#92H
             CLR        P2.7
FQM1:        SETB       EX0
             SETB       EA
             MOV        R0,#0FFH
             ACALL      FQLED
             CLR        EX0
             LCALL      CHAXUN
             JNB        ACC.5,FQM1
             RET
;********************************************************
;led显示子程序
;占用区0的R0、R1、R4、R5??
;*******************************************************
FQLED:       MOV        R1,#30H
             MOV        P0,#0h
             MOV        P0,@R1
             LCALL      FQSEL3
             LCALL      FQDELAY
             MOV        P0,#0H
             INC        R1
             MOV        P0,@R1
             ACALL      FQSEL4
             LCALL      FQDELAY
             MOV        P0,#0H
             INC        R1
             MOV        P0,@R1
             LCALL      FQSEL5
             LCALL      FQDELAY
             DJNZ       R0,FQLED
             RET
; ***********************************************************
;外部中断程序
;占用区1的R1、R3、R6?
;*************************************************************
FQINT0:      CLR        EA
             PUSH       A
             PUSH       PSW
             SETB       RS1
             CLR        RS0
FQINT1:      CLR        P2.0
             CLR        p2.1
             MOV        R1,#30H
             MOV        DPTR,#FQTAB
             MOV        A,P1                 ;送高四位
             SETB       P2.1
             JB         ACC.4,FQAD3            ;判断是否溢出
             ANL        A,#0FH
             MOVC       A,@A+DPTR
             MOV        @R1,A
             INC        R1
             CLR        P2.2                  ;送低八位
             MOV        A,P1
             MOV        R3,A
             SETB       P2.2
             SETB       P2.0
             ANL        A,#0F0H
             SWAP       A
             MOVC       A,@A+DPTR
             MOV        @R1,A
             INC        R1
             MOV        A,R3
             ANL        A,#0FH
             MOVC       A,@A+DPTR
             MOV        @R1,A
             JMP        FQAD5
FQAD3:       LCALL      FQAD31
FQAD5:       POP        PSW
             POP        A
             SETB       EA
             RETI
FQSEL3:      CLR        P2.7           ;sel3显示
             SETB       P2.6
             CLR        P2.5
             RET
FQSEL4:      SETB       P2.7           ;sel4显示
             SETB       P2.6
             CLR        P2.5
             RET
FQSEL5:      CLR        P2.7           ;sel5显示
             CLR        P2.6
             SETB       P2.5
             RET
FQDELAY:     MOV        R5,#08H        ;延时子程序
FQDELAY1:    MOV        R4,#0FFH
FQDELAY2:    DJNZ       R4,FQDELAY2
             DJNZ       R5,FQDELAY1
             RET

FQAD31:      MOV        R6,#0FFH
FQAD4:       CLR        P2.3
             LCALL      FQDELAY
             DJNZ       R6,FQAD4
             SETB       P2.3
             RET
;*********************表格******************************
FQTAB:DB 7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH,0EEH,0F8H,0B0H,0BCH,0F2H,0E2H

CHAXUN:      MOV        P0,#0
             LCALL      SEL8
             MOV        P1,#0FFH
             MOV        A,P1
             LCALL      SEL7
             CJNE       A,#0FFH,NEXT
             SJMP       CHAXUN
NEXT:        ANL        A,#0F0H
             RET

DELAY:	     MOV	R6,#03H
DELA3:	     MOV	R7,#0FFH
DELA4:	     DJNZ	R7,DELA4
	     DJNZ	R6,DELA3
	     RET
KEYIN:       CLR	EA
	     MOV	R1,P2
	     MOV	R2,P0
	     MOV	P0,#0
	     SETB	P2.5
	     SETB	P2.6
	     SETB	P2.7
	     MOV	A,P1
	     MOV	P2,R1
	     MOV	P0,R2
	     SETB	EA
	     ANL	A,#0FH
	     CJNE	A,#0FH,KEY1
	     MOV	A,#0
	     SJMP	KEYEXI
KEY1:	     CJNE	A,#0EH,KEY2
	     MOV	A,#1
	     SJMP	KEYEXI
KEY2:        CJNE	A,#0DH,KEY3
	     MOV	A,#2
	     SJMP	KEYEXI
KEY3:        CJNE	A,#0BH,KEY4
	     MOV	A,#3
	     SJMP	KEYEXI
KEY4:        CJNE	A,#07H,KEYEXI
	     MOV	A,#4
KEYEXI:	     RET
T0INT:	     CLR	EA
	     PUSH	ACC
	     PUSH	PSW
	     CLR	RS0
	     SETB	RS1
	     CLR	TF0
	     SETB	EA
	     MOV	P0,#0
	     MOV	A,BITNUM
	     MOV	C,ACC.0
	     MOV	P2.7,C
	     MOV	C,ACC.1
	     MOV	P2.6,C
	     MOV	C,ACC.2
	     MOV	P2.5,C
	     MOV	A,BITNUM
	     MOV	R0,#led0
	     ADD	A,R0
	     MOV	R0,A
	     MOV	A,@R0
	     MOV	DPTR,#TAB
	     MOVC	A,@A+DPTR
	     MOV	P0,A
	     MOV	A,BITNUM
	     INC	A
	     CJNE	A,#05H,TINT1
	     MOV	A,#0
TINT1:	     MOV	BITNUM,A
	     MOV	TH0,#0FEH
	     MOV	TL0,#0H
	     SETB	TR0
	     CLR	EA
	     CLR	RS0
	     CLR	RS1
	     POP	PSW
             POP	ACC
	     SETB	EA
             RETI

WUREAD:      CLR        EA
             PUSH       PSW
             SETB       RS1
             SETB       RS0
WUREAD1:     LCALL      WUREAD2
ENDR:        POP        PSW
             RET
;****************************************
WUJZWR:      CLR        EA
             PUSH       PSW
             SETB       RS1
             SETB       RS0
WU_WR1:      LCALL      WU_WR2
             LCALL      WUBEEP1
             POP        PSW
             SETB       EA
             RET
;****************************************
WUREAD2:     MOV        R0,#5
             MOV        R1,#33H
WUR:         LCALL      WU_RD_DT
             INC        R1
             INC        R3
             DJNZ       R0,WUR
             RET
;****************************************
WU_RD_DT:    LCALL      WU_RD_SR
             JB         ACC.0,WU_RD_DT
             LCALL      WU_RD_DT1
             RET
WU_RD_DT1:   LCALL      WU_RD_SR
             JB         ACC.0,WU_RD_DT1
             CLR        CS
             MOV        A,#03H
             LCALL      WU_WR
             MOV        A,R3
             LCALL      WU_WR
             LCALL      WU_RD
             MOV        @R1,A
             SETB       CS
             RET

WU_WR2:      MOV        R1,#33H
             MOV        R0,#5
WU_WR3:      LCALL      WU_WR_DT
             INC        R1
             INC        R3
             DJNZ       R0,WU_WR3
             RET

WU_WR_DT:    LCALL      WU_RD_SR
             JB         ACC.0,WU_WR_DT
             LCALL      WU_WR_DT1
             RET

WU_WR_DT1:   CLR        CS
             MOV        A,#06H
             LCALL      WU_WR
             SETB       CS
             CLR        CS
             MOV        A,#02H
             LCALL      WU_WR
             MOV        A,R3
             LCALL      WU_WR
             MOV        A,@R1
             LCALL      WU_WR
             CLR        CS
             SETB       CS
             RET
WU_RD_SR:    MOV        A,#05H
             CLR        CS
             LCALL      WU_WR
             LCALL      WU_RD
             SETB       CS
             RET

WU_WR:       MOV        R2,#08H
WU_WR4:      RLC        A
             MOV        SI,C
             CLR        SCK
             SETB       SCK
             DJNZ       R2,WU_WR4
             RET

WU_RD:       MOV        R2,#08H
WU_RD1:      SETB       SCK
             CLR        SCK
             MOV        C,SO
             RLC        A
             DJNZ       R2,WU_RD1
             RET

;-------------------------------------------------
;选通74HC245L子程序
;功能:选通74HC245L
;-------------------------------------------------

;-------------------------------------------------
WUXUANQU1:   PUSH       PSW
             SETB       RS1
             SETB       RS0
             MOV        R3,#00H
             POP         PSW
             RET

tab:         DB 46h,47h,7eh,0ch,0b6h,9eh,0cch,0dah,0fah,0eh,0feh,0deh
	     DB 7FH,0Dh,0b7h,9Fh,0cDh,0dBh,0fBh,0fh,0ffh,0dFh
	     DB 80H,00H
             RET
             END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -