📄 kb_hub.dt
字号:
; ============================================================
; 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 + -