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

📄 kb_hub.dt

📁 8*18標準鍵盤應用程式, 其中包含: 按鍵輸入 &#1048715 固定時間輸出按鍵值給主機. 燈號輸出 &#1048715 主機會送出燈號資&#63934 給裝置, 有變化才有輸出.
💻 DT
📖 第 1 页 / 共 2 页
字号:
; ============================================================
; ETOMS USB KEYBOARD Demo 
; Designer: Dirk Leu
; 2004/09/29
; MCU: ET44M210
; MCU setting value
;============================================================
;
;			PORTA: KEY SCAN COLUMN 0~7
;			PORTB: KEY SCAN ROW 0~7 (INTERNAL PULL-HIGH)
;			PORTD: KEY SCAN COLUMN 4/5
;			PORTE: KEY SCAN COLUMN
;			PORTC: BIT3~5 LED
;				   

//////////////////////////////////////////////////////////////////////
KB_ROW						==	0x15	;PTB 0~7 	IOCB
KB_COLUMN0					==	0x14	;PTA 0~7	IOCA
KB_COLUMN1					==	0x18	;PTE 0~7	IOCE
KB_COLUMN2					==	0x17	;PTD 4~5	IOCD

KB_LED						==	0x16	;PTC
NUMB_LOCK_LED	==	0x03
CAPS_LOCK_LED	==	0x04
SCROLL_LOCK_LED	==	0x05

KB_FLAG						==	0x70
	KB_CONOK		==	0x00
	LED_CON			==	0x01
	ERROR_KEY		==	0x02
	SEND_KEY_WORK	==	0x03
	SAME_COLUMN		==	0x04
	HAD_KEY			==	0x05
	CHK_PHANTOM_KEY	==	0x06
	KBSOF_T			==	0x07

KB_CONFIRM1					==	0x71
KB_CONFIRM2					==	0x72
KB_STORE1					==	0x73
KB_STORE2					==	0x74

KTEMP1						==	0x75
TIME_COUNTER				==	0x76
KTEMP2						==	0x76
LED_STATE					==	0x77
KEY_PRESS					==	0x78
KTEMP3						==	0x78

KB_TEMP1					==	0x79
KB_TEMP2					==	0x7A
KB_TEMP3					==	0x7B
KB_TEMP4					==	0x7C
KB_TEMP5					==	0x7D
KB_TEMP6					==	0x7E
KB_TEMP7					==	0x7F

KEY_NCTEMP01				==	0x60
KEY_NCTEMP02				==	0x61
KEY_NCTEMP03				==	0x62
KEY_NCTEMP04				==	0x63
KEY_NCTEMP05				==	0x64
KEY_NCTEMP06				==	0x65
KEY_NCTEMP07				==	0x66
KEY_NCTEMP08				==	0x67
KEY_NCTEMP09				==	0x68
KEY_NCTEMP10				==	0x69
KEY_NCTEMP11				==	0x6A
KEY_NCTEMP12				==	0x6B
KEY_NCTEMP13				==	0x6C
KEY_NCTEMP14				==	0x6D
KEY_NCTEMP15				==	0x6E
KEY_NCTEMP16				==	0x6F

PHANTOM_K_BUF1				==	0x5C
PHANTOM_K_BUF2				==	0x5D
PHANTOM_K_BUF3				==	0x5E
PHANTOM_K_BUF4				==	0x5F

KBCON_SHIFT1				==	0x5E
KBCON_SHIFT2				==	0x5F

//CHANGE IO CONTROL
KB_B_IND0					==	0x5A
KB_B_IND1					==	0x5B
//CHANGE IO CONTROL

KB_FLAG2					==	0x59
KB_IDLE				==	0x00
KB_WUP				==	0x01
KB_R				==	0x02

//////////////////////////////////////////////////////////////////////
INCLUDE	"ET44M210_REG.H"

		ORG		0x0000
		
			JMP		KB_START

		ORG		0x0010
	
KWAKEUP_INT:
			CLR		KWUPBIF
			BS		KB_FLAG2,KB_WUP
			NOP
			RETI
			
