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

📄 kybd.asm

📁 地磁炉控制程序 (带三位8字数码管显示
💻 ASM
字号:
;*******************************************
DEBOUNCEMAX    equ   3              	;
KYBD1STTIME    equ   DEBOUNCEMAX + 30   ;
KYBD2NDTIME    equ   DEBOUNCEMAX + 12   ;

;*******************************************
KYBD_init:
    clr     KB_key_f                ;
    clr     KB_cont_f               ;
KYBD_Reset2Idle:
    clr     KYBD_keystate           ;
    clr     KYBD_CrtCnt             ;
	clr		KYBD_ContCnt			;
    set     KYBD_CrtKey             ;
    ret								;

;************************************
KYBD_GetKey:
	set		KIN_CTRL  				;
	nop        						;
	nop		      					;
	nop		      					;
	snz		_KIN  					;
	jmp		NoKeyPressed			;

	mov		a, 16					;
	mov		w0, a					;
kgk_loop:
	clr		KIN_CTRL				;make it output pin.
	nop		      					;
	nop		      					;
	clr		_shifter_d  			;shift in an 'L'
	nop		      					;
	nop		      					;
	set		_shifter_c  			;
	nop								;
	nop		      					;
	nop		      					;
	clr		_shifter_c				;
	set		KIN_CTRL    			;
	nop		      					;
	nop		      					;
	nop		     					;
	snz		_KIN        			;
	jmp		KeyPressed				;
	sdz		w0						;
	jmp		kgk_loop				;
   
NoKeyPressed:
    set     w0                   	;no key pressed, scancode 0ffh
    jmp     KgkOK                	;
KeyPressed:
KgkOK:
	clr		KIN_CTRL				;make it output pin.

    mov     a, KYBD_KeyState     	;
    addm    a, pcl               	;
    jmp     KYBD_KeyNot          	;
    jmp     KYBD_KeyCntUp        	;
    jmp     KYBD_KeyValid        	;
    jmp     KYBD_KeyContCnt      	;

KYBD_KeyNot:
    mov     a, 256-17            	;
    add     a, w0                	;
    sz      c                    	;
    ret                          	;
KgkScanOK:
    inc     KYBD_CrtCnt          	;key is pressed for the first time.

    mov     a, w0                	;
    mov     KYBD_CrtKey, a       	;

    inc     KYBD_KeyState        	;next state(KYBD_KeyCntUp)
    ret                          	;

KYBD_KeyCntUp:
    mov     a, w0                	;
    xor     a, KYBD_CrtKey       	;
    sz      z                    	;
    jmp     KgkSameKey1          	;
            
    sdz     KYBD_CrtCnt          	;
    ret                          	;
    jmp     KYBD_Reset2Idle      	;

KgkSameKey1:
    inc     KYBD_CrtCnt          	;

    mov     a, DEBOUNCEMAX       	;
    xor     a, KYBD_CrtCnt       	;
    snz     z                    	;
    ret                          	;

    inc     KYBD_KeyState        	;next state(KeyValid)

    mov     a, w0                	;
    mov     KB_ScanCode, a       	;
    set     KB_key_f             	;
    ret                          	;

KYBD_KeyValid:
    mov     a, w0                	;
    xor     a, KYBD_CrtKey       	;
    sz      z                    	;
    jmp     KgkSameKey2          	;
   
    sdz     KYBD_CrtCnt          	;
    ret                          	;
    jmp     KYBD_Reset2Idle      	;

KgkSameKey2:
    inc     KYBD_ContCnt         	;

    mov     a, KYBD_ContCnt      	;
    xor     a, KYBD1STTIME       	;
    snz     z                    	;
    ret                          	;

    set     KB_cont_f            	;
    inc     KYBD_KeyState        	;

    mov     a, DEBOUNCEMAX       	;
    mov     KYBD_CrtCnt, a       	;
	clr		KYBD_ContCnt
    ret                          	;

KYBD_KeyContCnt:
    mov     a, w0                	;
    xor     a, KYBD_CrtKey       	;
    sz      z                    	;
    jmp     KgkSameKey3          	;

    sdz     KYBD_CrtCnt          	;
    ret                          	;
    jmp     KYBD_Reset2Idle      	;

KgkSameKey3:
    inc     KYBD_ContCnt         	;

    mov     a, KYBD_ContCnt      	;
    xor     a, KYBD2NDTIME       	;
    snz     z                    	;
    ret                          	;

    set     KB_Cont_f            	;
    mov     a, DEBOUNCEMAX       	;
    mov     KYBD_CrtCnt, a       	;
	clr		KYBD_ContCnt			;
    ret                          	;
	

;********************************************************************
KBkey_convert:
    snz     KB_key_f                ;
    ret                             ;
    clr     KB_key_f                ;

    mov     a, KB_scancode          ;
    and     a, 00111111b            ;
    add     a, LOW(KBkeyTbl)        ;
    mov     tblp, a                 ;
    tabrdl  acc
    mov     KB_keycode, a           ;
	clr		no_buz_f				;
    jmp     KeyCvt_com              ;

KBcont_convert:
	snz		KB_cont_f				;
	ret								;
    clr     KB_cont_f               ;

    snz     KB_keycode.7            ;
    ret    							;

    mov     a, KB_keycode           ;
	set		no_buz_f				;
KeyCvt_com:
    set     KJ_key_f                ;
    ret                             ;



;*************************************************************
buzonce_check:
	snz		buz_once_f				;
	ret								;
	sdz		timer_buzonce			;
	ret								;
	clr		buz_once_f				;

	clr		_buzzer					;
	ret								;


;************************************
SetBuzOnce:
	sz		no_buz_f				;
	ret								;when key press not released, only beep once.

	set		buz_once_f				;

	mov		a, TIME_BUZONCE			;
	mov		timer_buzonce, a		;

	set		_buzzer					;
	ret             				;


⌨️ 快捷键说明

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