设计的抢答器,程序不能达到全部要求,求帮助,汇编语言设计

硬件电路如图,设计要求:
p3.0口的按键按下后数码管显示十秒倒计时;十秒钟之内当四个抢答按键按下后数码管显示对应组号,对应指示灯亮,倒计时十秒结束恢复初始状态,不能抢答。并且每个键按下都有声音提示。自己设计的程序不能实现发声和倒计时功能,求帮忙改正
ORG 0000H
LJMP START
ORG 0040H
LJMP MAIN
ORG 0050H
START: MOV P2,#0FFH
JB P3.0, $
CPL P3.1
LACLL DELAY
CPL P3.1
MOV P2,#0C0H
AGAIN:JNB P1.0,X1
JNB P1.1,X2
JNB P1.2,X3
JNB P1.3,X4
SJMP AGAIN
X1:RETI
ANL P1,#0EFH
CPL P3.1
LACLL DELAY
CPL P3.1
MOV P2,#0F9H
SJMP $
X2:ANL P1,#0DFH
CPL P3.1
LACLL DELAY
CPL P3.1
MOV P2,#0A4H
SJMP $
X3:ANL P1,#0BFH
CPL P3.1
LACLL DELAY
CPL P3.1
MOV P2,#0B0H
SJMP $
X4:ANL P1,#7FH
CPL P3.1
LACLL DELAY
CPL P3.1
MOV P2 ,#99H
SJMP $
DELAY: MOV R7,#100
DEL1: MOV R6,#249
DL:NOP
NOP
DJNZ R6,DL
DJNZ R7,DEL1
RET
END

;以下程序,已经调试成功:

ORG 0000H
LJMP START
ORG 000BH
LJMP T0_INT
ORG 0040H
START:
MOV TMOD, #01H
MOV TH0, #(65536-50000) / 256
MOV TL0, #(65536-50000) MOD 256
MOV IE, #82H
MOV P1, #0FFH ;LED
MOV P2, #0FFH ;数码管
JB P3.0, $ ;等待开始
MOV P2, #90H
MOV R5, #20
MOV R4, #10
SETB TR0
CALL BEEP
AGAIN:
JNB P1.0, X1
JNB P1.1, X2
JNB P1.2, X3
JNB P1.3, X4
JB TR0, AGAIN
SJMP START
;------------------------
X1:
ANL P1, #0EFH
MOV P2, #0F9H
SJMP XXX
X2:
ANL P1, #0DFH
MOV P2, #0A4H
SJMP XXX
X3:
ANL P1, #0BFH
MOV P2, #0B0H
SJMP XXX
X4:
ANL P1, #7FH
MOV P2, #99H
XXX:
CLR TR0
CALL BEEP
JB P3.0, $ ;等待清零
CALL BEEP
JNB P3.0, $ ;等待释放
SJMP START
;------------------------
BEEP:
DJNZ R7, $
CPL P3.1
DJNZ R6, BEEP
SETB P3.1
RET
;------------------------
T0_INT:
MOV TH0, #(65536-50000) / 256
MOV TL0, #(65536-50000) MOD 256
DJNZ R5, T0_END
MOV R5, #20
MOV A, R4
DEC A
DEC A
MOV DPTR, #TAB
MOVC A, @A + DPTR
MOV P2, A
DJNZ R4, T0_END
CLR TR0
T0_END:
RETI
TAB:
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H
DB 092H, 082H, 0F8H, 080H, 090H
;------------------------
END追问

这个程序蜂鸣器部分是低电平有效吧,如果我想让它高电平有效呢

追答

我的程序,是好用的。
采纳时,你点错了,对我来说,并没有多大的关系。
只是,可能会误导很多人。
------
对于单片机来说,输出低电平有效,是正常的。
因为,复位时,单片机的输出,默认就是高电平。

如果,外设,是高电平有效,刚开机时,就会引起误操作。
所以,设计各种外设电路,都要避免高电平有效。

追问

恩 ,懂了,非常感谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-01
NUM EQU 30H
SEC EQU 31H
FLAG BIT 00H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0INT
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB ET0
SETB EA
LOOP:
CLR FLAG
JB P3.0,$
JNB P3.0,$
LCALL FMQ
SETB TR0
MOV SEC,#10
MOV DPTR,#LEDTAB1
MOV A,#10
MOVC A,@A+DPTR
MOV P2,A
LOOP1:
MOV P1,#0FFH
JNB P1.0,X1
JNB P1.1,X2
JNB P1.2,X3
JNB P1.3,X4
JNB FLAG,LOOP1
SJMP LOOP
X1:
LCALL FMQ
CLR P1.4
CLR TR0
MOV A,#1
MOVC A,@A+DPTR
MOV P2,A
LJMP LOOP
X2:
LCALL FMQ
CLR P1.5
CLR TR0
MOV A,#2
MOVC A,@A+DPTR
MOV P2,A
LJMP LOOP
X3:
LCALL FMQ
CLR P1.6
CLR TR0
MOV A,#3
MOVC A,@A+DPTR
MOV P2,A
LJMP LOOP
X4:
LCALL FMQ
CLR P1.7
CLR TR0
MOV A,#4
MOVC A,@A+DPTR
MOV P2,A
LJMP LOOP
T0INT:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
INC NUM
MOV A,NUM
CJNE A,#20,T0RE
MOV NUM,#0
DEC SEC
MOV A,SEC
MOV DPTR,#LEDTAB1
MOVC A,@A+DPTR
MOV P2,A
MOV A,SEC
JNZ T0RE
CLR TR0
SETB FLAG
T0RE:
RETI

;--------------------
LEDTAB1:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
DB 88H ;"A" 0AH
DB 83H ;"B" 0BH
DB 0C6H ;"C" 0CH
DB 0A1H ;"D" 0DH
DB 86H ;"E" 0EH
DB 8EH ;"F" 0FH
DB 0FFH ;" " 10H
END本回答被提问者采纳