📄 key.asm
字号:
;*********************************************************************************
;NAME: READ_KEY10
;INPUT: NONE
;FUNCTION: ??????
;DESCRIBE: P00______.-.________
; P01______.-.________|
; |
; -----
; ---
; -
;CALL SUBPROGRAM: NONE
;USING RESOURCE: A
;STACK NEED: 2
;OUTPUT:
;*********************************************************************************
mnkey: ; SCAN KEY LOOP
CALL KEYIN ; READ INTO IN BUF
CALL KEYCHK ; READ INTO CHECK BUF
CALL KEYCVT ; READ INTO CONVERT BUF
mnkey90:
RET
;*******************************************************************************
; KEYOUTPORT ; SCAN OUTPUT
; KEYINPORT ; SCAN INPUT
;*******************************************************************************
KEYIN:
CLR KEYINBUF
nop
b0bts1 fp00
bset keyinbuf.0
B0BTS1 fp10
B0BSET KEYINBUF.1
KEYIN90:
RET
;*******************************************************************************
; CHECK KEYINBUF AND KEYCHKBUF
;*******************************************************************************
KEYCHK:
B0MOV A,KEYINBUF
XOR A,KEYCHKBUF
JNZ KEYCHK20 ; Jmp If Zero, Not Same
; SAME
B0BTS1 F_KEY_STATE
JMP KEYCHK90 ; END
;
; WAIT CHATTER
B0MOV A,KEYCHAT
JNZ KEYCHK90
;
; KEY BOUNCE TIME = 0 , COPY CHK BUF INTO CVT BUF
;
B0MOV A,KEYCHKBUF
B0MOV KEYCVTBUF,A
B0BCLR F_KEY_STATE ; CLR KEYSTAT
JMP KEYCHK90
KEYCHK20:
B0MOV A,KEYINBUF
B0MOV KEYCHKBUF,A
B0BSET F_KEY_STATE ;SET F_KEY_STATE,
MOV A,#KEY_AGE_VAL
B0MOV KEYCHAT,A
KEYCHK90:
RET
;*******************************************************************************
; COMPARE KEYCVT AND KEYOLD AND FIND THE DIFFERENT.
;*******************************************************************************
KEYCVT:
B0MOV A,KEYCVTBUF
XOR A,KEYOLDBUF
JZ KEYCVT20
jmp keycvt10
keycvt20: ;//
bts1 keycvt_f
JMP KEYCVT90 ; SAME , EXIT !
bts1 keycvtbuf.0
jmp keycvt30 ;//release
mov a,keycvttm ;
cmprs a,#6
jmp keycvt21
mov a,#01h
or key_command,a
jmp keycvt80
keycvt21:
cmprs a,#3
jmp keycvt22
bts0 key_light_f
jmp keycvt90
bset key_light_f
mov a,#04h
or key_command,a
jmp keycvt80
keycvt22:
cmprs a,#0
jmp keycvt90
mov a,#08h
or key_command,a
jmp keycvt80
;---------------------------------------------
keycvt30:
bts0 keycvtbuf.1
jmp keycvt31
jmp keycvt80
keycvt31:
mov a,keycvttm
bts1 fz
jmp keycvt32
bts0 key_mem_f_f
jmp keycvt90
b0bset key_mem_f_f
b0bclr key_mem_f
mov a,#40h
or key_command,a
jmp keycvt80
keycvt32:
cmprs a,#8
jmp keycvt90
b0bts0 memory_indicate_f
jmp keycvt90
b0bclr key_mem_f
b0bclr key_mem_f_f
mov a,#20h
or key_command,a
jmp keycvt80
;---------------------------------------------
KEYCVT10:
B0MOV A,KEYCVTBUF
B0MOV KEYOLDBUF,A
B0BTS1 KEYCVTBUF.0 ;p00
jmp keycvt11
bset keycvt_f
mov_ keycvttm,#08h ;//delay 4s
bts1 keyoldbuf.1
jmp keycvt90
mov a,#02h ;//KEY_COMMAND=8--->change unit
or KEY_COMMAND,a
jmp keycvt80
;-----------------------------
keycvt11:
B0BTS1 KEYCVTBUF.1 ;p00
jmp keycvt60
b0bset key_mem_f
bset keycvt_f
mov_ keycvttm,#0ah ;//delay 5s
jmp keycvt80
;--------------------------
keycvt60:
b0bclr key_mem_f_f
b0bclr memory_indicate_f
mov_ dis_data_buf,#25
b0bts1 key_mem_f
jmp keycvt70
b0bclr key_mem_f
mov a,#10h
or key_command,A
jmp keycvt80
;---------------------------
keycvt70: ;//key released
bclr keycvt_f
bclr key_mem_f_f
bclr key_light_f
jmp keycvt90
;--------------------------
keycvt80:
B0BSET F_KEY_ON ;1-one key press
KEYCVT90:
RET
;*******************************************************************************
; KEY DEBANCD TIME.
;*******************************************************************************
DKEYCHAT:
B0MOV A,KEYCHAT
B0BTS0 FZ ; IS KEYCHAT <> 0
JMP DKEYCHAT90 ; IS A = 0
DECMS KEYCHAT ; KEYCHAT --
JMP DKEYCHAT90
DKEYCHAT90:
RET
;***************************************************
dkeytm:
b0mov a,keycvttm
b0bts0 fz
jmp dkeytm90
decms keycvttm
nop
dkeytm90:
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -