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

📄 key.asm

📁 一个电子秤sonix 1909芯片按键控制模块 可以在上面稍作修改 对编写电子秤程序很有帮助
💻 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 + -