//////////////////////////////////////////////////////////////////////
INCLUDE	"ET44_USB_LIB.INC"
INCLUDE	"ET44_USB_MACRO.INC"
INCLUDE	"KB_DEMO_Setting.h"

//////////////////////////////////////////////////////////////////////
		ORG		0x1000
		
KB_START:			
			DISI
			CALL	UKB_INITIAL
			CLR		RAMBS1
				_ADD_USB_INITIAL_SUB
			ENI

WAIT_UKB_CONFIG:
			JBC		KB_FLAG,KB_CONOK,WAIT_UKB_CONFIG			
			JBS		KB_FLAG2,KB_IDLE,GOTO_WAIT_KBWUP
			JBC		KB_FLAG,KBSOF_T,WAIT_UKB_CONFIG
			BC		KB_FLAG,KBSOF_T
			INC		TIME_COUNTER
			
			MOV		A,TIME_COUNTER
			XOR		A,#0x0A
			JBC		STTS,Z,WAIT_UKB_CONFIG
			
			CLR		TIME_COUNTER
UKB_SCAN_KEY:											
			JBC		KB_FLAG,LED_CON,UKB_SCAN_KEY_0
			CALL	KEY_LED_MANAGE
UKB_SCAN_KEY_0:			
			CALL	KEY_SCAN_MANAGE

			JBC		KB_FLAG,SEND_KEY_WORK,WAIT_UKB_CONFIG
UKB_RESPONE:
				_ADD_USB_EP1_WORK_SUB
			BC		KB_FLAG,SEND_KEY_WORK
			JMP		WAIT_UKB_CONFIG
			
GOTO_WAIT_KBWUP:
			CLR		KWUPAIF
			CLR		KWUPBIF
			
			BC		KB_FLAG2,KB_WUP
			BC		KB_FLAG2,KB_R

			DISI
			BANK	0
			MOV		A,#0xFF
			MOV		KWUBIE,A
			BS		WDT_CON,GREEN
			BANK	1
			ENI
			
W_KBWUP_DWUP_LOOP:			
			JBS		KB_FLAG2,KB_WUP,$+3
			JMP		W_KBWUP_DWUP_LOOP

			BANK	0
			CLR		KWUBIE
			CLR		KWUPBIF
			BC		WDT_CON,GREEN
			BANK	1
			
			BC		KB_FLAG2,KB_IDLE
			JBS		KB_FLAG2,KB_R,$+3
			BS		GCNTR,RESUME	
				N_NOP
			JMP		WAIT_UKB_CONFIG
						
//////////////////////////////////////////////////////////////////////
KEY_LED_MANAGE:
			BC		KB_FLAG,LED_CON
			MOV		A,#0b00111000
CHK_NUMBER_L:			
			JBC		LED_STATE,0,CHK_CAPS_L
			AND		A,#0b00110000
CHK_CAPS_L:			
			JBC		LED_STATE,1,CHK_SCROLL_L
			AND		A,#0b00101000
CHK_SCROLL_L:			
			JBC		LED_STATE,2,FILLIN_LED_PORT
			AND		A,#0b00011000
FILLIN_LED_PORT:			
			MOV		KB_LED,A
			RET
			
//////////////////////////////////////////////////////////////////////
KEY_SCAN_MANAGE:
KB_SCAN_INITIAL:
			MOV		A,KB_ROW
			XOR		A,#0xFF
			JBS		STTS,Z,NO_KEY_PRESS
BEGIN_SCAN:
//CHANGE IO CONTROL
			MOV		A,#IOCA
			MOV		IAP1,A
			NOP
			MOV		A,#0xFF
			MOV		IAC1,A
			
			MOV		A,#IOCD
			MOV		IAP1,A
			NOP
			MOV		A,#0b00010000
			MOV		IAC1,A
			
			MOV		A,#IOCE
			MOV		IAP1,A
			NOP
			MOV		A,#0xFF
			MOV		IAC1,A
			
			BC		KB_COLUMN2,5
