亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? key2.asm

?? 基于HT82K96E的usb鼠標實現源程序
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
include         ht82k96e.inc
;include			usbrf.inc
;include			usbfifo.inc
include				keyequ.inc



;**************************************************************************************
Scaninc				equ				pac
Scanin				equ				pa
scanout1C_adr		equ				15h
ScanOut1C			equ				pbc
ScanOut1			equ				pb
scanout2C_adr		equ				17h
ScanOut2C			equ				pcc
ScanOut2			equ				pc
    Scan2_Mask  	EQU     		0F0H		;pc4~7
scanout3C_adr		equ				19h
ScanOut3C			equ				pdc
ScanOut3			equ				pd

LED_PORT_c			equ				pcc
led_port			equ				pc			;pc1~3, Scrl, Num, Cap
	LED_Mask    	EQU     0FH	
    @LED_Num    	EQU     2               ; Num Lock LED
    @LED_Caps   	EQU     4               ; Caps Lock LEd
    @LED_Scrl   	EQU     1               ; Scroll Lock LED
	led_num			equ		pc.1
	led_cap			equ		pc.2
	led_scrl		equ		pc.3		
	led_num_c		equ		pcc.1
	led_cap_c		equ		pcc.2
	led_scrl_C		equ		pcc.3		


;KB_LED        
@Num_bit      		EQU     0               ; Num Lock LED
@Cap_bit     		EQU     1               ; Caps Lock LEd
@Scrl_bit     		EQU     2               ; Scroll Lock LED

DEBOUNCE				equ				20H
REPORT_KB_SIZE			equ				8
end_of_ScanLines		equ				20
USB_REG_BANK			equ				1
;*************************************************************************

key_var			.section		'data'
key_mdfb		db			?
key_rsvb		db			?
key_code1b		db			?
key_code2b		db			?
key_code3b		db			?
key_code4b		db			?
key_code5b		db			?
key_code6b		db			?
key_buf_end		db			?
indexbuf		db			?
buff_index		db			?
scanlineno		db			?
currentstate	db			?
currentstate1	db			?
STATE_BUF_BEG   		db     	20 dup(?)			;the buffer for keyboard scan line
STATE_BUF_END			db		?
DebounceCounter 		db		?
scantemp				db		?
GhostScanLine   		db     	?
BitMap          		db     	?	
ChangeKeyMap    		db		?	
KeyNo           		db		?	
KeyBit          		db		?		
temp1					db		?	
KB_LED					db		?

bPhantom		dbit
bKB_KeyUpt		dbit

public			bKB_KeyUpt
public			kb_led


;public			key_mdfb		
;public			key_rsvb		 
;public			key_code1b		 
;public			key_code2b		 
;public			key_code3b		 
;public			key_code4b		 
;public			key_code5b		 
;public			key_code6b		 
;public			key_buf_end
;public			buff_index		 
;public			indexbuf		 
;public			scanlineno		 
;public			currentstate	 
;public			currentstate1	 
;public			STATE_BUF_BEG   		;the buffer for keyboard scan line
;public			STATE_BUF_END			
;public			DebounceCounter 		
;public			scantemp				
;public			GhostScanLine   		
;public			BitMap          		
;public			ChangeKeyMap    			
;public			KeyNo           			
;public			KeyBit          				
;public			temp1						
;public			KB_LED
;public			key_rpt_cnt


;*************************************************************************
extern			exit_of_examine_kb_state	:near

;extern			KEY_MdfB      	:byte		
;extern			KEY_RsvB      	:byte	
;extern			KEY_Code1B     	:byte		
;extern			KEY_Code2B     	:byte		
;extern			KEY_Code3B     	:byte		
;extern			KEY_Code4B     	:byte		
;extern			KEY_Code5B     	:byte		
;extern			KEY_Code6B     	:byte		
;extern			KEY_BUF_END		:byte

