📄 keyboard2.asm
字号:
; 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 + -