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

📄 light_mnkey.asm

📁 系统采用SONIX单片机作为控制核心
💻 ASM
字号:
;***********************************************************************************************
;File name	:light_mnkey.asm
;Author		:guangyu_yang
;Purpose	:Training
;Data		:2/8/2007
;Dscription	:按键子程序				
;Version:	v1.1
;Hardware&IDE:	m2 1.14
;Copyright(C).SONIX TECHNOLOGY CO.,Ltd.		   
;*************************************************************************************************
mn_key:
	call	keyin		;键盘扫描程序		
	call	keychk		;去抖处理
	call	keycvt		;按键结果转换
	ret
keyin:				
	
;读取p1.0,p1.1,p1.2的值,存入keyinbuf
;	CLR	P1M
	mov	a,P1	;读扫描结果
	and	a,#0Eh
	mov	keyinbuf,a	;将结果存进keyinbuf中

keyin90:
	ret
/*****************************************************************
  Subroutine:       keychk
  Description:      去抖处理                                    
  Output:           keycvtbuf
;****************************************************************/
keychk:
	mov	a,keyinbuf	;比较扫描结果和上次是否一样
	cmprs	a,keychkbuf	;
	jmp	keychk10	;不一样,则更新keychkbuf

				
keychk00:			;每个口扫描结果都和上次一样
	b0bts1	fkey_in		;是否处于消抖中
	jmp	keychk90
	mov	a,keychat	;是否处理完毕
	cmprs	a,#00h
	jmp	keychk90	;没有则退出
keychk01:			;处理完毕,则接下来处理这组按键结果
	mov	a,keyinbuf	;更新keycvtbuf
	b0mov	keycvtbuf,a
	b0bclr	fkey_in		
	b0bset	fkeycvt
	jmp	keychk90

keychk10:			;有键按下,准备进入消抖处理	
	mov	a,keyinbuf
	b0mov	keychkbuf,a
	b0bset	fkey_in
	mov	a,#keydelaytime	;delay 50ms
	b0mov	keychat,a
	jmp	keychk90

keychk90:
	ret
/*****************************************************************
  Subroutine:       keycvt
  Description:      将按键结果转换并存储                                     
  Output:           keyresult
;****************************************************************/
keycvt:
	b0bts1	fkeycvt		;是否有按键需要处理
	jmp	keycvt90	;没有则退出
	b0bclr	fkeycvt		;有按键要处理,清按键处理标志位
	mov	a,keycvtbuf	;比较处理结果和上次是否一样
	cmprs	a,keyoldbuf
	jmp	keycvt10	;不一样,判断是哪个BUTTON并更新keyoldbuf
	jmp	keycvt90	;一样则跳出
	
keycvt10:
	mov 	a,keycvtbuf
	cmprs	a,#00001100b
	jmp	keycvt11
	mov	a,#01h
	jmp	keycvt20

keycvt11:
	cmprs	a,#00001010b
	jmp	keycvt12
	mov	a,#02h
	jmp	keycvt20

keycvt12:

	cmprs	a,#00000110b
	jmp	keycvt80
	mov	a,#03h
	jmp	keycvt20

keycvt20:
	mov	keyresult,a
	mov	a,keycvtbuf	;更新keyoldbuf的值
	JMP	KEYCVT90

KEYCVT80:
	b0mov	keyoldbuf,a	
keycvt90:
	ret


dkeychat:			;按键消抖时间处理
	b0mov   a,keychat
	
	b0bts0  fz		
	jmp     dkeychat90	
	decms   keychat	
	NOP	
	jmp     dkeychat90		
dkeychat90:
	ret


⌨️ 快捷键说明

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