嚴(yán)敏
摘 要: 設(shè)計(jì)了一種以單片機(jī)AT89S51為控制核心的8路搶答器,從硬件電路制作和軟件程序編寫(xiě)兩個(gè)方面詳細(xì)介紹了8路搶答器的設(shè)計(jì)方法。實(shí)驗(yàn)結(jié)果表明,該8路搶答器的設(shè)計(jì)達(dá)到了預(yù)期的要求,具有反應(yīng)快、操作簡(jiǎn)便、成本低廉、使用性強(qiáng)等特點(diǎn),對(duì)于單片機(jī)產(chǎn)品的開(kāi)發(fā)具有一定的參考價(jià)值。
關(guān)鍵詞: 單片機(jī); 搶答器; CD4068
中圖分類(lèi)號(hào): TP 368.1 文獻(xiàn)標(biāo)志碼: A 文章編號(hào): 1671-2153(2017)03-0089-03
0 引 言
隨著當(dāng)今社會(huì)的進(jìn)步和科技的發(fā)展,各類(lèi)比賽、娛樂(lè)活動(dòng)層出不窮,其中搶答器的作用也就顯而易見(jiàn),它能快速準(zhǔn)確、公平公正、直觀地判斷出搶答者的機(jī)器設(shè)備,并通過(guò)LED數(shù)碼管、LED指示燈等手段顯示出第一個(gè)搶答者。傳統(tǒng)的搶答器采用模擬電路、數(shù)字集成電路、模數(shù)混合電路制作完成,這類(lèi)搶答器往往線路復(fù)雜,成本偏高,操作不簡(jiǎn)便。本文以AT89S51單片機(jī)為系統(tǒng)控制核心設(shè)計(jì)了一款8路搶答器:首先進(jìn)行硬件電路的設(shè)計(jì)與制作,然后進(jìn)行相應(yīng)軟件程序的設(shè)計(jì)與編寫(xiě),不斷調(diào)試直至成功。
1 設(shè)計(jì)分析
使用8個(gè)按鍵作為參賽選手搶答的8路搶答信號(hào),當(dāng)主持人宣布搶答時(shí),即按下開(kāi)始鍵后,各路選手才可以搶答,對(duì)于第一個(gè)搶答的選手,通過(guò)一位LED數(shù)碼管直觀顯示出該搶答選手的編號(hào),如果主持人尚未宣布比賽活動(dòng)開(kāi)始,即沒(méi)有按下開(kāi)始鍵,就有某一路選手進(jìn)行搶答,則這路的選手屬于犯規(guī),亮起紅燈。本次設(shè)計(jì)中,用LED發(fā)光二極管來(lái)表示,并通過(guò)LED數(shù)碼管顯示出該犯規(guī)選手的編號(hào),此時(shí),按下復(fù)位鍵后重新開(kāi)始搶答。
2 硬件電路設(shè)計(jì)
本設(shè)計(jì)以AT89S51單片機(jī)為系統(tǒng)控制核心制作8路搶答器,由于8路選手使用8個(gè)按鍵,假設(shè)采用8個(gè)獨(dú)立按鍵,按鍵的識(shí)別是通過(guò)逐個(gè)查詢(xún)每個(gè)按鍵的狀態(tài)來(lái)判斷是否按下的,如果有多個(gè)選手同時(shí)搶答,即幾路按鍵同時(shí)按下,先查詢(xún)的按鍵則被認(rèn)為是第一個(gè)搶答的,顯然就不公平了;假設(shè)采用4×4行列式按鍵,按鍵的識(shí)別如果采用輸入輸出線反轉(zhuǎn)法,則無(wú)法識(shí)別多個(gè)按鍵,按鍵的識(shí)別如果采用逐行掃描法,此時(shí)有多個(gè)選手同時(shí)搶答,則先掃描到行的按鍵存在優(yōu)先查詢(xún)的情況,同樣失去了公平性。因此,無(wú)論獨(dú)立按鍵還是4×4行列式按鍵,都不能做到對(duì)多個(gè)按鍵同時(shí)按下作出判斷。
為了解決這一問(wèn)題,可以使用高速的數(shù)字電路芯片,但這增加了設(shè)計(jì)的成本和復(fù)雜性。本設(shè)計(jì)的思路是:使用單片機(jī)的外部中斷,把8路上的按鍵信號(hào)作為外部設(shè)備,一旦有一個(gè)按鍵按下,立即進(jìn)入外部中斷服務(wù)子程序,先保存各路按鍵的狀態(tài),再確定是哪一路的按鍵引起的中斷,在這期間,單片機(jī)的CPU不再響應(yīng)其他任何中斷。
由于8路搶答器的8個(gè)按鍵作為8個(gè)外部中斷源,而MCS-51單片機(jī)只有兩個(gè)外部中斷源,這就需要擴(kuò)展外部中斷源來(lái)滿足需要。本設(shè)計(jì)使用CD4068芯片來(lái)解決,結(jié)合中斷和查詢(xún)的方式來(lái)擴(kuò)展外部中斷源。CD406芯片是一個(gè)8輸入的與門(mén)/與非門(mén)集成電路,管腳圖和功能邏輯圖如1所示。圖1中:2,3,4,5,9,10,11,12是8路輸入;1管腳是8路與門(mén)輸出端;13管腳是8路與非門(mén)輸出端;7管腳接地;14管腳接電源。
8路搶答器的電路原理圖如圖2所示。圖2中,P3.2為外部中斷0的中斷請(qǐng)求輸入端,將CD4068的1管腳接P3.2,8路搶答器的8個(gè)按鍵分別接CD4068的輸入端,作為擴(kuò)展的外部中斷源。當(dāng)沒(méi)有搶答按鍵按下,根據(jù)與邏輯關(guān)系,P3.2端口為高電平,不響應(yīng)。當(dāng)8路中有一路或者多路搶答按鍵按下,P3.2端口為低電平,響應(yīng)外部中斷0的中斷請(qǐng)求。然后,在外部中斷0的服務(wù)程序中,確定究竟是哪路搶答的。S2為搶答開(kāi)始按鍵,只有主持人宣布比賽開(kāi)始,8位選手才能進(jìn)行搶答。P3.1接紅色發(fā)光二極管,當(dāng)有選手違規(guī)時(shí)點(diǎn)亮。
3 軟件程序設(shè)計(jì)
3.1 主程序設(shè)計(jì)
在主程序main()函數(shù)中主要完成外部中斷的初始化,如打開(kāi)中斷、設(shè)置外部中斷信號(hào)的觸發(fā)方式等,不斷地查詢(xún)搶答開(kāi)始鍵是否按下,即主持人是否宣布開(kāi)始搶答,只有宣布開(kāi)始搶答之后,各路按下的按鍵才算有效,否則違規(guī)。一旦檢測(cè)到搶答開(kāi)始鍵按下,置搶答標(biāo)志位keypress=1,否則等待,其流程圖如圖3所示。具體程序如下:
sbit key=P3^0;
bit keypress=0;
int main() //主函數(shù)
{ IT0=0; //設(shè)置外部中斷0為電平觸發(fā)方式
EA=1;//打開(kāi)中斷
EX0=1; //打開(kāi)外部中斷0
while(1); //死循環(huán)
{ if(!key); //判斷搶答開(kāi)始鍵是否按下
{ delay();
if(!key) //再次判斷搶答開(kāi)始鍵是否按下
{ keypress=1; //設(shè)置搶答標(biāo)志位
while(!key);}}}}
3.2 外部中斷0程序設(shè)計(jì)
當(dāng)8路搶答器中有選手按下?lián)尨疰I,自動(dòng)轉(zhuǎn)入外部中斷0服務(wù)程序執(zhí)行,首先關(guān)閉中斷、保存各路按鍵的狀態(tài),再通過(guò)逐位查詢(xún)獲取按鍵編號(hào),確定究竟是哪一路的按鍵引起的中斷,最后判斷搶答標(biāo)志位keypress,如果keypress=1,說(shuō)明搶答開(kāi)始鍵已經(jīng)按下,主持人已經(jīng)宣布搶答開(kāi)始,則數(shù)碼管顯示搶答選手的編號(hào);如果keypress=0,說(shuō)明主持人尚未宣布搶答開(kāi)始,則屬于犯規(guī),亮起紅燈并顯示犯規(guī)選手的編號(hào),其流程圖如圖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; //關(guān)外部中斷0
state=P2;
switch(state) //switch語(yǔ)句獲取按鍵編號(hào)
{ 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];} //如果搶答標(biāo)志位置1,顯示按鍵編號(hào)
else
{P1=seg[number];led=0;}}//如果犯規(guī),亮起紅燈并顯示按鍵編號(hào)
4 結(jié)束語(yǔ)
本文以AT89S51單片機(jī)為主控制器設(shè)計(jì)了一款8路搶答器。實(shí)驗(yàn)結(jié)果表明,該8路搶答器的設(shè)計(jì)穩(wěn)定可靠,達(dá)到了預(yù)期的要求,具有反應(yīng)快、操作簡(jiǎn)便、成本低廉、使用性強(qiáng)等特點(diǎn),對(duì)于單片機(jī)產(chǎn)品的開(kāi)發(fā)具有一定的參考價(jià)值。
參考文獻(xiàn):
[1] 周向. 基于數(shù)字電路的四路搶答器優(yōu)化設(shè)計(jì)[J]. 武漢交通職業(yè)學(xué)院學(xué)報(bào),2016(1):90-92.
[2] 程建峰. 基于Multisim的多功能8路搶答器的設(shè)計(jì)與仿真[J]. 工業(yè)儀表與自動(dòng)化裝置,2015(1):31-34.
[3] 封伯燕. 8路搶答器的制作原理及制作過(guò)程[J]. 重慶三峽學(xué)院學(xué)報(bào),2012(3):3-5.
[4] 張翠云. 基于AT89C51的八路搶答器的設(shè)計(jì)[J]. 機(jī)電工程技術(shù),2014(8):25-28.
[5] 朱加順. 競(jìng)賽搶答器系統(tǒng)分析[J]. 電子制作,2014(2):90-91.