📄 key.asm
字号:
;--------------------------------------------------------------------
;touche: Fonction qui lit une fois le clavier et ressort avec (ACC)=0 si aucune
; touche n'est enfoncee, sinon (ACC)= code ASCII de la touche enfonc閑.
; Sauvegarde les registres utilises sauf ACC.
;clavier: Fonction qui attend qu'une touche soit enfoncee puis relachee. En
; sortie, (R7)=code ASCII de la touche.
; Sauvegarde les registres utilises sauf R7.
;att_5micro: Boucle d'attente pour ecriture-lecture sur P2.
; Sauvegarde les registres utilises.
;att_10ms: Boucle d'attente pour antirebond clavier.
; Sauvegarde les registres utilises.
;--------------------------------------------------------------------
$include (c8051f000.inc) ; Include register definition file.
$include (TP.inc) ; Include TP definition file.
PROG segment CODE
CONST segment CODE
PUBLIC clavier
PUBLIC touche
RSEG PROG
clavier: PUSH PSW
PUSH ACC
clav_0: LCALL att_10ms
LCALL touche
CJNE A,#0,clav_1
SJMP clav_0
clav_1: PUSH ACC
clav_2: LCALL att_10ms
LCALL touche
CJNE A,#0,clav_2
POP ACC
MOV R7,A
POP ACC
POP PSW
RET
touche: PUSH PSW
MOV DPTR,#table
PUSH DPL
PUSH DPH
debut: CLR A
MOVC A,@A+DPTR
JNZ ff
SJMP fin
ff: MOV P2,A
LCALL att_5micro
INC DPTR
CLR A
MOVC A,@A+DPTR
CJNE A,P2,tour
INC DPTR
CLR A
MOVC A,@A+DPTR
SJMP fin
tour: INC DPTR
INC DPTR
SJMP debut
fin: POP DPH
POP DPL
POP PSW
RET
att_10ms:
bcl: MOV R2,#160
Boucle:
MOV R0,#240
DJNZ R0,$
DJNZ R2,Boucle
RET
att_5micro: MOV R0,#20
DJNZ R0,$
RET
rseg CONST
table: DB 11101111B,11100111B,'*'
DB 11101111B,11101011B,'0'
DB 11101111B,11101101B,'#'
DB 11011111B,11010111B,'1'
DB 11011111B,11011011B,'2'
DB 11011111B,11011101B,'3'
DB 01111111B,01110111B,'4'
DB 01111111B,01111011B,'5'
DB 01111111B,01111101B,'6'
DB 10111111B,10110111B,'7'
DB 10111111B,10111011B,'8'
DB 10111111B,10111101B,'9'
DB 00000000B
; End of file.
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -