王法杰
(西安航空職業(yè)技術(shù)學(xué)院 電子工程學(xué)院, 西安 710089)
隨著各類比賽和娛樂活動(dòng)的層出不窮,對(duì)搶答器功能和性能要求越來越高,目前市場(chǎng)上的智力競(jìng)賽搶答器多數(shù)是由數(shù)字電路設(shè)計(jì)組成,雖然功能強(qiáng)大,但是線路復(fù)雜,可靠性、穩(wěn)定性不高,功能相對(duì)簡(jiǎn)單,當(dāng)搶答器路數(shù)多時(shí),成品面積較大、運(yùn)維較困難[1]。因此設(shè)計(jì)以單片機(jī)為核心的新型智能搶答器,利用STC12C5A60S2單片機(jī)及外圍接口實(shí)現(xiàn)搶答系統(tǒng),結(jié)合單片機(jī)的定時(shí)器的功能,將軟件編程與硬件設(shè)計(jì)結(jié)合起來,使得系統(tǒng)能夠準(zhǔn)確地進(jìn)行計(jì)時(shí),通過數(shù)碼管顯示選手號(hào)和時(shí)間,能夠準(zhǔn)確、公平、公正判斷出搶答選手,該系統(tǒng)制作過程簡(jiǎn)單,易于安裝和維護(hù),具有一定的使用和推廣價(jià)值。
八路搶答器系統(tǒng)采用STC12C5A60S2單片機(jī)為控制芯片,與四位一體共陽(yáng)數(shù)碼管SM410561D3B和10只自復(fù)位輕觸開關(guān)按鍵組成[2]。系統(tǒng)的總框圖如圖1所示。
圖1 八路搶答器系統(tǒng)框圖
按鍵模塊包括搶答復(fù)位和搶答開始按鍵,用于電路的復(fù)位和主持人提示搶答開始進(jìn)行倒計(jì)時(shí),以及八位選手進(jìn)行搶答的八個(gè)按鍵,如果選手搶答成功則數(shù)碼管顯示該選手按鍵號(hào),同時(shí)對(duì)應(yīng)選手按鍵的LED小燈發(fā)光,數(shù)碼管的后兩位顯示答題時(shí)間,倒計(jì)時(shí)5S時(shí),蜂鳴器報(bào)警提示[3]。由于數(shù)碼管的段選和位選均由單片機(jī)P0口控制,所以通過74HC573鎖存器來確定位選和段選,鎖存器的使能端由單片機(jī)P2.6和P2.7控制。
八位選手的按鍵由P3口的八位分別控制,P2.0控制搶答器復(fù)位按鍵,P2.1控制搶答開始按鍵,P1 口的八位分別控制與八位選手按鍵相對(duì)應(yīng)的八只LED小燈。程序設(shè)計(jì)時(shí),將按鍵模塊設(shè)計(jì)一個(gè)“KEY.H”頭文件供主函數(shù)調(diào)用[4]。按鍵函數(shù)對(duì)十個(gè)按鍵進(jìn)行編程控制,根據(jù)硬件電路圖,先通過程序進(jìn)行按鍵消抖,對(duì)選手按鍵操作時(shí),用“if語(yǔ)句”判斷按鍵是否按下,延時(shí)一段時(shí)間后再確定是否按下,如果按鍵按下,數(shù)碼管則顯示相應(yīng)的按鍵序號(hào),同時(shí)與該按鍵對(duì)應(yīng)小燈發(fā)光,按鍵標(biāo)示為清零,例如判斷按鍵1是否按下,主要代碼“if(flag==1) { if(key1==0) { delay(10); if(key1==0) { num=1; flag=0; P1=0xfe;} }”,其中,“flag==1”表示主持人已按下“開始”按鍵標(biāo)志位,當(dāng)“flag==0”時(shí),表示按下開始按鍵的前提條件下,進(jìn)一步判斷是哪位選手搶答成功,并執(zhí)行“ if(flag==0) {show(num,11,temp2/10,temp2%10);}”語(yǔ)句,將選手號(hào)“num”顯示在第一位數(shù)碼管上,第二位數(shù)碼管“g”段發(fā)光,第三位數(shù)碼管顯示答題時(shí)間的十位,第四位數(shù)碼管顯示答題時(shí)間的個(gè)位。其他七位選手按鍵操作類似,只是對(duì)應(yīng)調(diào)整判斷按鍵號(hào)碼,即第一位數(shù)碼管顯示數(shù)值和小燈對(duì)應(yīng)點(diǎn)亮即可。
由于LED數(shù)碼管顯示的位選與段選都由P0口控制,所以用74HC573進(jìn)行位選或段選存儲(chǔ)。當(dāng)74HC573鎖存器的使能端為有效電平即高電平時(shí),則改變輸入端的電平,則相應(yīng)的輸出端與輸入端電平一致,若使能端為低電平,則輸出端的電平為前一次狀態(tài)輸入電平不變,一直保持到使能端有效[5]。程序設(shè)計(jì)時(shí),先選擇位碼,使位碼控制的鎖存器使能端高電平有效,再進(jìn)行位掃描刷新,然后位碼使能端設(shè)置低電平,進(jìn)行段碼顯示,給P0口送入要顯示的數(shù)據(jù),到數(shù)碼管顯示數(shù)組里獲取相應(yīng)的數(shù)值顯示到數(shù)碼管再對(duì)數(shù)碼管段顯示使能清零,數(shù)碼管顯示數(shù)組賦初值定義為“uchar code table_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x7f};”用來顯示“0-9”數(shù)字,數(shù)碼管滅,“g”段點(diǎn)亮和小數(shù)點(diǎn)點(diǎn)亮[6],主要代碼如下:
void display()
{ uchar sx;
for(sx=0;sx<4;sx++)//四位數(shù)碼管
{ wela=1;//位選使能
P0=0x01< wela=0;//位選關(guān)閉 P0=0xff; dula=1;//段選使能 P0=table_seg[seg[sx]];//數(shù)碼管顯示 dula=0; delay(800); }} 主持人按下開始按鍵后3秒鐘開始搶答,數(shù)碼管前兩位不顯示后兩位顯示倒計(jì)時(shí)時(shí)間,到時(shí)間沒人搶答,則進(jìn)定時(shí)器T0中斷進(jìn)行蜂鳴器報(bào)警,同時(shí),四位數(shù)碼管的中間段,即“g”段發(fā)光,說明此次搶答無(wú)效。若在規(guī)定時(shí)間內(nèi)有選手按下按鍵進(jìn)行搶答,答題時(shí)間為90秒,5秒倒計(jì)時(shí)提示,進(jìn)中斷蜂鳴器報(bào)警[7]。程序設(shè)計(jì)主要包含主函數(shù)和中斷函數(shù),在主函數(shù)里配置定時(shí)器T0為工作模式1,打開定時(shí)器,并且開定時(shí)器T0中斷,賦定時(shí)器T0中斷初值為50ms,調(diào)用前面的按鍵與數(shù)碼管顯示頭文件函數(shù),“ key( );”和“display( );”,用“if語(yǔ)句”判斷“flag”標(biāo)志位,當(dāng)“if(flag==1)”時(shí),說明按下“開始”按鍵P2.1,按鍵消抖后,執(zhí)行按鍵函數(shù)里的語(yǔ)句“ if(key10==0) { TR0=1;flag=1;flag1=1; }”,置位按鍵開始和搶答時(shí)間標(biāo)志,同時(shí),調(diào)用數(shù)碼管顯示函數(shù),執(zhí)行語(yǔ)句“ if(flag==1) {show(10,10,temp1/10,temp1%10); }”顯示倒計(jì)時(shí)時(shí)間, 當(dāng)時(shí)間到無(wú)人按下按鍵搶答時(shí),進(jìn)中斷進(jìn)行蜂鳴器報(bào)警“if(temp1==0){ temp1=0;TR0=0;flag=2;beep=0; }”;當(dāng)“flag==2”時(shí),數(shù)碼管“g”段點(diǎn)亮,“if(flag==2){ show(11,11,11,11);}”; 當(dāng)復(fù)位標(biāo)志“flag==3”時(shí),則執(zhí)行語(yǔ)句“ if(flag==3) {show(12,12,12,12);}”,四位數(shù)碼管顯示小數(shù)點(diǎn)[8]。此外,在中斷函數(shù)里要對(duì)答題5s進(jìn)行報(bào)警提示,其流程圖如圖2所示。 圖2 中斷流程圖 中斷函數(shù)里的主要代碼如下: if(num!=0) //有選手按下按鍵 {temp2--; //90 s倒計(jì)時(shí),初值為90 if(temp2<=5) //倒計(jì)時(shí)5 s {beep=~beep;//蜂鳴器報(bào)警 if(temp2==0)//答題時(shí)間到 {temp2=0; TR0=0; beep=1; delay(50000); beep=0; //蜂鳴器報(bào)警 } } } 程序編譯通過后,先下載到proteus仿真軟件電路圖里進(jìn)行調(diào)試,仿真無(wú)誤后焊接硬件電路,這樣可以減少由于電路或程序的問題而導(dǎo)致實(shí)物調(diào)試的故障。仿真電路圖如圖3所示。 單片機(jī)的P0口的8位依次和74HC573的“D0-D7”相連,“P2.7”和“P2.6”進(jìn)行數(shù)碼管位碼和段碼的控制,P3口的八位接搶答選手按鍵,P1口八位接八個(gè)LED小燈[9]。鎖存器74HC573芯片的/OE為高電平時(shí),輸出為高阻態(tài),芯片處于不可控制狀態(tài),在本電路中,如圖3所示,/OE接低電平。 LE是輸出端狀態(tài)改變使能端,當(dāng)LE為低電平,輸出端Q始終保持上一次存儲(chǔ)的信號(hào),當(dāng)LE為高電平時(shí),Q緊隨D的狀態(tài)變化,并將D的狀態(tài)鎖存,電路中,U2和U3的LE分別接單片機(jī)“P2.7”和“P2.6”進(jìn)行數(shù)碼管位碼和段碼的控制。仿真運(yùn)行時(shí)可以模擬搶答過程,例如“6號(hào)選手”按下?lián)尨鹌靼存I時(shí),對(duì)應(yīng)“D6”點(diǎn)亮,同時(shí),數(shù)碼管顯示從90 s開始倒計(jì)時(shí)到了3 s,蜂鳴器報(bào)警[10],實(shí)物制作如圖4所示。 圖4 八路搶答器實(shí)物制作圖 以STC12C5A60S2單片機(jī)為核心設(shè)計(jì)的八路搶答器,采用LED數(shù)碼管進(jìn)行顯示,自動(dòng)鎖存顯示結(jié)果,主持人按下“開始”按鍵后,根據(jù)不同選手搶答信號(hào)的輸入,經(jīng)過單片機(jī)的控制處理并產(chǎn)生與輸入信號(hào)相對(duì)應(yīng)的輸出信號(hào),通過數(shù)碼管顯示相應(yīng)的選手號(hào)和答題時(shí)間,在規(guī)定時(shí)間內(nèi)無(wú)選手搶答或答題時(shí)間結(jié)束前5S,蜂鳴器報(bào)警提示[11]。該系統(tǒng)經(jīng)過實(shí)驗(yàn)驗(yàn)證穩(wěn)定可靠具有一定的實(shí)用價(jià)值。2.3 報(bào)警模塊設(shè)計(jì)
3 軟件仿真與實(shí)物制作
4 總結(jié)