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

📄 key2.lst

📁 82K96E/82M99E开发的USB键盘接收端DEMO程序源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
"File: KEY2.ASM      Holtek Cross-Assembler  Version 2.86      Page 1


   1  0000              include         ht82k96e.inc


   2  0000              ;include			usbrf.inc
   3  0000              ;include			usbfifo.inc
   4  0000              include				keyequ.inc


   5  0000              
   6  0000              
   7  0000              
   8  0000              ;**************************************************************************************
   9  0000              Scaninc				equ				pac
  10  0000              Scanin				equ				pa
  11  0000              scanout1C_adr		equ				15h
  12  0000              ScanOut1C			equ				pbc
  13  0000              ScanOut1			equ				pb
  14  0000              scanout2C_adr		equ				17h
  15  0000              ScanOut2C			equ				pcc
  16  0000              ScanOut2			equ				pc
  17  0000                  Scan2_Mask  	EQU     		0F0H		;pc4~7
  18  0000              scanout3C_adr		equ				19h
  19  0000              ScanOut3C			equ				pdc
  20  0000              ScanOut3			equ				pd
  21  0000              
  22  0000              LED_PORT_c			equ				pcc
  23  0000              led_port			equ				pc			;pc1~3, Scrl, Num, Cap
  24  0000              	LED_Mask    	EQU     0FH	
  25  0000                  @LED_Num    	EQU     2               ; Num Lock LED
  26  0000                  @LED_Caps   	EQU     4               ; Caps Lock LEd
  27  0000                  @LED_Scrl   	EQU     1               ; Scroll Lock LED
  28  0000              	led_num			equ		pc.1
  29  0000              	led_cap			equ		pc.2
  30  0000              	led_scrl		equ		pc.3		
  31  0000              	led_num_c		equ		pcc.1
  32  0000              	led_cap_c		equ		pcc.2
  33  0000              	led_scrl_C		equ		pcc.3		
  34  0000              
  35  0000              
  36  0000              ;KB_LED        
  37  0000              @Num_bit      		EQU     0               ; Num Lock LED
  38  0000              @Cap_bit     		EQU     1               ; Caps Lock LEd
  39  0000              @Scrl_bit     		EQU     2               ; Scroll Lock LED
  40  0000              
  41  0000              DEBOUNCE				equ				20H
  42  0000              REPORT_KB_SIZE			equ				8
  43  0000              end_of_ScanLines		equ				20
  44  0000              USB_REG_BANK			equ				1
  45  0000              ;*************************************************************************
  46  0000              
  47  0000              key_var			.section		'data'
  48  0000  00          key_mdfb		db			?
  49  0001  00          key_rsvb		db			?
  50  0002  00          key_code1b		db			?
  51  0003  00          key_code2b		db			?
  52  0004  00          key_code3b		db			?
  53  0005  00          key_code4b		db			?
  54  0006  00          key_code5b		db			?
  55  0007  00          key_code6b		db			?
"File: KEY2.ASM      Holtek Cross-Assembler  Version 2.86      Page 2

  56  0008  00          key_buf_end		db			?
  57  0009  00          indexbuf		db			?
  58  000A  00          buff_index		db			?
  59  000B  00          scanlineno		db			?
  60  000C  00          currentstate	db			?
  61  000D  00          currentstate1	db			?
  62  000E  0014[       STATE_BUF_BEG   		db     	20 dup(?)			;the buffer for keyboard scan line
            00
            ]
  63  0022  00          STATE_BUF_END			db		?
  64  0023  00          DebounceCounter 		db		?
  65  0024  00          scantemp				db		?
  66  0025  00          GhostScanLine   		db     	?
  67  0026  00          BitMap          		db     	?	
  68  0027  00          ChangeKeyMap    		db		?	
  69  0028  00          KeyNo           		db		?	
  70  0029  00          KeyBit          		db		?		
  71  002A  00          temp1					db		?	
  72  002B  00          KB_LED					db		?
  73  002C              
  74  002C  00          bPhantom		dbit
  75  002C              bKB_KeyUpt		dbit
  76  002D              
  77  002D              public			bKB_KeyUpt
  78  002D              public			kb_led
  79  002D              
  80  002D              
  81  002D              ;public			key_mdfb		
  82  002D              ;public			key_rsvb		 
  83  002D              ;public			key_code1b		 
  84  002D              ;public			key_code2b		 
  85  002D              ;public			key_code3b		 
  86  002D              ;public			key_code4b		 
  87  002D              ;public			key_code5b		 
  88  002D              ;public			key_code6b		 
  89  002D              ;public			key_buf_end
  90  002D              ;public			buff_index		 
  91  002D              ;public			indexbuf		 
  92  002D              ;public			scanlineno		 
  93  002D              ;public			currentstate	 
  94  002D              ;public			currentstate1	 
  95  002D              ;public			STATE_BUF_BEG   		;the buffer for keyboard scan line
  96  002D              ;public			STATE_BUF_END			
  97  002D              ;public			DebounceCounter 		
  98  002D              ;public			scantemp				
  99  002D              ;public			GhostScanLine   		
 100  002D              ;public			BitMap          		
 101  002D              ;public			ChangeKeyMap    			
 102  002D              ;public			KeyNo           			
 103  002D              ;public			KeyBit          				
 104  002D              ;public			temp1						
 105  002D              ;public			KB_LED
 106  002D              ;public			key_rpt_cnt
 107  002D              
 108  002D              
 109  002D              ;*************************************************************************
 110  002D              extern			exit_of_examine_kb_state	:near
 111  002D              
 112  002D              ;extern			KEY_MdfB      	:byte		
 113  002D              ;extern			KEY_RsvB      	:byte	
