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

📄 scankey.asm

📁 应用松翰母体写的一款电磁炉
💻 ASM
字号:
;-----
;2x7	
	line0	equ	p5.0
	line1	equ	p5.1
;-----
	row0	equ	p2.0
	row1	equ	p2.1
	row2	equ	p2.2
	row3	equ	p2.3
	row4	equ 	p2.4
	row5	equ	p2.5
	row6	equ	p2.6	
;-----
;loopj=2 loopi=7

;**********************************************
;Name	:mnkey
;Function:
;Input  :loopi,loopj
;Output	:keyvalue
;Register Used:var1,var2
;***********************************************
mnkey:
	mov	a,p5
	and	a,#11111100b
	mov	p5,a
	call	delay10us
	mov	a,p2
	and	a,#01111111b
	xor	a,#01111111b
	b0bts0	fz		;judge have key push or not
	jmp	mnkey80		;no key push
;-----
	b0bts0	keypushflag	;have key push,then delay 30ms~100ms
	jmp	delaytime
	bset	keypushflag
	bclr	t30msflag
	mov_	timer30ms,#3
	jmp	mnkey90
;-----
delaytime:
	b0bts0	getonekeyflag
	jmp	longpushjudge
	b0bts1	t30msflag
	jmp	mnkey90
	jmp	checkkey
;-----
longpushjudge:
	b0bts1	checktimeflag		;用于长按键的判定
	jmp	mnkey90
	b0bts1	t1sflag
	jmp	mnkey90
	bclr	t1sflag
	bset	keyokflag
	bclr	checktimeflag
	jmp	mnkey90
;-----
;check which key push
checkkey:
	bclr	t30msflag
	bclr	keypushflag
	mov	a,#7
	mov	loopi,a		;
;------
;line0
	mov	a,#11111110b
	mov	var1,a
scanline:
	mov	a,var1
	and	p5,a
	call	delay10us
	mov	a,p2
	mov	var2,a		;save line value
;----
	mov	a,#2
	mov	loopj,a
;----
loopcheck:
	rrcm	var2
	b0bts1	fc
	jmp	havekeypush
	decms	loopj
	jmp	loopcheck
;-----
	bset	fc
	rlcm	var1
	decms	loopi
	jmp	scanline
	ret
;----------
havekeypush:
	bset	getonekeyflag
	mov	a,loopi
	sub	a,#1
	mov	loopi,a
;----				
	bclr	fc		;keyvalue=2x(loopi-1)+loopj
;//	rlcm	loopj
	rlc	loopi		;x2
	mov	keyvalue,a
	mov	a,loopj
	add	keyvalue,a	
	cmprs	a,#9
	jmp	mnkey70
;-----
	bset	checktimeflag
	mov_	timer1s,#100
	bclr	t1sflag
	ret
;-----
mnkey70:
	bset	keyokflag
	ret
;-----
mnkey80:
	bclr	keyokflag
	bclr	getonekeyflag
;-----
mnkey90:
	ret

⌨️ 快捷键说明

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