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

📄 keyboard2.asm

📁 Keil c51 写的
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;	mov	CMD	,#0
	jmp	CMD_Over

	_CMD_Echo	:
	cjne	a	,#CMD_Echo	,_CMD_SET_CapsNum
	;mov	sbuf	,a
	call	do_CMD_Echo
;	mov	CMD	,#0
	jmp	PC_Over

	_CMD_SET_CapsNum	:
	cjne	a	,#CMD_SET_CapsNum	,pc_Err
	call	do_CMD_SET_CapsNum
;	mov	CMD	,#0
	jmp	CMD_Over

	CMD_Over	:
	
	;mov	r0	,#0xFA	;交由命令处理函数完成发送应答字节
	jmp	pc_Over;pc_End
	pc_Err	:
	call	Delay5ms

	call	clearKeyBuff
	mov	r7	,#0xFE
	call	SendBuff	;送送接正OK BYTE
	
	pc_End	:

	pc_Over	:
	pop	b

	ret
;*************************************************************************
;Reset
;soft reset
;***************************************************************************
Do_CMD_Reset	:;equ	0xFF 	;(Reset)
	push	acc	
	mov	CMD	,#0
	call	ClearKeyBuff	;clear Key buffer
	
	mov	r7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	sendBuff

	call	delay5ms
	jmp	StartP		

	pop	acc
	ret
;*************************************************************************

;---------------------------------------------------
;do comand resned
;2005-12-24
;ice.xiang
;---------------------------------------------------
Do_CMD_Resend	:
	mov	CMD	,#0
	mov	R7	,#LastSendData
	call	Write_Byte_in_Buff
	call	sendBuff

	call	delay1ms
	
	ret


;<-------
;---------------------------------------------------
;回应命令CMD_Set_AllMkbkTyI
;All	Key	: Make /Break	/typemica
;---------------------------------------------------
Do_CMD_Set_AllMkbkTy	:	;equ	0xFA	;
	mov	CMD	,#0
	call	ClearKeyBuff	
	
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff
	setb	Flag_All_Mk
	setb	Flag_All_Ty	
	setb	Flag_All_Bk	
	
	ret
;---------------------------------------------------
; CMD_Set_AllMk
;只有Make  code
;---------------------------------------------------
Do_CMD_Set_AllMk	:	;equ	0xF9 	;(Set All Keys Make)
	mov	CMD	,#0
	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	setb	Flag_All_Mk
	clr	Flag_All_Ty	
	clr	Flag_All_Bk	

	ret

;---------------------------------------------------
;Do_CMD_Set_AllMkBk
;
;---------------------------------------------------
Do_CMD_Set_AllMkBk	:	;equ	0xF8	;0xF8 (Set All Keys Make/Break)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	setb	Flag_All_Mk
	setb	Flag_All_Bk	
	clr	Flag_All_Ty	
	
	ret

;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_Set_AllTy	:	;equ	0xF7 	;(Set All Keys Typematic)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff


	setb	Flag_All_Mk
	clr	Flag_All_Bk	
	setb	Flag_All_Ty	

	ret	
