請各位大大幫我看一下這個打地鼠的程式我模擬時LED會有時會亮兩顆以上,可是我希望他每次只亮一顆另外我按按鈕時分數並不會增加
所以拜託幫我修改一下程式
P1是按鈕P2是七段顯示器P3是LED
DELAY_SET_VAL0 EQU 0E8H
DELAY_SET_VAL1 EQU 0FFH
P1_CAP_REG0 EQU 30H
P1_CAP_REG1 EQU 31H
P1_CAP_REG2 EQU 32H
DELAY_CNT_REG0 EQU 33H
DELAY_CNT_REG1 EQU 34H
ORG 00H
MOV TMOD,#00000001B
MOV R4,#0
SETB TR0
START:
MOV P1,#0FFH
LOOP:
CALL DISPLAY
CALL CAP_P1
SYSTEM_START:
CALL DELAY
JNC LOOP_0
CALL RANDOM
LOOP_0:
CALL P10
JNC LOOP_1
JNB P3.0,LOOP_00
LOOP_00: SETB P3.0
INC R4
MOV A,R4
CJNE A,#100,LOOP_1
MOV R4,#99
LOOP_1:
CALL P11
JNC LOOP_2
JNB P3.1,LOOP_10
LOOP_10: SETB P3.1
INC R4
MOV A,R4
CJNE A,#100,LOOP_2
MOV R4,#99
LOOP_2:
CALL P12
JNC LOOP_3
JNB P3.2,LOOP_20
LOOP_20: SETB P3.2
INC R4
MOV A,R4
CJNE A,#100,LOOP_3
MOV R4,#99
LOOP_3:
CALL P13
JNC LOOP_4
JNB P3.3,LOOP_30
LOOP_30: SETB P3.3
INC R4
MOV A,R4
CJNE A,#100,LOOP_4
MOV R4,#99
LOOP_4:
CALL P14
JNC LOOP_EXIT
JNB P3.4,LOOP_40
LOOP_40: SETB P3.4
INC R4
MOV A,R4
CJNE A,#100,LOOP_EXIT
MOV R4,#99
LOOP_EXIT:
LJMP LOOP
DISPLAY:MOV A,R4
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
RET
CAP_P1: MOV A,P1_CAP_REG1
MOV P1_CAP_REG2,A
MOV A,P1_CAP_REG0
MOV P1_CAP_REG1,A
MOV A,P1
CPL A
MOV P1_CAP_REG0,A
RET
DELAY: MOV A,DELAY_CNT_REG0
ADD A,#1
MOV DELAY_CNT_REG0,A
MOV A,DELAY_CNT_REG1
ADDC A,#0
MOV DELAY_CNT_REG1,A
MOV A,DELAY_CNT_REG0
CJNE A,#DELAY_SET_VAL0,DELAY_CNT_INC_LAB1
MOV A,DELAY_CNT_REG1
CJNE A,#DELAY_SET_VAL1,DELAY_CNT_INC_LAB1
MOV DELAY_CNT_REG0,#0
MOV DELAY_CNT_REG1,#0
SETB C
LJMP DELAY_CNT_INC_EXIT
DELAY_CNT_INC_LAB1:
CLR C
DELAY_CNT_INC_EXIT:
RET
RANDOM:
MOV A,TL0
JZ RANDOM
MOV P3,A
RET
P10:
CLR C
MOV A,P1_CAP_REG2
JB ACC.0,P10EXIT
MOV A,P1_CAP_REG1
JNB ACC.0,P10EXIT
MOV A,P1_CAP_REG0
JNB ACC.0,P10EXIT
SETB C
P10EXIT:
RET
P11:
CLR C
MOV A,P1_CAP_REG2
JB ACC.1,P11EXIT
MOV A,P1_CAP_REG1
JNB ACC.1,P11EXIT
MOV A,P1_CAP_REG0
JNB ACC.1,P11EXIT
SETB C
P11EXIT:
RET
P12:
CLR C
MOV A,P1_CAP_REG2
JB ACC.2,P12EXIT
MOV A,P1_CAP_REG1
JNB ACC.2,P12EXIT
MOV A,P1_CAP_REG0
JNB ACC.2,P12EXIT
SETB C
P12EXIT:
RET
P13:
CLR C
MOV A,P1_CAP_REG2
JB ACC.3,P13EXIT
MOV A,P1_CAP_REG1
JNB ACC.3,P13EXIT
MOV A,P1_CAP_REG0
JNB ACC.3,P13EXIT
SETB C
P13EXIT:
RET
P14:
CLR C
MOV A,P1_CAP_REG2
JB ACC.4,P14EXIT
MOV A,P1_CAP_REG1
JNB ACC.4,P14EXIT
MOV A,P1_CAP_REG0
JNB ACC.4,P14EXIT
SETB C
P14EXIT:
RET
TABLE: DB 00000000B
DB 00000001B
DB 00000010B
DB 00000011B
DB 00000100B
DB 00000101B
DB 00000110B
DB 00000111B
DB 00001000B
DB 00001001B
DB 00010000B
DB 00010001B
DB 00010010B
DB 00010011B
DB 00010100B
DB 00010101B
DB 00010110B
DB 00010111B
DB 00011000B
DB 00011001B
DB 00100000B
DB 00100001B
DB 00100010B
DB 00100011B
DB 00100100B
DB 00100101B
DB 00100110B
DB 00100111B
DB 00101000B
DB 00101001B
DB 00110000B
DB 00110001B
DB 00110010B
DB 00110011B
DB 00110100B
DB 00110101B
DB 00110110B
DB 00110111B
DB 00111000B
DB 00111001B
DB 01000000B
DB 01000001B
DB 01000010B
DB 01000011B
DB 01000100B
DB 01000101B
DB 01000110B
DB 01000111B
DB 01001000B
DB 01001001B
DB 01010000B
DB 01010001B
DB 01010010B
DB 01010011B
DB 01010100B
DB 01010101B
DB 01010110B
DB 01010111B
DB 01011000B
DB 01011001B
DB 01100000B
DB 01100001B
DB 01100010B
DB 01100011B
DB 01100100B
DB 01100101B
DB 01100110B
DB 01100111B
DB 01101000B
DB 01101001B
DB 01110000B
DB 01110001B
DB 01110010B
DB 01110011B
DB 01110100B
DB 01110101B
DB 01110110B
DB 01110111B
DB 01111000B
DB 01111001B
DB 10000000B
DB 10000001B
DB 10000010B
DB 10000011B
DB 10000100B
DB 10000101B
DB 10000110B
DB 10000111B
DB 10001000B
DB 10001001B
DB 10010000B
DB 10010001B
DB 10010010B
DB 10010011B
DB 10010100B
DB 10010101B
DB 10010110B
DB 10010111B
DB 10011000B
DB 10011001B
END

X