?? 按鍵顯示程序最終成功.asm
字號(hào):
;----------------------------------------------------------------------------
;主要功能:按鍵掃描,數(shù)碼管動(dòng)態(tài)顯示,利用4511及74138的譯碼(只占用7個(gè)I\O口)
;節(jié)省了單片機(jī)的I\O口
;-----------------------------------------------------------------------------
TEMP EQU 30H ;七段數(shù)碼管緩沖區(qū),連續(xù)8個(gè)字節(jié)
TEMP_NUM EQU 38H ;按鍵數(shù)據(jù)緩沖區(qū),第8位(新輸入的值)
KEY_NO EQU 40H ;按鍵值
FKEY EQU 20H.0 ;按鍵標(biāo)志,若有按鍵為1
ORG 0000H
AJMP START
START:
MOV SP,#60H ;定義堆棧指針地址
MOV A,#0AH
START1:
MOV R0,#TEMP
MOV R4,#8
INITIAL:
MOV @R0,A
INC R0
DJNZ R4,INITIAL ;對(duì)七段緩沖區(qū)消隱,全部賦值為10
;=============================掃描程序============================
SCAN:
CLR FKEY
SCAN0:
ACALL DISP ;調(diào)用掃描子程序
ACALL KEY_SCAN ;調(diào)用掃描子程序
SCAN1:
JB FKEY,WAIT_OFF ;若有按鍵就等待按鍵放開,無則繼續(xù)掃描顯示器和鍵盤
AJMP SCAN
WAIT_OFF:
ACALL DISP
ACALL KEY_SCAN
JB FKEY,WAIT_OFF
WAIT:
MOV A,KEY_NO ;按鍵松開后
NEXT: ;鍵值判斷,分支跳轉(zhuǎn)
CJNE A,#0AH,NEXT0
ACALL ML ;左移
NEXT0:
CJNE A,#0BH,NEXT1
ACALL MR ;右移
NEXT1:
CJNE A,#0CH,NEXT2
ACALL SHINE ;閃爍
NEXT2:
CJNE A,#0DH,NEXT3
ACALL NORMOL ;靜止顯示
NEXT3:
CJNE A,#0EH,NEXT4
ACALL CLEAR ;清零;NEXT4:
NEXT4:CJNE A,#0FH,NEXT5
ACALL HIDE ;消隱
NEXT5:
CALL NUM_OUT ;數(shù)字鍵直接輸出
AJMP SCAN
;*******************************顯示掃描子程序****************************
DISP:
MOV R2,#00H
MOV R0,#TEMP
SCAN_LED: ;數(shù)據(jù)輸出至4511及74138端口,使數(shù)碼管顯示相應(yīng)值
MOV A,R2
SWAP A
MOV R3,A
MOV A,@R0
ADD A,R3
MOV P2,A
MOV R5,#5
ACALL DELAY ;延時(shí)1ms,清抖作用
INC R2
INC R0
CJNE R2,#8,SCAN_LED ;緩存區(qū)數(shù)據(jù)依次從低位開始輸出
MOV P2,#0FFH ;消除余輝
RET
;***************************************************************************
;&&&&&&&&&&&&&&&&&&&&&&&&===A、B控制鍵需調(diào)用的子程序====&&&&&&&&&&&&&&&&&&
CONTROL:
MOV R4,#90
L1:
ACALL DISP
DJNZ R4, L1
MOV R0,#75
L2:
ACALL KEY_SCAN
JNB FKEY,L4
L3:
ACALL KEY_SCAN
JB FKEY,L3
ACALL COMPARE
JMP WAIT
L4:
DJNZ R0,L2
RET
;&&&&&&&&&&&&&&&&&&&&&&===&&&&&&&&&&&&&&&&&&&&&&&&&&&&&====&&&&&&&&&&&&&&&&
;---------------------------閃爍程序-----------------------------
SHINE:
MOV R4,#90
LL1:
ACALL DISP
DJNZ R4, LL1
MOV R0,#200
LL2:
ACALL KEY_SCAN
JB FKEY,WAIT_OFF
DJNZ R0,LL2
JMP SHINE
RET
;---------------------------消隱程序-------------------------------
HIDE:
MOV P2,#0FFH
CALL KEY_SCAN
H1:
MOV A,KEY_NO
CJNE A,#0DH,H2
AJMP WAIT_OFF
H2:
CJNE A,#0EH,HIDE
AJMP WAIT_OFF
RET
;*************************鍵盤掃描子程序*********************************
KEY_SCAN:
MOV R3,#0EFH ;加載掃描輸出初始信號(hào)11101111B
MOV R4,#0
MOV R1,#4
CLR PSW.5
S1:
MOV A,R3 ;循環(huán)掃描16個(gè)按鍵
MOV P1,A
MOV R5,#1
ACALL DELAY
MOV A,P1 ;讀取P1口數(shù)據(jù)判斷按鍵是否有效
ANL A,#0FH
MOV R2,#4
S2:
JB ACC.0,N1 ;判斷有無按鍵, 若為1則表示沒按鍵按下
MOV KEY_NO,R4
SETB PSW.5
N1:
INC R4
RR A
DJNZ R2,S2 ;對(duì)一行進(jìn)行掃描
MOV A,R3
RL A ;移至下一行掃描
MOV R3,A
DJNZ R1,S1
BACK:
JNB PSW.5,NO_KEY
SETB FKEY
RET
NO_KEY:
CLR FKEY
RET
;*****************************************************************************
;-----------------------------左移程序-----------------------------
ML:
MOV TEMP_NUM,TEMP+7
MOV TEMP+7, TEMP+6
MOV TEMP+6, TEMP+5
MOV TEMP+5, TEMP+4
MOV TEMP+4, TEMP+3
MOV TEMP+3, TEMP+2
MOV TEMP+2, TEMP+1
MOV TEMP+1, TEMP
MOV TEMP,TEMP_NUM
ACALL CONTROL
JMP ML
RET
;------------------------------右移程序------------------------------
MR:
MOV TEMP_NUM,TEMP
MOV TEMP,TEMP+1
MOV TEMP+1,TEMP+2
MOV TEMP+2,TEMP+3
MOV TEMP+3,TEMP+4
MOV TEMP+4,TEMP+5
MOV TEMP+5,TEMP+6
MOV TEMP+6,TEMP+7
MOV TEMP+7,TEMP_NUM
ACALL CONTROL
JMP MR
RET
;------------------------------靜止顯示程序---------------------------
NORMOL:
AJMP SCAN
RET
;------------------------------清零程序-------------------------------
CLEAR:
MOV A,#0
AJMP START1
RET
;------------------------------數(shù)字輸出程序----------------------------
NUM_OUT:
MOV A,KEY_NO
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV TEMP_NUM,A
MOV TEMP+7, TEMP+6
MOV TEMP+6, TEMP+5
MOV TEMP+5, TEMP+4
MOV TEMP+4, TEMP+3
MOV TEMP+3, TEMP+2
MOV TEMP+2, TEMP+1
MOV TEMP+1, TEMP
MOV TEMP,TEMP_NUM ;顯示自動(dòng)左移
RET
;------------------------------------------------------------------
RESTART:
ACALL NUM_OUT
MOV R4,#7
MOV R0,#31H
RES:
MOV @R0,#10
INC R0
DJNZ R4,RES
JMP SCAN
;------------------------------------------------------------------
COMPARE:
MOV A,KEY_NO
CLR C
SUBB A,#0AH
JC RESTART
RET
;###########################延時(shí)子程序程序#############################
DELAY: ;延時(shí)R5*0.2ms
MOV R6,#1
DELAY0:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY0
DJNZ R5,DELAY
RET
;##########################################################################
;%%%%%%%%%%%%%%%%%%%%% 表格 %%%%%%%%%%%%%%%%%%%%%%%%%
TABLE: DB 00H,01H,02H,03H,04H
DB 05H,06H,07H,08H,09H
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -