📄 总程序.asm
字号:
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 + -