以單片機為核心,設計一個8位競賽搶答器:同時供8名選手或8個代表隊比賽,分別用8個按鈕S0~S7表示。
1.設置一個系統清除和搶答控制開關S,開關由主持人控制。 2.搶答器具有鎖存與顯示功能。即選手按按鈕,鎖存相應的編號,并在優先搶答選手的編號一直保持到主持人將系統清除為止。
3.搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)。當主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間為0.5s左右。 4.參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。
5.如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (10.74 KB, 下載次數: 78)
下載附件
2020-7-1 03:45 上傳
51hei.png (22.13 KB, 下載次數: 88)
下載附件
2020-7-1 03:45 上傳
單片機源程序如下:
- #include<reg51.h>
- OKEQU20H
- RINGEQU22H
- ORG0000H
- AJMPMAIN
- ORG0003H
- AJMPINT0SUB
- ORG000BH
- AJMPT0INT
- ORG0013H
- AJMPINT1SUB
- ORG001BH
- AJMPT1INT
- ORG0040H
- MAIN:MOVR1,#30
- MOVR2,#60
- MOVTMOD,#11H
- MOVTH0,#0F0H
- MOVTL0,#0FFH
- MOVTH1,#3CH
- MOVTL1,#0B0H
- SETBEA
- SETBET0
- SETBET1
- SETBEX0
- SETBEX1
- CLROK
- CLRRING
- SETBTR1
- SETBTR0
- 2查詢程序
- START:MOVR5,#0BH
- MOVR4,#0BH
- MOVR3,#0BH
- ACALLDISPLAY
- JBP3.0,NEXT
- ACALLDELAY
- JBP3.0,NEXT
- ACALLBARK
- MOVA,R1
- MOVR6,A
- SETBOK
- MOVR7,#01H
- MOVR3,#0AH
- AJMPCOUNT
- NEXT:JNBP1.0,FALSE1
- JNBP1.1,FALSE2
- JNBP1.2,FALSE3
- JNBP1.3,FALSE4
- JNBP1.4,FALSE5
- JNBP1.5,FALSE6
- JNBP1.6,FALSE7
- JNBP1.7,FALSE8
- AJMPSTART
- 3非法搶答處理程序
- FALSE1:MOVR3,#01H
- AJMPERROR
- FALSE2:MOVR3,#02H
- AJMPERROR
- FALSE3:MOVR3,#03H
- AJMPERROR
- FALSE4:MOVR3,#04H
- AJMPERROR
- FALSE5:MOVR3,#05H
- AJMPERROR
- FALSE6:MOVR3,#06H
- AJMPERROR
- FALSE7:MOVR3,#07H
- AJMPERROR
- FALSE8:MOVR3,#08H
- 4搶答、回答時間調整程序
- =====INT0(搶答時間R1調整程序)=====
- INT0SUB:MOVA,R1
- MOVB,#0AH
- DIVAB
- MOVR5,A
- MOVR4,B
- MOVR3,#0AH
- ACALLDISPLAY
- JNBP3.4,INC0
- JNBP3.5,DEC0
- JNBP3.1,BACK0
- AJMPINT0SUB
- INC0:MOVA,R1
- CJNEA,#63H,ADD0
- MOVR1,#00H
- ACALLDELAY1
- AJMPINT0SUB
- ADD0:INCR1
- ACALLDELAY1
- AJMPINT0SUB
- DEC0:MOVA,R1
- JZSETR1
- DECR1
- ACALLDELAY1
- AJMPINT0SUB
- SETR1:MOVR1,#63H
- ACALLDELAY1
- AJMPINT0SUB
- BACK0:RETI
- ;=====INT1(回答時間R2調整程序)=====
- INT1SUB:MOVA,R2
- MOVB,#0AH
- DIVAB
- MOVR5,A
- MOVR4,B
- MOVR3,#0AH
- ACALLDISPLAY
- JNBP3.4,INC1
- JNBP3.5,DEC1
- JNBP3.1,BACK1
- AJMPINT1SUB
- INC1:MOVA,R2
- CJNEA,#63H,ADD1
- MOVR2,#00H
- ACALLDELAY1
- AJMPINT1SUB
- ADD1:INCR2
- ACALLDELAY1
- AJMPINT1SUB
- DEC1:MOVA,R2
- JZSETR2
- DECR2
- ACALLDELAY1
- AJMPINT1SUB
- SETR2:MOVR2,#63H
- ACALLDELAY1
- AJMPINT1SUB
- BACK1:RETI
- 5倒計時程序
- REPEAT:MOVA,R2
- MOVR6,A
- CLRRING
- COUNT:MOVR0,#00H
- MOVTH1,#3CH
- MOVTL1,#0B0H
- RECOUNT:MOVA,R6
- MOVB,#0AH
- DIVAB
- MOV30H,A
- MOV31H,B
- MOVR5,30H
- MOVR4,31H
- MOVA,R6
- SUBBA,#07H
- JNCLARGER
- MOVA,R0
- CJNEA,#0AH,FULL
- CLRRING
- AJMPCHECK
- FULL:CJNEA,#14H,CHECK
- SETBRING
- MOVA,R6
- JZQUIT
- MOVR0,#00H
- DECR6
- AJMPCHECK
- LARGER:MOVA,R0
- CJNEA,#14H,CHECK
- DECR6
- MOVR0,#00H
- CHECK:JNBP3.1,QUIT
- JNBOK,CHECKK
- AJMPNEXTT
- CHECKK:JNBP3.0,REPEAT
- NEXTT:ACALLDISPLAY
- JBOK,ACCOUT
- AJMPRECOUNT
- ACCOUT:
- MOVA,36H
- JNBACC.0,TRUE1
- JNBACC.1,TRUE2
- JNBACC.2,TRUE3
- JNBACC.3,TRUE4
- JNBACC.4,TRUE5
- JNBACC.5,TRUE6
- JNBACC.6,TZ1
- JNBACC.7,TZ2
- AJMPRECOUNT
- TZ1:JMPTRUE7
- TZ2:JMPTRUE8
- QUIT:CLROK
- CLRRING
- AJMPSTART
- 6正常搶答處理程序
- TRUE1:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#01H
- CLROK
- AJMPCOUNT
- TRUE2:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#02H
- CLROK
- AJMPCOUNT
- TRUE3:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#03H
- CLROK
- AJMPCOUNT
- TRUE4:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#04H
- CLROK
- AJMPCOUNT
- TRUE5:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#05H
- CLROK
- AJMPCOUNT
- TRUE6:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#06H
- CLROK
- AJMPCOUNT
- TRUE7:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#07H
- CLROK
- AJMPCOUNT
- TRUE8:ACALLBARK
- MOVA,R2
- MOVR6,A
- MOVR3,#08H
- CLROK
- AJMPCOUNT
- 7犯規搶答程序
- ERROR:MOVR0,#00H
- MOVTH1,#3CH
- MOVTL1,#0B0H
- MOV34H,R3
- HERE:MOVA,R0
- CJNEA,#06H,FLASH;0.3s
- CLRRING
- MOVR3,#0AH
- MOVR4,#0AH
- MOVR5,#0AH
- AJMPCHECK1
- FLASH:CJNEA,#0CH,CHECK1
- SETBRING
- MOVR0,#00H
- MOVR3,34H
- MOVR5,#0BH
- MOVR4,#0BH
- AJMPCHECK1
- CHECK1:JNBP3.1,QUIT1
- ACALLDISPLAY
- AJMPHERE
- QUIT1:CLRRING
- CLROK
- AJMPSTART
- 8其他功能程序
- =====顯示程序=====
- DISPLAY:MOVDPTR,#DAT1
- MOVA,R3
- MOVCA,@A+DPTR
- MOVP2,#0feH
- MOVP0,A
- ACALLDELAY2
- MOVDPTR,#DAT2
- MOVA,R5
- MOVCA,@A+DPTR
- MOVP2,#0fdH
- MOVP0,A
- ACALLDELAY2
- MOVA,R4
- MOVCA,@A+DPTR
- MOVP2,#0fbH
- MOVP0,A
- ACALLDELAY2
- RET
- DAT1:DB00h,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,00H,71H
- DAT2:DB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,00H,71H
- =====發聲程序=====
- BARK:SETBRING
- ACALLDELAY1
- ACALLDELAY1
- CLRRING
- RET
- =====TO溢出中斷(響鈴程序)=====
- T0INT:MOVTH0,#0ECH
- MOVTL0,#0FFH
- JNBRING,OUT;
- CPLP3.6
- OUT:RETI
- ;=====T1溢出中斷(計時程序)=====
- T1INT:MOVTH1,#3CH
- MOVTL1,#0B0H
- END
復制代碼
程序還有點問題,求大神幫忙修改,壓縮包里面是仿真圖:
項目一八位競賽搶答器.zip
(805.17 KB, 下載次數: 22)
2020-6-24 11:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|