"File: KEY2.ASM      Holtek Cross-Assembler  Version 2.86      Page 3

 114  002D              ;extern			KEY_Code1B     	:byte		
 115  002D              ;extern			KEY_Code2B     	:byte		
 116  002D              ;extern			KEY_Code3B     	:byte		
 117  002D              ;extern			KEY_Code4B     	:byte		
 118  002D              ;extern			KEY_Code5B     	:byte		
 119  002D              ;extern			KEY_Code6B     	:byte		
 120  002D              ;extern			KEY_BUF_END		:byte
 121  002D              
 122  002D              extern			FIFO_OUT1		:byte
 123  002D              extern			fifo_out2		:byte
 124  002D              extern			fifo_out3		:byte
 125  002D              extern			fifo_out4		:byte
 126  002D              extern			fifo_out5		:byte
 127  002D              extern			fifo_out6		:byte
 128  002D              extern			fifo_out7		:byte
 129  002D              extern			fifo_out8		:byte
 130  002D              extern			FIFO_SendLen	:byte
 131  002D              
 132  002D              
 133  002D              ;extern			BUFF_Index		:byte
 134  002D              ;extern			IndexBuf		:byte
 135  002D              ;extern			scanlineno		:byte
 136  002D              ;extern			CurrentState	:byte
 137  002D              ;extern			CurrentState1	:byte
 138  002D              ;extern			STATE_BUF_BEG	:byte
 139  002D              ;extern			DebounceCounter	:byte
 140  002D              ;extern			ScanTemp		:byte
 141  002D              ;extern			GhostScanLine	:byte
 142  002D              ;extern			BitMap			:byte
 143  002D              ;extern			ChangeKeyMap	:byte
 144  002D              ;extern			KeyNo			:byte
 145  002D              ;extern			Keybit			:byte
 146  002D              ;extern			temp1			:byte
 147  002D              ;
 148  002D              
 149  002D              
 150  0000              kb_code			.section		'code'
 151  0000              ;----------------------------------------------------------------------------
 152  0000              ;scan key, get data, parsing & send data
 153  0000              ;maybe need check suspend
 154  0000              examine_kb_state:
 155  0000              ;				clr		key_modify
 156  0000              
 157  0000              ;				clr		break_key
 158  0000  0001                        CLR     WDT
 159  0001                  ;set scan line to low
 160  0001                              ;Get the port and bit no. of scan line
 161  0001  0700     R                  MOV     A,ScanLineNo      	;
 162  0002  2000     R                  CALL    GetScanPortAndBit   ;Output: PortNo & BitNo
 163  0003                  ;Delay
 164  0003  0F0A                        MOV     A,10                ;Delay 30 intruction time
 165  0004  2000     R                  CALL    DelayNInst          ;   about 20 us in 6 M sysclk
 166  0005                  ;get key state of scan line
 167  0005  0712                        MOV     A,ScanIn          	;Get key state
 168  0006  0080     R                  MOV     CurrentState,A    	;Save key state
 169  0007              
 170  0007  0700     R                  MOV     A,ScanLineNo      	;get current line state pointer
 171  0008  0B00     R                  ADD     A,OFFSET STATE_BUF_BEG    
 172  0009  0081                        MOV     MP0,A               ;
 173  000A  0700                        MOV     A,R0                ;get current line state data