;---------------------------------------------------
;CMD_Set_Default
;
;---------------------------------------------------
Do_CMD_Set_Default		:	;equ	0xF6 	;(Set Default) 载入缺省的机打速率/延时10.9cps/500ms 按键类型(所有按键都使能机打/通
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	ret
;---------------------------------------------------
;CMD_Dis
;
;---------------------------------------------------
Do_CMD_Dis	:	;equ	0xF5 	;(Disable)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	setb	Flag_Disable
	ret
;---------------------------------------------------
;CMD_Ena
;
;---------------------------------------------------
Do_CMD_Ena	:	;equ	0xF4 	;(Enable)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	clr	Flag_Disable
	ret

;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_Set_TyRtDe	:	;equ	0xF3 	;(Set Typematic Rate/Delay)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	setb	CMD_Waite_Data

	ret
;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_Read_ID	:	;equ	0xF2 	;(Read ID)0xAB 0x83
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	mov	r7	,#0xAB
	call	Write_Byte_in_Buff
	mov	r7	,#0x83
	call	Write_Byte_in_Buff
	call	SendBuff

	ret

;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_Set_Code	:	;equ	0xF0 	;(Set Scan Code Set)
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	ret

;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_Echo	:	;equ	0xEE 	;(Echo)
	mov	CMD	,#0

	mov	R7	,#CMD_Echo
	call	Write_Byte_in_Buff
	call	SendBuff

	ret

;---------------------------------------------------
;回应命令Read I
;向Host 发送0xAB	0x83
;---------------------------------------------------
Do_CMD_SET_CapsNum	:	;equ	0xED	;Caps	Num	Scroll 
	mov	CMD	,#0

	call	ClearKeyBuff
	mov	R7	,#CMD_Rev_OK
	call	Write_Byte_in_Buff
	call	SendBuff

	setb	CMD_Waite_Data

	ret

;---------------------------------------------------
;Scan key	
;2005-12-24
;ice.xiang
;---------------------------------------------------
ScanKey	:
	mov	Col0_7	,#0xff
	mov	Row0_7	,#0xfe
	mov	Row8_15	,#0xff
	
	mov	r0	,#0
	mov	r1	,#LastState

	sk_Scan_p1	:
	mov	a	,Col0_7	;Read the state of Row0-7
	mov	b	,@r1		;上次状态
	mov	WorkLastState	,b
	cjne	a	,b	,sk_delay1	;Key pressed
	jmp	sk_Next_line			;no key pressed
	sk_delay1	:

	;dilter 
	call	Delay5ms
	call	Delay5ms
	call	Delay5ms
	cjne	a	,Col0_7	,sk_Next_Line	;if is dilter then next line
	mov	@r1	,a			;save current statues

	xrl	a	,b		;找出不同的位
	mov	r3	,a		;暂存位图

	;to find cols changed
	mov	r2	,#0

	sk_Get_Col1	:
	rrc	a			;Test whitch bit is changed
	jnc	sk_next_bit1		;bit changed

	sk_Got_Col1	:		;bit changed 
	mov	r4	,a		;save bits not test
	
	jnb	WorkLastState.0,sk_Is_Break_1
	;是通码	写入通码
	clr	IS_Break
	jmp	sk_send_Key1
	;是断码	写入断码
	sk_Is_Break_1	:
	setb	IS_Break
	sk_Send_Key1	:
	call	GetKeyCode
	
	mov	a	,r4		;Get the bits not test count
	
	sk_next_bit1	:		;Test next bit
	xch	a	,WorkLastState
	rr	a	
	xch	a	,WorkLastState
	inc	r2
	cjne	r2	,#8	,sk_Get_Col1	;checking Col test complished or not

	sk_Next_line	:
	inc	r1
	inc 	r0
	mov	a	,Row0_7		;next row
	rl	a
	mov	Row0_7	,a
	cjne	r0	,#8	,sk_Scan_p1
	
	;the row 0-7 scan end 
	mov	Row0_7	,#0xff
	mov	Row8_15	,#0xfe
	
	;--------------------------------------------------------------------------
	sk_Scan_p2	:
	mov	a	,Col0_7
	mov	b	,@r1		;上次状态
	mov	WorkLastState	,b
	cjne	a	,b	,sk_delay2; sk_Next_Line
	jmp	sk_Next_line2
	sk_delay2	:
	;push	b
	call	delay5ms
	call	delay5ms
	call	Delay5ms
	cjne	a	,p0	,sk_Next_Line2
	mov	@r1	,a		;保存当前状态
;	pop	b	
	xrl	a	,b		;找出不同的位
	mov	r3	,a		;暂存位图
	jz	sk_Next_Line2	
	;找出是第几列
	mov	r2	,#0
	sk_Get_Col2	:
	rrc	a			;最先找到哪个位为1:则输出这个列
	jnc	sk_Next_Bit2
	
	mov	r4	,a
	sk_Got_Col2	:
	jnb	WorkLastState.0	,sk_Is_Break_2
	;是通码	写入通码
	clr	IS_Break
	jmp	sk_Send_Key2
	;mov	
	;是断码	写入断码
	sk_Is_Break_2	:
	setb	IS_Break

	sk_Send_Key2	:
	call	GetKeyCode
	mov	a	,r4	
	sk_Next_Bit2	:
	xch	a	,WorkLastState
	rr	a	
	xch	a	,WorkLastState
	inc	r2	
	cjne	r2,	#8	,sk_Get_Col2

	sk_Next_line2	:

	inc	r0
	inc	r1
	mov	a	,Row8_15
	rl	a
	mov	Row8_15	,a
	cjne	r0	,#16	,sk_Scan_p2

	
	sk_Scan_Over	:
	;call	SendTypical	;机打检测与发送
	call	SendBuff
	ret

;---------------------------------------------------
;SendTypical	
;2005-12-24
;ice.xiang
;---------------------------------------------------
SendTypical	:
	push	acc
	push	r1_addr

	mov	a	,LastKey
	jz	stpcl_Over
	
	mov	a	,TpclDly
	jz	stpl_Delay_Over
	dec	TpclDly
	jmp	stpcl_Over
	stpl_Delay_Over	:

	;mov	TypicalDelayCount	,TypicalDelay
	;mov	a	,TypicalIntervalCount
	djnz	TpclDly	,stpcl_Over
	mov	TpclIntvl	,TypicalInterval

	mov	r7	,LastKey
	call	Write_Byte_in_Buff
	
	stpcl_Over	:

	pop	r1_addr
	pop	acc

	ret

;---------------------------------------------------
;GetKeyCode
;r0	:Row
;r2	:col
;2005-12-24
;ice.xiang
;---------------------------------------------------
GetKeyCode	:
	push	r1_addr
	push	acc
	push	b
	
	;make the index of table
	mov	a	,r0
	rl	a
	rl	a
	rl	a
	
	anl	a	,#0xf8
	orl	a	,r2
	
	
	;Special key pressed
	gkc_76	:
	cjne	a	,#93	,gkc_84		;R11 C5
	ajmp	gkc_specialy
	gkc_84	:
	cjne	a	,#94	,gkc_89		;R11 C6
	ajmp	gkc_specialy
	gkc_89	:
	cjne	a	,#101	,gkc_75		;R12 C5
	ajmp	gkc_specialy
	gkc_75	:
	cjne	a	,#102	,gkc_85		;R12 C6
	ajmp	gkc_specialy
	gkc_85	:
	cjne	a	,#110	,gkc_86		;R13 C6
	ajmp	gkc_specialy
	gkc_86	:
	cjne	a	,#111	,gkc_105	;R13 C7
	ajmp	gkc_specialy
	gkc_105	:
	cjne	a	,#114	,gkc_83		;R14 C2
	ajmp	gkc_specialy
	gkc_83	:
	cjne	a	,#115	,gkc_79		;R14 C3
	ajmp	gkc_specialy
;	gkc_85	:
;	cjne	a	,#116	,gkc_86		;R14 C4
;	ajmp	gkc_specialy
	gkc_79	:
	cjne	a	,#117	,gkc_80		;R14 C5
	ajmp	gkc_specialy
	gkc_80	:
	cjne	a	,#118	,gkc_81		;R14 C6
	ajmp	gkc_specialy
	gkc_81	:
	cjne	a	,#119	,gkc_sp_ok	;R14 C7
	ajmp	gkc_specialy

	gkc_specialy	:
	mov	R7	,#0xE0
	call	Write_Byte_in_Buff
	gkc_sp_ok	:


	;
	mov	dptr	,#Code_Set2
	movc	a	,@a+dptr
	
	jnb	IS_Break	,gkc_Send_Make
	;生成断码
	cjne	a	,LastKey	,gkc_BreakIni_Ok
	mov	LastKey	,#0
	gkc_BreakIni_Ok	:
	mov	R7	,#0xF0
	call	Write_Byte_in_Buff
	mov	R7	,a
	call	Write_Byte_in_Buff

	jmp	gkC_Over
	
	gkc_Send_Make	:
	mov	LastKey	,a
	mov	TpclDly	,TypicalDelay	;设定机打延时
	mov	TpclIntvl,TypicalInterval
	mov	R7	,a
	call	Write_Byte_in_Buff
		
	gkc_Over	:

	gkc_exit	:
	pop	b
	pop	acc
	pop	r1_addr
	ret

;*************************************************************************
;---------------------------------------------------
;Scan code table
;2005-12-24
;ice.xiang
;---------------------------------------------------
Code_Set2	:
		;c0	c1	c2	c3	c4	c5	c6	c7
	DB	0x00	,0x00	,0x00 	,0x00	,0xFF	,0x00	,0x14	,0X03;	R0	
		;126	,x	,x	,x	,64	,x	,58	,116
	DB	0x15	,0X0D	,0X1C	,0X76	,0X1A	,0X00	,0X0E	,0X16	;	R1	X
		;17	,16	,31	,110	,46	,131	,1	,2
	DB	0x1D	,0X58	,0X1B	,0X61	,0X22	,0X00	,0X05	,0X1E	;	R2	X
		;18	,30	,32	,45,	47	,132	112	,3	
	DB	0x24	,0x04	,0x23	,0x0C	,0x21	,0x00	,0x06	,0x26	;	R3	X
		;19	,114	,33	,115	,48	,133	,113	,4
	DB	0x2D	,0x2C	,0x2B	,0x34	,0x2A	,0x32	,0x2E	,0x25	;	R4	
		;20	,21	,34	,35	,49	,50	,6	,5
	DB	0x3C	,0x35	,0x3B	,0x33	,0x3A	,0x31	,0x36	,0x3D	;	R5	
		;23	,22	,37	,36	,52	,51	,7	,8
	DB	0x43	,0x5B	,0x42	,0x0B	,0x41	,0x00	,0x55	,0x3E	;	R6	
		;24	,28	,38	,117	,53	,56	,13	,9
	DB	0x44	,0x83	,0x4B	,0x00	,0x49	,0x00	,0x0A	,0x46	;	R7	1
		;25	,118	,39	,!	,54	,!	,119	,10
	DB	0x4D	,0x54	,0x4C	,0x52	,0x5D	,0x4A	,0X4E	,0x45;	R8	126	
		;26	,27	,40	,41	,42	,55	,12	,11
	DB	0x7E	,0x00	,0x00	,0x11	,0x00	,0xFF	,0x00	,0x00	;	R9	X
		;125	,!	,!	,60	,!	,62	,!	,!
	DB	0x6A	,0x66	,0x5D	,0x78	,0x5A	,0x07	,0x01	,0x09	;	R10	X
		;14	,15	,29	,122	,43	,123	,120	,121
	DB	0x6C	,0x6B	,0x69	,0x29	,0x77	,0x72	,0x71	,0x00	;	R11	X
		;91	,92	,93	.61	,90	,84	,76	,!
	DB	0x75	,0x73	,0x72	,0x70	,0xFF	,0x74	,0x70	,0x00	;	R12	
		;96	,97	,98	,99	,95	,89	,75	,!
	DB	0x7D	,0x74	,0x7A	,0x71	,0x7C	,0x7B	,0x7d	,0x7a	;	R13	
		;101	,102	,103	,104	,100	,105	,85	,86
	DB	0x79	,0x6D	,0x5A	,0x75	,0x00	,0x6b	,0x6c	,0x69	;	R14	
		;106	,107	,108	.83	,!	,79	,80	,81
	DB	0x00	,0x12	,0x59	,0x00	,0x00	,0x00	,0x00	,0x00	;	R15	1
		;!	,44	,57	,!	,!	,!	,!	!

end

⌨️ 快捷键说明

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