extern			FIFO_OUT1		:byte
extern			fifo_out2		:byte
extern			fifo_out3		:byte
extern			fifo_out4		:byte
extern			fifo_out5		:byte
extern			fifo_out6		:byte
extern			fifo_out7		:byte
extern			fifo_out8		:byte
extern			FIFO_SendLen	:byte


;extern			BUFF_Index		:byte
;extern			IndexBuf		:byte
;extern			scanlineno		:byte
;extern			CurrentState	:byte
;extern			CurrentState1	:byte
;extern			STATE_BUF_BEG	:byte
;extern			DebounceCounter	:byte
;extern			ScanTemp		:byte
;extern			GhostScanLine	:byte
;extern			BitMap			:byte
;extern			ChangeKeyMap	:byte
;extern			KeyNo			:byte
;extern			Keybit			:byte
;extern			temp1			:byte
;


kb_code			.section		'code'
;----------------------------------------------------------------------------
;scan key, get data, parsing & send data
;maybe need check suspend
examine_kb_state:
;				clr		key_modify

;				clr		break_key
                CLR     WDT
    ;set scan line to low
                ;Get the port and bit no. of scan line
                MOV     A,ScanLineNo      	;
                CALL    GetScanPortAndBit   ;Output: PortNo & BitNo
    ;Delay
                MOV     A,10                ;Delay 30 intruction time
                CALL    DelayNInst          ;   about 20 us in 6 M sysclk
    ;get key state of scan line
                MOV     A,ScanIn          	;Get key state
                MOV     CurrentState,A    	;Save key state

                MOV     A,ScanLineNo      	;get current line state pointer
                ADD     A,OFFSET STATE_BUF_BEG    
                MOV     MP0,A               ;
                MOV     A,R0                ;get current line state data
                XOR     A,CurrentState    	;Whether current line no change ?
                SZ      Z                   ;No
                JMP     ScanOneRowOK        ;Yes
    ;first or not
                SZ      DebounceCounter   	;first ?
                JMP     NotFirstKeyChanged  ;No
FirstKeyChanged:                            ;Yes
                CLR     DebounceCounter   	;Reset DebounceCounter to 0
                INC     DebounceCounter   	;Update debounce counter
                MOV     A,CurrentState    	;save current key state to
                MOV     CurrentState1,A   	;  template buffer
                JMP     Exit_Scan_Keyboard  ;to next scan
NotFirstKeyChanged:
                MOV     A,CurrentState    	;Is any key state changed ?
                XOR     A,CurrentState1   	;
                SNZ     Z                   ;
                JMP     FirstKeyChanged     ;Yes
                                            ;No
                INC     DebounceCounter   	;Update debounce counter
                MOV     A,DEBOUNCE          ;>= debounce time ?
                SUB     A,DebounceCounter 	;
                SZ      C                   ;
                JMP     Exit_Scan_Keyboard  ;No
                CLR     DebounceCounter   	;Yes: debounce has finished and
                                            ;     reinitilize


;----------------------------------------------------------------------------
;Debounce finished
;check Phantom key
CheckPhantom:
                CLR     WDT
    ;How many key pressed ?
                MOV     A,08H       		;Scan in numbers = 8
                MOV     Temp1,A    			;
                CLR     ScanTemp  			;initial number of keys pressed to 0
                MOV     A,CurrentState    	;current key pressed state
CheckPhantomLp:
                RRC     ACC             	;check every column by right rotated
                SNZ     C               	;key pressed ?
                INC     ScanTemp      		;Yes: Update the number of keys pressed
                SDZ     Temp1          		;
                JMP     CheckPhantomLp  	;
                MOV     A,ScanTemp    		;ScanTemp = the number of keys pressed
                AND     A,0FEH          	;Key pressed numbers >= 2 ?
                SZ      Z               	;
                JMP     CheckPhantomOK  	;No (Have phantom key is impossible)
                                        	;Yes (Maybe have phantom key)
    ;Scan line to found phantom key
                CLR     GhostScanLine 		;scan from line 0