//CHANGE IO CONTROL
			
			CALL	DELAY
			
			MOV		PHANTOM_K_BUF1,A
			MOV		PHANTOM_K_BUF2,A
			MOV		PHANTOM_K_BUF3,A
			MOV		PHANTOM_K_BUF4,A
			
			MOV		A,#0x01
			MOV		KTEMP1,A
			MOV		A,KB_ROW
			XOR		A,#0xFF
			JBS		STTS,Z,SCAN_NEXT_COL0
			CALL	HAVE_KEY_PRESSED
SCAN_NEXT_COL0:
//CHANGE IO CONTROL
			BS		KB_COLUMN2,5

			MOV		A,#IOCD
			MOV		IAP1,A
			NOP
			MOV		A,#0b00100000
			MOV		IAC1,A
			
			BC		KB_COLUMN2,4
//CHANGE IO CONTROL
			
			CALL	DELAY
			
			MOV		A,#0x08
			ADD		KTEMP1,A
			MOV		A,KB_ROW
			XOR		A,#0xFF
			JBS		STTS,Z,SCAN_NEXT_COL1
			CALL	HAVE_KEY_PRESSED
SCAN_NEXT_COL1:
//CHANGE IO CONTROL
			BS		KB_COLUMN2,4
			
			MOV		A,#IOCD
			MOV		IAP1,A
			NOP
			MOV		A,#0b00110000
			MOV		IAC1,A
			
			MOV		A,#0xFF
			MOV		KB_B_IND0,A
			MOV		KB_B_IND1,A
			BC		STTS,C
//CHANGE IO CONTROL
SCAN_NEXT_COL2:
//CHANGE IO CONTROL
			RRC		KB_B_IND1,1
			RRC		KB_B_IND0,1

			MOV		A,#IOCA
			MOV		IAP1,A
			NOP
			MOV		A,KB_B_IND0
			MOV		IAC1,A
			MOV		KB_COLUMN0,A

			MOV		A,#IOCE
			MOV		IAP1,A
			NOP
			MOV		A,KB_B_IND1
			MOV		IAC1,A
			MOV		KB_COLUMN1,A
//CHANGE IO CONTROL
			
			CALL	DELAY

			MOV		A,#0x08
			ADD		KTEMP1,A
			MOV		A,KB_ROW
			XOR		A,#0xFF
			JBS		STTS,Z,SCAN_NEXT_COL3
			CALL	HAVE_KEY_PRESSED
SCAN_NEXT_COL3:
			BS		STTS,C
//CHANGE IO CONTROL
			JBS		KB_B_IND0,0,SCAN_NEXT_COL2
			MOV		A,#IOCA
			MOV		IAP1,A
			NOP
			NOP
			CLR		IAC1
			
			MOV		A,#IOCE
			MOV		IAP1,A
			NOP
			NOP
			CLR		IAC1
			
			MOV		A,#IOCD
			MOV		IAP1,A
			NOP
			MOV		A,#0b00000000
			MOV		IAC1,A
//CHANGE IO CONTROL
KEYSCAN_LOOP_END:
			MOV		A,#0x60-1
			MOV		IAP1,A
			MOV		A,KB_STORE1
			XOR		A,KB_CONFIRM1
			CALL	CHKSTORE_KEEP_OR_CLEAR0
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			
			MOV		A,KB_STORE2
			XOR		A,KB_CONFIRM2
			CALL	CHKSTORE_KEEP_OR_CLEAR0
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CALL	CHKSTORE_KEEP_OR_CLEAR
			CLR		KB_STORE1
			CLR		KB_STORE2
STORE_CHK_LOOP:		
			ZCHK	IAC1
			JBS		STTS,Z,STORE_CHK_NEXT
			CALL	KB_STORE_CONFIRM_CHK
			JBS		IAP1,3,HIGH_STORE_CHK
			OR		KB_STORE1,A
			JMP		STORE_CHK_NEXT
HIGH_STORE_CHK:			
			OR		KB_STORE2,A
STORE_CHK_NEXT:
			DEC		IAP1
			JBS		STTS,DC,STORE_CHK_LOOP
STORE_CHK_END:			
			JBS		KB_FLAG,ERROR_KEY,SEND_ERROR_KEYM
			ZCHK	KB_CONFIRM1
			JBC		STTS,Z,CHK_KEY_PRESS
			ZCHK	KB_CONFIRM2
			JBC		STTS,Z,CHK_KEY_PRESS
			JMP		KEY_SCAN_END
			
NO_KEY_PRESS:
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY
			CALL	DELAY			
			CALL	DELAY		;20
			
			MOV		A,#0x00
			OR		A,KB_TEMP1
			OR		A,KB_TEMP2
			OR		A,KB_TEMP3
			OR		A,KB_TEMP4
			OR		A,KB_TEMP5
			OR		A,KB_TEMP6
			OR		A,KB_TEMP7			
			JBC		STTS,Z,OLDKEY_RELEASE
NO_KEY_PRESS0:			
			CLR		KB_CONFIRM1
			CLR		KB_CONFIRM2
			CLR		KB_STORE1
			CLR		KB_STORE2
			CALL	ALL_KEY_NCTEMP_FILLIN0
KEY_SCAN_END:
			MOV		A,#0x00
			MOV		KB_COLUMN0,A
			MOV		KB_COLUMN1,A
			BC		KB_COLUMN2,4
			BC		KB_COLUMN2,5
			RET
			
OLDKEY_RELEASE:
			MOV		A,#0x00
			CALL	ALL_KB_TEMP_FILLIN
			BS		KB_FLAG,SEND_KEY_WORK
		
			JMP		NO_KEY_PRESS0

CHKSTORE_KEEP_OR_CLEAR0:
			MOV		KTEMP1,A						
CHKSTORE_KEEP_OR_CLEAR:
			INC		IAP1
			RRC		KTEMP1,1
			JBC		STTS,C,KEEP_THIS_STORE
			CLR		IAC1
KEEP_THIS_STORE:
			RET
			
SEND_ERROR_KEYM:
			CLR		KB_TEMP1
			MOV		A,#0x01
			CALL	ALL_KB_TEMP_FILLIN0
			BC		KB_FLAG,ERROR_KEY
			JMP		NO_KEY_PRESS0
			
ALL_KB_TEMP_FILLIN:
			MOV		KB_TEMP1,A
ALL_KB_TEMP_FILLIN0:
			MOV		KB_TEMP2,A
			MOV		KB_TEMP3,A
			MOV		KB_TEMP4,A
			MOV		KB_TEMP5,A
			MOV		KB_TEMP6,A
			MOV		KB_TEMP7,A
			RET

ALL_KEY_NCTEMP_FILLIN0:
			CLR		KEY_NCTEMP01
			CLR		KEY_NCTEMP02
			CLR		KEY_NCTEMP03
			CLR		KEY_NCTEMP04
			CLR		KEY_NCTEMP05
			CLR		KEY_NCTEMP06
			CLR		KEY_NCTEMP07
			CLR		KEY_NCTEMP08
			CLR		KEY_NCTEMP09
			CLR		KEY_NCTEMP10
			CLR		KEY_NCTEMP11
			CLR		KEY_NCTEMP12
			CLR		KEY_NCTEMP13
			CLR		KEY_NCTEMP14
			CLR		KEY_NCTEMP15
			CLR		KEY_NCTEMP16
			RET
			
HAVE_KEY_PRESSED:
			BC		KB_FLAG,CHK_PHANTOM_KEY
			BC		KB_FLAG,SAME_COLUMN
			MOV		KEY_PRESS,A
			JBC		KEY_PRESS,0,NEXT_SCAN_BIT_CHK0
			CALL	CHK_CONFIRM_PKEY
NEXT_SCAN_BIT_CHK0:	
			INC		KTEMP1
			JBC		KEY_PRESS,1,NEXT_SCAN_BIT_CHK1
			CALL	CHK_CONFIRM_PKEY
NEXT_SCAN_BIT_CHK1:	
			INC		KTEMP1
			JBC		KEY_PRESS,2,NEXT_SCAN_BIT_CHK2
			CALL	CHK_CONFIRM_PKEY
NEXT_SCAN_BIT_CHK2:	
			INC		KTEMP1
			JBC		KEY_PRESS,3,NEXT_SCAN_BIT_CHK3
			CALL	CHK_CONFIRM_PKEY
NEXT_SCAN_BIT_CHK3:	

⌨️ 快捷键说明

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