"File: KEY2.ASM      Holtek Cross-Assembler  Version 2.86      Page 4

 174  000B  0400     R                  XOR     A,CurrentState    	;Whether current line no change ?
 175  000C  3D0A                        SZ      Z                   ;No
 176  000D  2800     R                  JMP     ScanOneRowOK        ;Yes
 177  000E                  ;first or not
 178  000E  1080     R                  SZ      DebounceCounter   	;first ?
 179  000F  2800     R                  JMP     NotFirstKeyChanged  ;No
 180  0010              FirstKeyChanged:                            ;Yes
 181  0010  1F00     R                  CLR     DebounceCounter   	;Reset DebounceCounter to 0
 182  0011  1480     R                  INC     DebounceCounter   	;Update debounce counter
 183  0012  0700     R                  MOV     A,CurrentState    	;save current key state to
 184  0013  0080     R                  MOV     CurrentState1,A   	;  template buffer
 185  0014  2800     R                  JMP     Exit_Scan_Keyboard  ;to next scan
 186  0015              NotFirstKeyChanged:
 187  0015  0700     R                  MOV     A,CurrentState    	;Is any key state changed ?
 188  0016  0400     R                  XOR     A,CurrentState1   	;
 189  0017  390A                        SNZ     Z                   ;
 190  0018  2800     R                  JMP     FirstKeyChanged     ;Yes
 191  0019                                                          ;No
 192  0019  1480     R                  INC     DebounceCounter   	;Update debounce counter
 193  001A  0F20                        MOV     A,DEBOUNCE          ;>= debounce time ?
 194  001B  0200     R                  SUB     A,DebounceCounter 	;
 195  001C  3C0A                        SZ      C                   ;
 196  001D  2800     R                  JMP     Exit_Scan_Keyboard  ;No
 197  001E  1F00     R                  CLR     DebounceCounter   	;Yes: debounce has finished and
 198  001F                                                          ;     reinitilize
 199  001F              
 200  001F              
 201  001F              ;----------------------------------------------------------------------------
 202  001F              ;Debounce finished
 203  001F              ;check Phantom key
 204  001F              CheckPhantom:
 205  001F  0001                        CLR     WDT
 206  0020                  ;How many key pressed ?
 207  0020  0F08                        MOV     A,08H       		;Scan in numbers = 8
 208  0021  0080     R                  MOV     Temp1,A    			;
 209  0022  1F00     R                  CLR     ScanTemp  			;initial number of keys pressed to 0
 210  0023  0700     R                  MOV     A,CurrentState    	;current key pressed state
 211  0024              CheckPhantomLp:
 212  0024  1B85                        RRC     ACC             	;check every column by right rotated
 213  0025  380A                        SNZ     C               	;key pressed ?
 214  0026  1480     R                  INC     ScanTemp      		;Yes: Update the number of keys pressed
 215  0027  1780     R                  SDZ     Temp1          		;
 216  0028  2800     R                  JMP     CheckPhantomLp  	;
 217  0029  0700     R                  MOV     A,ScanTemp    		;ScanTemp = the number of keys pressed
 218  002A  0EFE                        AND     A,0FEH          	;Key pressed numbers >= 2 ?
 219  002B  3D0A                        SZ      Z               	;
 220  002C  2800     R                  JMP     CheckPhantomOK  	;No (Have phantom key is impossible)
 221  002D                                                      	;Yes (Maybe have phantom key)
 222  002D                  ;Scan line to found phantom key
 223  002D  1F00     R                  CLR     GhostScanLine 		;scan from line 0
 224  002E              GhostLoop:
 225  002E  0001                        CLR     WDT
 226  002F                  ;Whether phost scan line is equal to current scan line ?
 227  002F  0700     R                  MOV     A,ScanLineNo
 228  0030  0400     R                  XOR     A,GhostScanLine
 229  0031  3D0A                        SZ      Z
 230  0032  2800     R                  JMP     NextLine            ;Yes
 231  0033                  ;set scan line to low
 232  0033                              ;Get the port and bit no. of scan line
 233  0033  0700     R                  MOV     A,GhostScanLine   	;

⌨️ 快捷键说明

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