找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5867|回復(fù): 6
收起左側(cè)

Protuse7.8仿真8086搶答器 附源程序

[復(fù)制鏈接]
ID:697597 發(fā)表于 2020-2-24 19:38 | 顯示全部樓層 |閱讀模式
1.簡易搶答器的設(shè)計內(nèi)容和功能
l 以8086為核心,設(shè)計一個8位競賽搶答器:同時供8名選手或8個代表隊比賽,分別用8個按鈕SW1~SW8表示。
l 設(shè)置一個系統(tǒng)復(fù)位和搶答控制按鈕,按鈕由主持人控制。系統(tǒng)能進行多次搶答,選手1-8號任一按下?lián)尨?font face="宋體">或者倒計時到0后能重新按下【搶答】按鈕進行搶答。
l 搶答器具有鎖存,清除鎖存與顯示功能。在主持人按【搶答】鍵開始之前出現(xiàn)搶答情況,雖然已經(jīng)鎖存,但開始按鈕將鎖存信號清零。并且每次停止后,重新開始也會將之前搶答者的鎖存信號清除,進行下一輪的搶答。
l 搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如10秒)。當(dāng)主持人啟動【搶答】鍵后,定時器進行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間為0.5s左右。
l 參賽選手在設(shè)定的時間內(nèi)進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)復(fù)位清除為止。
l 如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。
2. 設(shè)計思路
用8255A作為輸入輸出設(shè)備,A口輸出,c口高位作為輸出,B口作為鍵盤輸入,c口低位作為主持人控制鍵輸入。
8253A作為定時裝置,由0計時器產(chǎn)生1秒為周期的方波,其中高電平0.5秒,用此0.5秒的高電平作為1計數(shù)器 的門控制信號,控制1計數(shù)器的通斷!1計數(shù)器輸出一定頻率的脈沖,使揚聲器發(fā)聲!
用異或門配合組成電路實現(xiàn)禁止多位選手搶答
3. 硬件設(shè)計
3.1八路競賽搶答器的硬件框圖
1.PNG

3.2通過譯碼器產(chǎn)生片選信號
圖片1.png

3.3顯示電路設(shè)計
8255芯片的A口分別與數(shù)碼管的八個引腳相連。將8255芯片中需要顯示的信息通過A口送入數(shù)碼顯示區(qū),由數(shù)碼管的亮滅顯示出來。
圖片2.png

3.4異或門實現(xiàn)禁止多位選手搶答
圖片3.png
3.5搶答電路設(shè)計
圖片4.png
3.6開始搶答和復(fù)位電路  (開始按鈕要有對鎖存信號的清除功能)
8255芯片的PC0口對應(yīng)【搶答】按鍵,PC1口對應(yīng)【復(fù)位】按鍵。將搶答開始和結(jié)束的信號(由開始按鍵和復(fù)位按鍵控制)通過C口送入8255芯片。二極管的作用:開始按鈕清除鎖存信號,而鎖存信號不影響開始按鈕。
圖片5.png
4. 軟件設(shè)計
4.1主程序流程圖
圖片6.png

4.2程序設(shè)計
CODE SEGMENT
ASSUME CS:CODE,DS:DATA   
START:
       MOV AX,DATA
       MOV DS,AX  
                             ;8255初始化            
       MOV DX,0EEH               
       MOV AL,10000011B             ;A,B,C方式0,A,C輸出,B輸入
       OUT DX,AL
       MOV BP,00                     ;BP初值設(shè)置0
CC1:  CALL BB1                    ;開始顯示0
       MOV DX,0ECH                 ;讀取C口低位值
       IN AL,DX
       AND AL,0FH               ;檢查主持人開始搶答鍵是否按下
       CMP AL,0EH
       JNE CC1                     ;沒按下,跳到cc1,繼續(xù)顯示0
       CALL BB2                   ;驅(qū)動揚聲器
       MOV CX,0FFH
       MOV BP,10                     ;設(shè)置搶答時間20秒
CC2:  CALL BB1                    ;按下,開始顯示20秒倒計時      
       MOV DX,0EAH               ;讀取b口值,看是否有人搶答
       IN AL,DX
       CMP AL,0FFH
       JNE CC3                         ;有人搶,跳CC3處理
       DEC COUNT   
       JNZ CC2  
       MOV COUNT,50                    ;沒人搶,倒計時,每延時一秒
       DEC BP
       JS CC4                            ;倒計時結(jié)束時跳CC4
       JMP CC2
   CC4:MOV BP,0
       CALL BB1
       CALL BB2                         ;倒計時結(jié)束響喇叭
       JMP CC1
CC3:  MOV SI,08H                        ; 鍵值1-8
       CALL BB2                        
NEXT: IN AL,DX
       CMP AL,TABLE2[SI]             ;檢查鍵值
       JE DONE
       DEC SI
       JMP NEXT
DONE:  MOV DX,0ECH                 ;顯示鍵值
       MOV AL,0E0H
       OUT DX,AL
       LEA BX,TABLE1                   ;取段碼
       MOV AX,SI
       XLAT
       MOV DX,0E8H
       OUT DX,AL
       CALL DELAY
       CALL BB1
       MOV DX,0ECH
       IN AL,DX
       AND AL,0FH                ; 檢查停止鍵
       CMP AL,0DH
       JNE DONE                   ; 按下,停止
       MOV BP,0
       CALL BB2                    ;顯示00此處響喇叭(復(fù)位響喇叭
       JMP CC1                            ;準(zhǔn)備下一輪搶答
BB1 PROC NEAR                         ;顯示子程序
       MOV AL,0B0H                       ;第三位顯示
       MOV DX,0ECH                        ;C口高位
       OUT DX,AL            ; 此為了數(shù)碼管完整顯示必須先送位后送段碼            
       MOV AX,BP
       MOV DL,0AH
       DIV DL
       MOV BX,OFFSET TABLE1
       XLAT
       MOV DX,0E8H
       OUT DX,AL  
       CALL DELAY  
       MOV AL,70H                    ;第四位顯
       MOV DX,0ECH                ;C口高位
       OUT DX,AL
       MOV AL,AH
       XLAT
       MOV DX,0E8H
       OUT DX,AL   
       CALL DELAY
       RET
BB1    ENDP
BB2   PROC  NEAR             ;8253驅(qū)動發(fā)聲子程序                           
       MOV AL,16H
       OUT 0F6H,AL
       MOV AX,1000
       OUT 0F0H,AL
       MOV AH,AL
       OUT 0F0H,AL
       MOV AL,56H
       OUT 0F6H,AL
       MOV AL,2
       OUT 0F2H,AL
       MOV CX,50
  L:   CALL DELAY
       LOOP L
       AND AL,00H                     ;關(guān)喇叭
       OUT 0F6H,AL
       RET
BB2   ENDP
DELAY PROC NEAR              ; 延時子程序
    PUSH BX
    PUSH CX
    MOV BX,10
T0:  MOV CX,0FFH
T1: LOOP T1
    DEC BX
    JNZ T0  
    POP CX
    POP BX
    RET
DELAY ENDP
CODE ENDS

DATA SEGMENT
  TABLE1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
  TABLE2 DB 0FFH,0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH

  COUNT DB 50       ; 設(shè)置變量
  DATA ENDS

      END START

搶答器壓縮包:
簡易搶答器.zip (55.27 KB, 下載次數(shù): 212)



回復(fù)

使用道具 舉報

ID:705047 發(fā)表于 2020-3-19 16:13 | 顯示全部樓層
這個實驗里面的選手7與選手8反了要注意
開始搶答后倒數(shù)10秒,搶到顯示搶到人的序號
復(fù)位后重新開始
回復(fù)

使用道具 舉報

ID:705047 發(fā)表于 2020-3-19 16:23 | 顯示全部樓層
本帖最后由 colorb 于 2020-3-20 17:36 編輯
colorb 發(fā)表于 2020-3-19 16:13
這個實驗里面的選手7與選手8反了要注意,3與4也反了
開始搶答后倒數(shù)10秒,搶到顯示搶到人的序號
復(fù)位后重新開始

原理圖中U8的D2 D3腳
U7的D2 D3腳
的網(wǎng)絡(luò)標(biāo)號換一下即可恢復(fù)正常
回復(fù)

使用道具 舉報

ID:796302 發(fā)表于 2020-7-4 15:54 | 顯示全部樓層
運行后按下復(fù)位鍵再按搶答鍵為什么就不正常了呢,無論哪個選手按下輸出C:\Users\cang'hai'yi'xiao\Desktop都變成0
回復(fù)

使用道具 舉報

ID:801561 發(fā)表于 2020-7-13 10:53 | 顯示全部樓層
有幾個搶答按鈕顯示的數(shù)字不正確 沒有顯示對應(yīng)的數(shù)字而是顯示0
回復(fù)

使用道具 舉報

ID:227463 發(fā)表于 2020-7-18 09:23 | 顯示全部樓層
Maxwell23 發(fā)表于 2020-7-13 10:53
有幾個搶答按鈕顯示的數(shù)字不正確 沒有顯示對應(yīng)的數(shù)字而是顯示0

常按按鍵就可以,都可以正常顯示
回復(fù)

使用道具 舉報

ID:806537 發(fā)表于 2020-7-21 23:59 | 顯示全部樓層
正好這幾天做這個八位競賽器的設(shè)計,運行總是出現(xiàn)問題,而這個帖子給了一個比較好的參考。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表