怎么在此基础上写程序,使得按下其中一个键时,将该按键对应的编号在第一个数码管显示出来,当再按下一个按键时,便将这个按键值在下一个数码管显示出来,数码管上可以显示最近四次按下的按键编号
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV P0,#00H ;初始化数码管,开始时不显示
KEY:
MOV P1,#0FEH ;置P1.0为低电平,扫描列
JNB P1.4,K1
JNB P1.5,K2
JNB P1.6,K3
JNB P1.7,K4
MOV P1,#0FDH ;置P1.1为低电平,扫描列
JNB P1.4,K5
JNB P1.5,K6
JNB P1.6,K7
JNB P1.7,K8
MOV P1,#0FBH ;置P1.2为低电平,扫描列
JNB P1.4,K9
JNB P1.5,K10
JNB P1.6,K11
JNB P1.7,K12
MOV P1,#0F7H ;置P1.3为低电平,扫描列
JNB P1.4,K13
JNB P1.5,K14
JNB P1.6,K15
JNB P1.7,K16
AJMP KEY ;按键循环扫描
K1:
MOV P0,#3FH ;显示键值
LCALL DELAY
AJMP KEY ;继续按键扫描
RET
K2:
MOV P0,#06H
ACALL DELAY
AJMP KEY
RET
K3:
MOV P0,#5BH
LCALL DELAY
AJMP KEY
RET
K4:
MOV P0,#4FH
LCALL DELAY
AJMP KEY
RET
K5: MOV P0,#66H
ACALL DELAY
AJMP KEY
RET
K6: MOV P0,#6DH
ACALL DELAY
AJMP KEY
RET
K7: MOV P0,#7DH
ACALL DELAY
AJMP KEY
RET
K8:
MOV P0,#07H
ACALL DELAY
AJMP KEY
RET
K9: MOV P0,#7FH
ACALL DELAY
AJMP KEY
RET
K10:
MOV P0,#6FH
ACALL DELAY
AJMP KEY
RET
K11:
MOV P0,#77H
ACALL DELAY
AJMP KEY
RET
K12:
MOV P0,#7CH
ACALL DELAY
AJMP KEY
RET
K13:
MOV P0,#39H
ACALL DELAY
AJMP KEY
RET
K14:
MOV P0,#5EH
ACALL DELAY
AJMP KEY
RET
K15:
MOV P0,#79H
ACALL DELAY
AJMP KEY
RET
K16:
MOV P0,#71H
ACALL DELAY
AJMP KEY
RET
DELAY: MOV R0,#250 ;给R0赋值
D2: MOV R1,#250
D1: DJNZ R1,D1 ;R1减1不等于0跳转D1
DJNZ R0,D2 ;R0减1不等于0跳转D2 延时时间=250*250*2us
RET ;子程序结束返回
END
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV P0,#00H ;初始化数码管,开始时不显示
KEY:
MOV P1,#0FEH ;置P1.0为低电平,扫描列
JNB P1.4,K1
JNB P1.5,K2
JNB P1.6,K3
JNB P1.7,K4
MOV P1,#0FDH ;置P1.1为低电平,扫描列
JNB P1.4,K5
JNB P1.5,K6
JNB P1.6,K7
JNB P1.7,K8
MOV P1,#0FBH ;置P1.2为低电平,扫描列
JNB P1.4,K9
JNB P1.5,K10
JNB P1.6,K11
JNB P1.7,K12
MOV P1,#0F7H ;置P1.3为低电平,扫描列
JNB P1.4,K13
JNB P1.5,K14
JNB P1.6,K15
JNB P1.7,K16
AJMP KEY ;按键循环扫描
K1:
MOV P0,#3FH ;显示键值
LCALL DELAY
AJMP KEY ;继续按键扫描
RET
K2:
MOV P0,#06H
ACALL DELAY
AJMP KEY
RET
K3:
MOV P0,#5BH
LCALL DELAY
AJMP KEY
RET
K4:
MOV P0,#4FH
LCALL DELAY
AJMP KEY
RET
K5: MOV P0,#66H
ACALL DELAY
AJMP KEY
RET
K6: MOV P0,#6DH
ACALL DELAY
AJMP KEY
RET
K7: MOV P0,#7DH
ACALL DELAY
AJMP KEY
RET
K8:
MOV P0,#07H
ACALL DELAY
AJMP KEY
RET
K9: MOV P0,#7FH
ACALL DELAY
AJMP KEY
RET
K10:
MOV P0,#6FH
ACALL DELAY
AJMP KEY
RET
K11:
MOV P0,#77H
ACALL DELAY
AJMP KEY
RET
K12:
MOV P0,#7CH
ACALL DELAY
AJMP KEY
RET
K13:
MOV P0,#39H
ACALL DELAY
AJMP KEY
RET
K14:
MOV P0,#5EH
ACALL DELAY
AJMP KEY
RET
K15:
MOV P0,#79H
ACALL DELAY
AJMP KEY
RET
K16:
MOV P0,#71H
ACALL DELAY
AJMP KEY
RET
DELAY: MOV R0,#250 ;给R0赋值
D2: MOV R1,#250
D1: DJNZ R1,D1 ;R1减1不等于0跳转D1
DJNZ R0,D2 ;R0减1不等于0跳转D2 延时时间=250*250*2us
RET ;子程序结束返回
END