GhostLoop:
                CLR     WDT
    ;Whether phost scan line is equal to current scan line ?
                MOV     A,ScanLineNo
                XOR     A,GhostScanLine
                SZ      Z
                JMP     NextLine            ;Yes
    ;set scan line to low
                ;Get the port and bit no. of scan line
                MOV     A,GhostScanLine   	;
                CALL    GetScanPortAndBit   ;Output: PortNo & BitNo
   ;get key state of scan line
                MOV     A,10                ;Delay 30 intruction time
                CALL    DelayNInst          ;   about 20 us in 6 M sysclk
                MOV     A,ScanIn          ;Get key state
                MOV     CurrentState1,A   	;Save key state
    ;check the same 0 value position between CurrentState and CurrentState1
    ;the 0 value of result means the same 0 value position
                OR      A,CurrentState
                MOV     BitMap,A          	;Save result to buffer
                XOR     A,0FFH              ;Have any 0 value ?
                SZ      Z                   ;
                JMP     NextLine            ;No
    ;How many 0 counts in BitMap          	;Yes
                MOV     A,08H
                MOV     ScanTemp,A
                CLR     ACC
BitMapCountLp:
                RRC     BitMap
                SNZ     C
                INC     ACC                 ;0 value counts
                SDZ     ScanTemp
                JMP     BitMapCountLp
                AND     A,0FEH              ;0 value counts >= 2 ?
                SNZ     Z                   ;
                JMP     FoundPhantom        ;Yes
                                            ;No
    ;-------- this block maybe not need ---------------------------------
    ;Whether CurrentState1 is equal to CurrentState ?             		;
    ;If no, phantom keys is found.                                    	;
                MOV     A,CurrentState                              	;
                XOR     A,CurrentState1                             	;
                SNZ     Z                                             	;
                JMP     FoundPhantom        ;No                       	;
    ;--------------------------------------------------------------------
;----------------------------------------------------------------------------

NextLine:
                INC     GhostScanLine     	;to scan next line
                MOV     A,end_of_ScanLines       	;End scan line ?
                XOR     A,GhostScanLine   	;
                SNZ     Z                   ;
                JMP     GhostLoop           ;No (Continue)
                JMP     CheckPhantomOK      ;Yes

;----------------------------------------------------------------------------
FoundPhantom:
;Get phantom key index & save to report buffer
                SZ      bPhantom
                JMP     Exit_Scan_Keyboard
                SET     bKB_KeyUpt    ;Key is changed
                SET     bPhantom      ;Found a phantom key
                JMP     Error_Exit_Keyboard
;----------------------------------------------------------------------------

CheckPhantomOK:
                CLR     WDT
                MOV     A,ScanLineNo      			;Get the buffer pointer of
                ADD     A,OFFSET STATE_BUF_BEG     	;   current scan line state
                MOV     MP0,A               		;
    ;found any changed
                MOV     A,CurrentState    	;Any key changed in current scan
                XOR     A,R0                ;  line
                MOV     ChangeKeyMap,A    	;
                CLR     KeyNo             	;bit counter
                MOV     A,80H               ;1000 0000b
                MOV     KeyBit,A          	;Set first bit to check
CheckChangeKeyLp:
                RL      KeyBit            	;Update check bit order
                RRC     ChangeKeyMap      	;check changed key bitmap
                SNZ     C                   ;changed ?
                JMP     NotChanged          ;No
                                            ;Yes

;Get key index from key index table and save it to keyboard buffer.
    ;Get scan line base address
				rla		ScanLineNo
				rl		acc
				rl		acc
                ADD     A,KeyNO           	;
                ADD     A,LOW KBIndexORG    ;
                CALL    GetKeyboardIndex    ;Get keyboard index code in ACC
                MOV     IndexBuf,A  		;Save keyboard index code to IndexBuf

                MOV     A,IndexBuf        	;Is modifier key ?
                SUB     A,0E0H              ;
                SNZ     C
                JMP     NotModifierKey
                MOV     A,IndexBuf        	;Is modifier key ?
                SUB     A,0E8H              ;
                SNZ     C
                JMP     ModifierKey

