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

📄 keyscan.asm

📁 应用松翰母体写的一款电磁炉
💻 ASM
字号:
;**********************************************
;Name	:mnkey
;Function:
;Input  :
;Output	:
;Register Used:
;***********************************************
mnkey:
 	call	keyin
	call	keychk
	call	keycvt
	
mnkey90:
	ret
	
;**********************************************
;Name	:keyin
;Function:keyinbuf.7=0:key on line0,=1:key on line1
;Input  :
;Output	:
;Register Used:var1,var2
;***********************************************
keyin:
;-----
	mov_	var1,p2		;push p2 value
;//	mov_	var2,p4
	mov	a,#11110000b
	or	p4,a
	call	p2input
	clr	keyinbuf
;----
;start scan key
;line0
	bclr	line0
	call	delay_10us
	mov	a,p2
	and	a,#01111111b
	mov	keyinbuf,a
	xor	a,#01111111b
	b0bts1	fz
	jmp	keyin80			;line0 上有键按下,退出line1扫描
;-----
;line1					;line0 上无键按下,接着扫描line1
	bclr	line1
	call	delay_10us
	mov	a,p2
	and	a,#01111111b
	mov	keyinbuf,a
	xor	a,#01111111b
	b0bts0	fz
	jmp	keyin80			;line1 上无键按下
;----
	bset	keyinbuf.7		;line1 上有键按下
;------
keyin80:
	bset	line0
	bset	line1
;----
	call	p2output
	mov_	p2,var1			;pop p2 value
;//	mov_	p4,var2
;---
keyin90:
	ret
	
;**********************************************
;Name	:keychk
;Function:
;Input  :
;Output	:
;Register Used:
;***********************************************
keychk:
	mov	a,keyinbuf	;check line0 state
	cmprs	a,keychkbuf
	jmp	keychk10
	
	b0bts1	keystatflag	;check have key push or not?
	jmp	keychk90
	
	mov	a,keychat	;banish key's dithering
	b0bts1	fz
	jmp	keychk90
	
	mov	a,keychkbuf	;save key value
	mov	keycvtbuf,a
	
	bclr	keystatflag
	jmp	keychk90
;---	
keychk10:
	mov	a,keyinbuf	;send key state to bufram
	mov	keychkbuf,a
	
	bset	keystatflag	;set key push flag
	mov	a,#3		;3
	mov	keychat,a	;banish key's dithering 30ms
;---
keychk90:
	ret


;**********************************************
;Name	:keycvt
;Function:
;Input  :
;Output	:
;Register Used:temp3,temp4
;***********************************************	
keycvt:
	mov	a,keycvtbuf	;convert key value
	cmprs	a,keyoldbuf
	jmp	keycvt10
	jmp	keycvt90
;-----------------------------------------	
keycvt10:
	b0bts0	lineflag	;=0:line0 key,=1:line1 key
	jmp	line1keypush
;----
;line0 key push
	mov	a,keycvtbuf
	mov	keyoldbuf,a
	or	a,#10000000b
	mov	temp3,a
	mov_	temp4,#7
;-----------------------------------------
loopline0:
	bclr	fc
	rrcm	temp3
	b0bts1	fc
	jmp	line0getonekey
	decms	temp4
	jmp	loopline0
;-----
	bset	keyokflag
	ret
;-----
line0getonekey:
	mov	a,temp4
	mov	aplcode,a
	ret
;------------------------------------------
line1keypush:
	mov	a,keycvtbuf
	mov	keyoldbuf,a
	or	a,#10000000b
	mov	temp3,a
;----
	and	a,#00000011b
	b0bts0	fz
	jmp	twokeypush
	mov_	temp4,#5
loopline1:
	bclr	fc
	rrcm	temp3
	b0bts1	fc
	jmp	line1getonekey
	decms	temp4
	jmp	loopline1
;-----
	bset	keyokflag
	ret
;-----
line1getonekey:
	mov	a,temp4
	add	a,#7
	mov	aplcode,a
	ret
;----
twokeypush:
	mov	a,#13
	mov	aplcode,a
	bset	keyokflag	
;-----	
keycvt90:
	ret	
	
;*******************************************************
;*******************************************************
;*******************************************************
p2input:
	clr	p2m		;set p2 is input
	mov_	p2ur,#0ffh	;set p2 have pull_up
	jmp	$+1
	jmp	$+1
	ret
;-----------------
p2output:
	mov_	p2m,#0ffh	;set p2 is output
	clr	p2ur		;clr p2 pull_up
	jmp	$+1
	jmp	$+1
	ret
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -