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

📄 henhao.asm

📁 此代码是一个键盘程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;-------------------------------------

	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 + -