;Not a modifier key
NotModifierKey:
    ;Check press or release
                SNZ     CurrentState.0    	;press or release ?
                JMP     MakeCode            ;press

;				set		break_key
;release Code:
    ;to find the keyboard index in keyboard buffer and remove it
                CALL    RemoveKey           ;Remove ACC key index from
                                            ;   keyboard buffer, if found
                SNZ     Z                   ;Any one moved ?
            	JMP     NotChanged          ;No(means buffer still full)
                                           	;Don't check current line again
    ;to sort keyboard buffer
                CALL    SortKeyboardbuf     ;reorder all 0 value in keyboard
                JMP     UpdateState
MakeCode:
                MOV     A,BUFF_Index      	;keyboard buffer Full ?
                XOR     A,OFFSET KEY_BUF_END       ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕在线一区免费| 99久久精品99国产精品| 欧美日韩电影一区| 亚洲国产成人av网| 欧美疯狂做受xxxx富婆| 美女视频免费一区| 国产网站一区二区三区| 成人h动漫精品| 亚洲激情图片小说视频| 欧美精品在线一区二区三区| 美女网站视频久久| 久久精品夜色噜噜亚洲a∨| 99久久精品国产一区二区三区| 亚洲欧美日韩久久精品| 欧美一区二区网站| 国产69精品久久久久毛片| 亚洲婷婷在线视频| 欧美一区二区三区的| 国产乱子轮精品视频| 18欧美亚洲精品| 91 com成人网| 国产成人福利片| 亚洲国产精品一区二区尤物区| 91精品久久久久久蜜臀| 91精品在线免费| 国产精品中文欧美| 亚洲午夜在线视频| 国产亚洲一区二区三区四区| 色欧美日韩亚洲| 久久精品99国产精品日本| 中文字幕日韩精品一区 | 五月激情丁香一区二区三区| 欧美不卡123| 色婷婷一区二区三区四区| 秋霞电影网一区二区| 中文字幕一区二区5566日韩| 777亚洲妇女| 91小视频免费观看| 韩国女主播一区二区三区| 一区二区三区日韩欧美精品| 久久亚洲影视婷婷| 欧美丝袜丝交足nylons图片| 东方aⅴ免费观看久久av| 婷婷综合久久一区二区三区| 国产精品亲子伦对白| 69p69国产精品| 日本精品一区二区三区高清| 国产精品天美传媒沈樵| 欧美色图免费看| 国产一区二区精品在线观看| 亚洲自拍偷拍网站| 国产欧美日韩麻豆91| 欧美精品99久久久**| 97超碰欧美中文字幕| 美腿丝袜亚洲一区| 一区二区三区在线播| 中文字幕一区二区三区在线观看| 欧美日韩视频不卡| 99久久国产免费看| 成人av资源在线观看| 国内不卡的二区三区中文字幕| 偷拍与自拍一区| 一区二区三区欧美| √…a在线天堂一区| 国产偷国产偷精品高清尤物 | 欧美日韩美女一区二区| 粉嫩一区二区三区性色av| 久久福利视频一区二区| 日韩 欧美一区二区三区| 亚洲一区二区不卡免费| 亚洲欧美区自拍先锋| 中文字幕成人网| 国产欧美一区二区三区在线看蜜臀| 日韩女同互慰一区二区| 日韩欧美国产三级| 日韩一卡二卡三卡国产欧美| 欧美一区二区成人6969| 欧美日韩中字一区| 精品视频1区2区3区| 欧美性生活久久| 欧美三级电影一区| 欧美日韩国产综合久久| 欧美日韩激情一区二区| 欧美精品v国产精品v日韩精品 | 3d成人动漫网站| 69p69国产精品| 精品免费视频.| 亚洲精品一区二区三区在线观看| 欧美mv和日韩mv国产网站| 日韩精品中午字幕| 国产欧美精品国产国产专区| 欧美高清一级片在线观看| 18欧美乱大交hd1984| 亚洲综合在线视频| 日韩成人av影视| 激情综合色综合久久| 国产成人午夜高潮毛片| 99久久综合色| 欧美午夜精品久久久久久孕妇| 欧美日韩精品是欧美日韩精品| 欧美日韩国产综合一区二区三区| 欧美肥妇bbw| 337p日本欧洲亚洲大胆色噜噜| 久久久久九九视频| 中文字幕在线不卡一区| 亚洲第一久久影院| 久久电影国产免费久久电影| 国产成人a级片| 欧美精品777| 在线电影欧美成精品| 精品国产一区二区三区久久影院 | 国产aⅴ精品一区二区三区色成熟| 国产91精品久久久久久久网曝门| 97se亚洲国产综合自在线不卡| 欧美性videosxxxxx| 精品毛片乱码1区2区3区 | 久久久精品一品道一区| 亚洲人午夜精品天堂一二香蕉| 午夜精品久久久久| 国产福利一区二区三区视频在线| 91丨porny丨首页| 欧美一激情一区二区三区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲国产裸拍裸体视频在线观看乱了 | 中文字幕一区二区三区不卡| 午夜欧美电影在线观看| 成人精品一区二区三区中文字幕| 51精品秘密在线观看| 国产精品久久久一本精品| 日韩激情一区二区| 色天天综合久久久久综合片| 久久久美女毛片| 日本中文字幕一区二区视频| 成人国产精品免费观看动漫| 精品久久人人做人人爰| 亚洲综合色自拍一区| 粉嫩蜜臀av国产精品网站| 日韩一级片在线观看| 亚洲欧美日韩综合aⅴ视频| 国产福利91精品一区二区三区| 欧美日韩国产高清一区二区| 国产精品色婷婷久久58| 国产精品色呦呦| 午夜天堂影视香蕉久久| 成人激情动漫在线观看| 久久综合色之久久综合| 日日骚欧美日韩| 99久久久无码国产精品| 欧美日韩免费一区二区三区| 久久久99久久| 日韩不卡一区二区三区| 欧美男同性恋视频网站| 成人免费在线播放视频| 国产麻豆视频一区| 日韩午夜三级在线| 亚洲精品老司机| 成人午夜电影久久影院| 日韩欧美区一区二| 亚洲一二三四在线| 91久久精品一区二区| 欧美激情艳妇裸体舞| 久久av中文字幕片| 欧美日韩一区小说| 亚洲精品中文在线观看| 国产91丝袜在线观看| 精品日韩一区二区三区免费视频| 亚洲成在人线免费| 色婷婷精品大在线视频| 中文字幕亚洲一区二区va在线| 国产一区二区三区| 精品入口麻豆88视频| 国产成人av影院| 久久久噜噜噜久久人人看| 精品一区二区在线观看| 欧美浪妇xxxx高跟鞋交| 日产国产高清一区二区三区| 欧美日韩一区精品| 日韩精品乱码av一区二区| 欧美色成人综合| 日韩电影免费在线看| 欧洲一区二区三区免费视频| 一区二区三区免费观看| 91色在线porny| 亚洲欧美视频在线观看视频| 欧美日韩视频在线观看一区二区三区 | 成人黄色在线视频| 日韩美女视频一区二区| 91麻豆精品在线观看| 一区二区三区四区国产精品| 韩国av一区二区三区在线观看| 国产精品色婷婷久久58| 91丝袜美腿高跟国产极品老师 | 欧美少妇xxx| 日韩av电影免费观看高清完整版| 欧美高清视频不卡网| 日韩av电影天堂| 日韩欧美资源站| 成人免费视频播放| 亚洲蜜臀av乱码久久精品| 91福利在线观看|