📄 henhao.asm
字号:
;-------------------------------------
JB blnShiftKeyDown,CH5
MOV DPTR,#ASCIITABLE_UP
MOV A,CodeReg_1
MOVC A,@A+DPTR
AJMP CH10
CH5:
MOV DPTR,#ASCIITABLE_DOWN
MOV A,CodeReg_1
MOVC A,@A+DPTR
AJMP CH10
;--------------------------------------
CH6:
JB blnNumLockKey,ISDIGITAL
CH7:
MOV R2,CodeReg_1
CJNE R2,#74,CH8
MOV A,#45
AJMP CH10
CH8:
MOV R2,CodeReg_1
CJNE R2,#78,CH9
MOV A,#43
SJMP CH10
CH9:
JB blnShiftKeyDown,CH11
MOV A,#0
SJMP CH10
ISDIGITAL:
JB blnShiftKeyDown,CH7
CH11:
MOV A,CodeReg_1
CLR c
SUBB A,#71
INC A
INC A
MOVC A,@A+PC
SJMP CH10
DB 55,56,57,45,52,53,54,43,49,50,51,48,46
;**********************************************
CH10:
MOV CodeReg_2,A
ACALL CAPSREVISE
RET
CAPSREVISE:
JNB blnCapsLockKey, CAP1
MOV A,CodeReg_2
CJNE A,#65,CAP2
CAP2:
JC CAP1
CJNE A,#91,CAP3
CAP3:
JNC CAP4
;/********
ADD A,#32
MOV CodeReg_2,A
SJMP CAP1
;/********
CAP4:
CJNE A,#123,CAP5
CAP5:
JNC CAP1
CJNE A,#97,CAP6
CAP6:
JC CAP1
;/********
CLR C
SUBB A,#32
MOV CodeReg_2,A
CAP1:
RET
ASCIITABLE_UP:
; 0 1 2 3 4 5 6 7 8 9
DB 000,027,049,050,051,052,053,054,055,056 ;0
DB 057,048,045,061,008,009,113,119,101,114 ;1
DB 116,121,117,105,111,112,091,093,013,000 ;2
DB 097,115,100,102,103,104,106,107,108,059 ;3
DB 039,096,000,092,122,120,099,118,098,110 ;4
DB 109,044,046,047,000,000,000,032,000,000 ;5
DB 000,000,000,000,000,000,000,000,000,000 ;6
DB 000 ;Break
ASCIITABLE_DOWN:
; 0 1 2 3 4 5 6 7 8 9
DB 000,027,033,064,035,036,037,094,038,042 ;0 K,ESC,!,@,#,$,%,^,&,*
DB 040,041,095,043,008,009,081,087,069,082 ;1 (,),_,+,K,TAB,Q,W,E,R
DB 084,089,085,073,079,080,123,125,013,000 ;2
DB 065,083,068,070,071,072,074,075,076,058 ;3
DB 034,126,000,124,090,088,067,086,066,078 ;4
DB 077,060,062,063,000,000,000,032,000,000 ;5
DB 000,000,000,000,000,000,000,000,000,000 ;6
DB 000 ;Break
;*********************************************
;Store the data to FIFO buffer
FIFO_STORE:
MOV A,FifoBufferEnd
CJNE A,FifoBufferBegin,FIFO_STORE_1
JB blnFifoFull,FIFO_STORE_4
SJMP FIFO_STORE_2
FIFO_STORE_1:
CLR blnFifoFull
CLR blnFifoNull
FIFO_STORE_2:
MOV R1,FifoBufferEnd
MOV @R1,CodeReg_1
INC FifoBufferEnd
MOV R1,FifoBufferEnd
MOV @R1,CodeReg_2
INC FifoBufferEnd
MOV A,FifoBufferEnd
CLR C
SUBB A,#FifoBuffer
CJNE A,#FifoBufferLength,FIFO_STORE_3
MOV FifoBufferEnd,#FifoBuffer
FIFO_STORE_3:
CLR blnFifoNull
MOV A,FifoBufferEnd
CJNE A,FifoBufferBegin,FIFO_STORE_4
CLR bitOVERFLOW
SETB blnFifoFull
FIFO_STORE_4:
RET
;*********************************************
READFIFO:
JNB blnOddByte,READFIFO_5
MOV P1,TmpOddByte
CLR blnOddByte
SETB bitD74
CLR bitCLK74
SETB bitCLK74
SETB bitOVERFLOW
RET
READFIFO_5:
MOV A,FifoBufferBegin
CJNE A,FifoBufferEnd,READFIFO_1
JB blnFifoNull,READFIFO_4
SJMP READFIFO_2
READFIFO_1:
CLR blnFifoFull
CLR blnFifoNull
READFIFO_2:
MOV R1,FifoBufferBegin
MOV P1,@R1
INC FifoBufferBegin
MOV R1,FifoBufferBegin
MOV TmpOddByte,@R1
INC FifoBufferBegin
SETB bitOVERFLOW
SETB blnOddByte
SETB bitD74
CLR bitCLK74
SETB bitCLK74
MOV A,FifoBufferBegin
CLR C
SUBB A,#FifoBuffer
CJNE A,#FifoBufferLength,READFIFO_3
MOV FifoBufferBegin,#FifoBuffer
READFIFO_3:
CLR blnFifoFull
MOV A,FifoBufferBegin
CJNE A,FifoBufferEnd,READFIFO_4
SETB blnFifoNull
READFIFO_4:
RET
;**********************************************
COMMAND:
CLR EX0
CLR P3.2
MOV R3,#45
DJNZ R3,$
CLR bitDAT
MOV R3,#45
DJNZ R3,$
SETB P3.2
MOV R2,#1
MOV R4,#8
COMMAND_2:
JB P3.2,$
RRC A
MOV bitDAT,C
JNC COMMAND_1
INC R2
COMMAND_1:
JNB P3.2,$
DJNZ R4,COMMAND_2
JB P3.2,$
MOV A,R2
RRC A
MOV bitDAT,C
JNB P3.2,$
JB P3.2,$
SETB bitDAT
SETB P3.2
SETB EX0
RET
;******************************************
LEDCTRL:
MOV A,20H
ANL A,#7
MOV B,A
MOV A,#0EDH
LCALL COMMAND
MOV R5,#025H
DELAY_LED:
MOV R6,#0DDH
DJNZ R6,$
DJNZ R5,DELAY_LED
MOV A,B
LCALL COMMAND
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
FINDVIKEYCODE:
MOV A,gByteCounter
CJNE A,#01H,JUDGE_A ;One byte?
LCALL PROCESS_1
LJMP JUDGE_G
JUDGE_A:
MOV A,gByteCounter
XRL A,#02H
JNZ JUDGE_B
LCALL PROCESS_2
LJMP JUDGE_G
JUDGE_B:
MOV A,gByteCounter
XRL A,#03H
JNZ JUDGE_C
LCALL PROCESS_3
LJMP JUDGE_G
JUDGE_C:
MOV A,gByteCounter
XRL A,#04H
JNZ JUDGE_D
LCALL PROCESS_4
LJMP JUDGE_G
JUDGE_D:
MOV A,gByteCounter
XRL A,#06H
JNZ JUDGE_E
LCALL PROCESS_5
LJMP JUDGE_G
JUDGE_E:
MOV A,gByteCounter
XRL A,#08H
JNZ JUDGE_F
LCALL PROCESS_6
LJMP JUDGE_G
JUDGE_F:
MOV A,#0FFH
JUDGE_G:
RET
;*****************************************
PROCESS_1:
MOV CodeReg_1 ,#0FFH
MOV A,RestoreBuffer
XRL A,#77H ;Is the key NumLockKey?
JNZ LED_A
CPL blnNumLockKey
LED_A:
MOV A,RestoreBuffer
XRL A,#58H ;Is the key CapsLockKey
JNZ LED_B
CPL blnCapsLockKey
LED_B:
MOV A,RestoreBuffer
XRL A,#7EH
JNZ FIND
CPL bitStrollLockKey
FIND:
MOV R7,RestoreBuffer ;Break out the data to A
MOV A,R7
CLR C ;Clean the C
SUBB A,#68H
JC FIND_1
MOV R1,#RestoreBuffer
JNB blnNumLockKey,MULTI_PLY
FIND_1:
MOV R7,RestoreBuffer ;Break out the data to A
MOV A,R7
CLR C ;Clean the C
SUBB A,#90H
JNC INPUTERROR
MOV A,R7
LCALL FINDKEYCODE
RET
INPUTERROR:
MOV A,#0FFH
RET
MULTI_PLY :
MOV A,@R1
MOV DPTR,#KeyCodeTable
MOV R6,#0
MOV R7,A
MULTI_1:
MOV A,R6
MOVC A,@A+DPTR
JZ INPUTERROR
XRL A,R7
JZ MULTI_2
INC R6
SJMP MULTI_1
MULTI_2:
MOV A,R6
LCALL FindMultiKeyCode
MOV CodeReg_2,A
RET
KeyCodeTable:
DB 69H,6BH,6CH,70H,71H,72H,73H,74H,75H,76H,77H,79H,7AH,7BH,7CH,7DH
FindMultiKeyCode:
INC A
MOVC A,@A+PC
RET
DB 035,037,036,045,046,040,012,039,038,027,144,107,034,109,106,033
;**********************************
PROCESS_2:
MOV A,RestoreBuffer
XRL A,#0F0H ;Is the first byte 0F0H?
JZ PROSSE_F0
MOV A,RestoreBuffer
XRL A,#0E0H ;Is the first byte 0E0H?
JZ PRESSE_E0
MOV A,#0FFH
RET
PRESSE_E0:
MOV CodeReg_1 ,#0FFH
MOV R1,#RestoreBuffer+1
LCALL E0_1
RET
;-------------------------------
;The first byte is 0F0H
PROSSE_F0:
MOV CodeReg_1 ,#0
MOV R1,#RestoreBuffer
INC R1
MOV A,@R1
CLR C
SUBB A,#68H
JC PROSSE_F0_2
JNB blnNumLockKey,MULTI_PLY
PROSSE_F0_2:
MOV A,@R1
LCALL FindKeyCode
RET
PROSSE_F0_1:
MOV A,#0FFH
RET
;**********************************
PROCESS_3:
MOV CodeReg_1,#0
MOV R1,#RestoreBuffer+2
LCALL E0_1
RET
;*****************************************
PROCESS_4:
MOV CodeReg_1,#0FFH
MOV R1,#RestoreBuffer+3
LCALL E0_1
RET
;*******************************************
PROCESS_5:
MOV CodeReg_1,#0H
MOV R1,#RestoreBuffer+2
LCALL E0_1
RET
;******************************************
PROCESS_6:
MOV CodeReg_1,#0FFH
MOV A,#19
RET
;------------------------------------------------
FindKeyCode:
INC A
MOVC A,@A+PC
RET
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
DB 0FFH,078H,0FFH,074H,072H,070H,071H,07BH,0FFH,079H,077H,075H,073H,009H,0C0H,0FFH;0
DB 0FFH,012H,010H,0FFH,011H,051H,031H,0FFH,0FFH,0FFH,05AH,053H,041H,057H,032H,0FFH;1
DB 0FFH,043H,058H,044H,045H,034H,033H,0FFH,0FFH,020H,056H,046H,054H,052H,035H,0FFH;2
DB 0FFH,04EH,042H,048H,047H,059H,036H,0FFH,0FFH,0FFH,04DH,04AH,055H,037H,038H,0FFH;3
DB 0FFH,0BCH,04BH,049H,04FH,030H,039H,0FFH,0FFH,0BEH,0BFH,04CH,0BAH,050H,0BDH,0FFH;4
DB 0FFH,0FFH,0DEH,0FFH,0DBH,0BBH,0FFH,0FFH,014H,010H,00DH,0DDH,0DCH,0DCH,0FFH,0FFH;5
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,008H,0FFH,0FFH,061H,0FFH,064H,067H,0FFH,0FFH,0FFH;6
DB 060H,06EH,062H,065H,066H,068H,01BH,090H,07AH,06BH,063H,06DH,06AH,069H,091H,0FFH;7
DB 0FFH,0FFH,0FFH,076H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;8
;***********************************************************8
E0_1:
MOV A,@R1
MOV DPTR,#TWOBYTEKEYTABLE_1
MOV R6,#0
MOV R7,A
E0_2:
MOV A,R6
MOVC A,@A+DPTR
JZ E0_4
XRL A,R7
JZ E0_3
INC R6
SJMP E0_2
E0_3:
MOV A,R6
LJMP FINDTWOBYTEKEYCODE
E0_4:
MOV A,#0FFH
RET
TWOBYTEKEYTABLE_1:
DB 11H,14H,1FH,27H,2FH,4AH,5AH,69H,6BH,6CH,70H,71H,72H,74H,75H,7AH,7CH,7DH,0H
FindTWOBYTEKEYCODE:
INC A
MOVC A,@A+PC
RET
DB 12H,11H,5BH,5CH,5DH,6FH,6CH,23H,25H,24H,2DH,2EH,28H,27H,26H,22H,2AH,21H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -