想要實現的目的是先按下K1后按下K2顯示器就加一,反過來就減一。可是調了一個晚上感覺開關這里還是不對 求大神看一下!!
ORG 0000H ;程序儲存器規劃
LJMP MAIN ;跳轉到主程序
ORG 0003H ;T0中斷
LJMP KEY1 ;轉向外部中斷0中斷服務程序
ORG 0013H ;T1中斷
LJMP KEY2 ;轉向外部中斷0中斷服務程序
ORG 0100H ;主程序
MAIN:
MOV SP, #5FH ;堆棧重新設置到從60H開始的片內RAM區
SETB EA ;總中斷開關打開
SETB EX0 ;INT0中斷打開
SETB EX1 ;INT1中斷打開
SETB IT0 ;T0口下降沿觸發
SETB IT1 ;T1口下降沿觸發
;-----------------------------------------
MOV R1, #00 ;R0初始值設為00
MAIN1:
CALL JISHU ;調用JISHU計數部分
CALL PRINT ;調用PRINT顯示部分
JMP MAIN1
;-----------------------------------------
KEY1:
LCALL DELAY
JNB P3.3, JIAYI
JNB P3.2, TX1
RETI
JIAYI:
INC R1
CJNE R1, #101, TX1 ;若R1小于101則跳轉到TS1,大于則繼續
MOV R1, #100
TX1:RETI
;-----------------------------------------
KEY2:
JNB P3.2,JIANYI
JNB P3.3, TS1
LCALL DELAY
RETI
JIANYI:
DEC R1
CJNE R1, #255, TS1
MOV R1, #0
TS1:RETI
;-----------------------------------------
JISHU:
MOV DPTR, #TAB
MOV R0, #33H
MOV A, R1
MOV B, #100
DIV AB ;十位個位分離
MOVC A, @A + DPTR
MOV @R0, A
INC R0
MOV A, B ;B為余數
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV @R0, A
INC R0
MOV A, B ;B為余數表示個位數
MOVC A, @A + DPTR
MOV @R0, A
RET
;-----------------------------------------
TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H
;-----------------------------------------
PRINT:
MOV R0, #33H
MOV R5, #04H
MOV R4, #3
LOOP4:
MOV P0, @R0
MOV P2, R5
MOV A, R5
RR A
MOV R5, A
INC R0
DJNZ R7, $
DJNZ R7, $
ANL P2, #0
DJNZ R4, LOOP4
RET
;-----------------------------------------
DELAY:MOV 33H,#10
D1: MOV 31H,#200
D2: MOV 30H,#250
DJNZ 30H,$
DJNZ 32H,D2
DJNZ 33H,D1
RET
END
|