嚴敏
摘 要: 設計了一種以單片機AT89S51為控制核心的8路搶答器,從硬件電路制作和軟件程序編寫兩個方面詳細介紹了8路搶答器的設計方法。實驗結果表明,該8路搶答器的設計達到了預期的要求,具有反應快、操作簡便、成本低廉、使用性強等特點,對于單片機產品的開發具有一定的參考價值。
關鍵詞: 單片機; 搶答器; CD4068
中圖分類號: TP 368.1 文獻標志碼: A 文章編號: 1671-2153(2017)03-0089-03
0 引 言
隨著當今社會的進步和科技的發展,各類比賽、娛樂活動層出不窮,其中搶答器的作用也就顯而易見,它能快速準確、公平公正、直觀地判斷出搶答者的機器設備,并通過LED數碼管、LED指示燈等手段顯示出第一個搶答者。傳統的搶答器采用模擬電路、數字集成電路、模數混合電路制作完成,這類搶答器往往線路復雜,成本偏高,操作不簡便。本文以AT89S51單片機為系統控制核心設計了一款8路搶答器:首先進行硬件電路的設計與制作,然后進行相應軟件程序的設計與編寫,不斷調試直至成功。
1 設計分析
使用8個按鍵作為參賽選手搶答的8路搶答信號,當主持人宣布搶答時,即按下開始鍵后,各路選手才可以搶答,對于第一個搶答的選手,通過一位LED數碼管直觀顯示出該搶答選手的編號,如果主持人尚未宣布比賽活動開始,即沒有按下開始鍵,就有某一路選手進行搶答,則這路的選手屬于犯規,亮起紅燈。本次設計中,用LED發光二極管來表示,并通過LED數碼管顯示出該犯規選手的編號,此時,按下復位鍵后重新開始搶答。
2 硬件電路設計
本設計以AT89S51單片機為系統控制核心制作8路搶答器,由于8路選手使用8個按鍵,假設采用8個獨立按鍵,按鍵的識別是通過逐個查詢每個按鍵的狀態來判斷是否按下的,如果有多個選手同時搶答,即幾路按鍵同時按下,先查詢的按鍵則被認為是第一個搶答的,顯然就不公平了;假設采用4×4行列式按鍵,按鍵的識別如果采用輸入輸出線反轉法,則無法識別多個按鍵,按鍵的識別如果采用逐行掃描法,此時有多個選手同時搶答,則先掃描到行的按鍵存在優先查詢的情況,同樣失去了公平性。因此,無論獨立按鍵還是4×4行列式按鍵,都不能做到對多個按鍵同時按下作出判斷。
為了解決這一問題,可以使用高速的數字電路芯片,但這增加了設計的成本和復雜性。本設計的思路是:使用單片機的外部中斷,把8路上的按鍵信號作為外部設備,一旦有一個按鍵按下,立即進入外部中斷服務子程序,先保存各路按鍵的狀態,再確定是哪一路的按鍵引起的中斷,在這期間,單片機的CPU不再響應其他任何中斷。
由于8路搶答器的8個按鍵作為8個外部中斷源,而MCS-51單片機只有兩個外部中斷源,這就需要擴展外部中斷源來滿足需要。本設計使用CD4068芯片來解決,結合中斷和查詢的方式來擴展外部中斷源。CD406芯片是一個8輸入的與門/與非門集成電路,管腳圖和功能邏輯圖如1所示。圖1中:2,3,4,5,9,10,11,12是8路輸入;1管腳是8路與門輸出端;13管腳是8路與非門輸出端;7管腳接地;14管腳接電源。
8路搶答器的電路原理圖如圖2所示。圖2中,P3.2為外部中斷0的中斷請求輸入端,將CD4068的1管腳接P3.2,8路搶答器的8個按鍵分別接CD4068的輸入端,作為擴展的外部中斷源。當沒有搶答按鍵按下,根據與邏輯關系,P3.2端口為高電平,不響應。當8路中有一路或者多路搶答按鍵按下,P3.2端口為低電平,響應外部中斷0的中斷請求。然后,在外部中斷0的服務程序中,確定究竟是哪路搶答的。S2為搶答開始按鍵,只有主持人宣布比賽開始,8位選手才能進行搶答。P3.1接紅色發光二極管,當有選手違規時點亮。
3 軟件程序設計
3.1 主程序設計
在主程序main()函數中主要完成外部中斷的初始化,如打開中斷、設置外部中斷信號的觸發方式等,不斷地查詢搶答開始鍵是否按下,即主持人是否宣布開始搶答,只有宣布開始搶答之后,各路按下的按鍵才算有效,否則違規。一旦檢測到搶答開始鍵按下,置搶答標志位keypress=1,否則等待,其流程圖如圖3所示。具體程序如下:
sbit key=P3^0;
bit keypress=0;
int main() //主函數
{ IT0=0; //設置外部中斷0為電平觸發方式
EA=1;//打開中斷
EX0=1; //打開外部中斷0
while(1); //死循環
{ if(!key); //判斷搶答開始鍵是否按下
{ delay();
if(!key) //再次判斷搶答開始鍵是否按下
{ keypress=1; //設置搶答標志位
while(!key);}}}}
3.2 外部中斷0程序設計
當8路搶答器中有選手按下搶答鍵,自動轉入外部中斷0服務程序執行,首先關閉中斷、保存各路按鍵的狀態,再通過逐位查詢獲取按鍵編號,確定究竟是哪一路的按鍵引起的中斷,最后判斷搶答標志位keypress,如果keypress=1,說明搶答開始鍵已經按下,主持人已經宣布搶答開始,則數碼管顯示搶答選手的編號;如果keypress=0,說明主持人尚未宣布搶答開始,則屬于犯規,亮起紅燈并顯示犯規選手的編號,其流程圖如圖4所示。具體程序如下:

unsigned char code seg[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char state,number;
sbit led=P3^1;
void int0() interrupt 0
{ EX0=0; //關外部中斷0
state=P2;
switch(state) //switch語句獲取按鍵編號
{ case 0xfe:number =1;break;
case 0xfd:number =2;break;
case 0xfb:number =3;break;
case 0xf7:number =4;break;
case 0xef:number =5;break;
case 0xdf:number =6;break;
case 0xbf:number =7;break;
case 0x7f:number =8;break;}
if(keydown)
{ P1=seg[number];} //如果搶答標志位置1,顯示按鍵編號
else
{P1=seg[number];led=0;}}//如果犯規,亮起紅燈并顯示按鍵編號
4 結束語
本文以AT89S51單片機為主控制器設計了一款8路搶答器。實驗結果表明,該8路搶答器的設計穩定可靠,達到了預期的要求,具有反應快、操作簡便、成本低廉、使用性強等特點,對于單片機產品的開發具有一定的參考價值。
參考文獻:
[1] 周向. 基于數字電路的四路搶答器優化設計[J]. 武漢交通職業學院學報,2016(1):90-92.
[2] 程建峰. 基于Multisim的多功能8路搶答器的設計與仿真[J]. 工業儀表與自動化裝置,2015(1):31-34.
[3] 封伯燕. 8路搶答器的制作原理及制作過程[J]. 重慶三峽學院學報,2012(3):3-5.
[4] 張翠云. 基于AT89C51的八路搶答器的設計[J]. 機電工程技術,2014(8):25-28.
[5] 朱加順. 競賽搶答器系統分析[J]. 電子制作,2014(2):90-91.