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

📄 键盘扫描驱动.asm

📁 用汇编写的一个键盘 程序 纯属练习 没价值 用的是矩阵扫瞄法
💻 ASM
字号:
STARTSCAN:
	OLR	Keyport,#(1<<ROW0)|(1<<ROW1)|(1<<ROW2)|(1<<ROW3)	;把R全部设定为输入 先把R和1或然后全部赋给Keyport
	CLR	COL0
	CLR	COL1
	CLR	COL2
	MOV 	A,KeyPort
	ORL 	A,#0FFH-(1<<ROW0)|(1<<ROW1)|(1<<ROW2)|(1<<ROW3)	;多余的端口都为0,被OFFH减的结果都为1,然后和Keyport相或就使多余的端口都为1,避免和FFH比较时无法判断,从而实现了对多余端口的屏蔽
	CJNE	A,#0FFH,rkHasPushKey
	MOV	R7,#0CH
	RET
rkHasPushKey:
	CLR	C2
	SETB	C1
	SETB	C0					;其实为了使整个电路变化的省电,可以在把Keyport赋给A之后把C2恢复成1  
	MOV	R7,#(0CH-1)				;R7本来为OCH,为无按键,进入该部分程序后会直接减1进入有按键状态
	MOV	A,KeyPort
	JNB	ACC.ROW3,NEXT			;R7=0BH
	DEC 	R7		
	JNB 	ACC.ROW2,NEXT
	DEC 	R7
	JNB 	ACC.ROW1,NEXT		;注意:这里JNB命令后只可以跟位,JNB只能进行位操作而不能进行数操作,所以R1要改为ACC.R1,之前已经把Keyport端口内容拷贝到了寄存器A中ACC.R1就表示A中第1位
	DEC 	R7		
	JNB 	ACC.ROW0,NEXT

	CLR 	C1
	SETB 	C2
	SETB	C0
	DEC	R7
	MOV	A,KeyPort
	JNB	ACC.ROW3,NEXT	
	DEC 	R7		
	JNB 	ACC.ROW2,NEXT
	DEC 	R7
	JNB 	ACC.ROW1,NEXT	
	DEC 	R7		
	JNB 	ACC.ROW0,NEXT

	CLR 	C0
	SETB 	C2
	SETB 	C1
	DEC 	R7
	MOV	A,KeyPort
	JNB	ACC.ROW3,NEXT	
	DEC 	R7		
	JNB 	ACC.ROW2,NEXT
	DEC 	R7
	JNB 	ACC.ROW1,NEXT	
	DEC 	R7		
	JNB 	ACC.ROW0,NEXT
	MOV	R7,#OCH			  		;最后一步可以防止因为按键的物理抖动造成的漏扫描,在按键输入稳定的时候抓住扫描
NEXT:
	RET

⌨️ 快捷键说明

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