?? 直控按鍵演示(匯編).asm
字號:
;按壓P3.2直控鍵盤按鈕流水燈減1,按壓P3.3直控鍵盤按鈕流水燈燈加11
CODE_SEG SEGMENT CODE
DATA_SEG SEGMENT DATA
STACK_SEG SEGMENT IDATA
RSEG DATA_SEG
KEY_S: DS 1
KEY_V: DS 1
RSEG STACK_SEG
STACK: DS 20
K1 BIT P3.2 ;
K2 BIT P3.3 ;
CSEG AT 0000H
JMP MAIN
;===============================================================================
RSEG CODE_SEG
MAIN:
MOV SP,#(STACK-1) ; 設置棧指針
MOV P1,#0FEH ; 初始點亮LED P10
MOV KEY_V,#03H ; 初始鍵值
KEY_CHKSW: ; 循環(huán)檢測按鍵是否按下
ACALL SCAN_KEY ; 輸入按鍵狀態(tài)
MOV KEY_S,A
XRL A,KEY_V ; 檢查按鍵值是否改變
JZ KEY_CHKSW ; 若無鍵被按,則跳回KEY_CHKSW
MOV R7,#10 ; 延時10ms
ACALL DELAYMS ; 延時去抖
ACALL SCAN_KEY ; 再次檢查按鍵值
MOV KEY_S,A
XRL A,KEY_V
JZ KEY_CHKSW
MOV KEY_V,KEY_S ; 保存按鍵狀態(tài)
ACALL PROC_KEY ;
SJMP KEY_CHKSW
;===============================================================================
SCAN_KEY:
; 掃描按鍵
; 傳入?yún)?shù):無
; 返回值:A --- 按鍵狀態(tài)
CLR A
MOV C,K1
MOV ACC.0,C
MOV C,K2
MOV ACC.1,C
RET
;===============================================================================
PROC_KEY:
; 按鍵處理子程序
; 傳入?yún)?shù): KEY_V --- 按鍵值
; 返回值: 無
MOV A,KEY_V
JNB ACC.0,PROC_K1
JNB ACC.1,PROC_K2
RET
PROC_K1: ; 按鍵K1處理程序
MOV A,P1 ; 右移
RR A
MOV P1,A
RET
PROC_K2: ; 按鍵K2處理程序
MOV A,P1 ; 左移
RL A
MOV P1,A
RET
;===============================================================================
DELAYMS:
; 延時子程序
; 傳入?yún)?shù):R7 --- 延時值(MS)
; 返回值:無
MOV A,R7
JZ END_DLYMS
DLY_LP1:
MOV R6,#185
DLY_LP2:
NOP
NOP
NOP
DJNZ R6,DLY_LP2
DJNZ R7,DLY_LP1
END_DLYMS:
RET
; END OF DELAYMS
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -