陳娟 顧吳華
摘要:隨著人們生活的多樣性,搶答器作為一個重要的設(shè)備廣泛應(yīng)用于各類競賽中。文章設(shè)計(jì)的四路搶答器以STC89C51單片機(jī)作為主控芯片,實(shí)現(xiàn)的功能主要是:主持人按下 “搶答開始”按鍵后,倒計(jì)時3秒鐘,選手搶答并且顯示搶答成功的小組號。該系統(tǒng)軟硬件相結(jié)合,并且通過?!皬?qiáng)國知識競賽”活動驗(yàn)證了搶答器產(chǎn)品的良好性能。
關(guān)鍵詞:單片機(jī);搶答器;數(shù)碼管
中圖分類號:TP368.1? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)26-0168-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 引言
搶答器作為一款能準(zhǔn)確、直觀、公正地判斷出第一搶答者的電子應(yīng)用設(shè)備,常用于各種各樣的競賽中,搶答器的種類和功能也層出不窮。然而,傳統(tǒng)的搶答器大多采用一些基本的數(shù)字電路來實(shí)現(xiàn),不僅體積大,而且布線復(fù)雜煩瑣、成本較高。隨著科技的發(fā)展,集成度高、控制能力強(qiáng)的單片機(jī)已經(jīng)深入到了各個應(yīng)用領(lǐng)域[1-3]。
2 整體設(shè)計(jì)介紹
本系承擔(dān)了?!皬?qiáng)國知識競賽”的組織任務(wù),要求設(shè)計(jì)一款功能準(zhǔn)確的四路搶答器應(yīng)用于競賽活動中。將該任務(wù)功能設(shè)計(jì)為:主持人按下“搶答開始”按鍵,然后3秒倒計(jì)時,如果單片機(jī)檢測到有選手按下?lián)尨鹌靼存I,則顯示該選手的編號,如果再次搶答,必須由主持人再次按下“搶答開始”按鍵。
3 硬件設(shè)計(jì)
3.1 總體設(shè)計(jì)
在本設(shè)計(jì)中采用STC公司生產(chǎn)的STC89C51 單片機(jī)作為主控芯片,結(jié)合簡單的外圍電路來實(shí)現(xiàn)設(shè)計(jì)任務(wù)。該系統(tǒng)可以進(jìn)行運(yùn)算控制、搶答信號識別與處理以及顯示功能的實(shí)現(xiàn)。具體表現(xiàn)為:用四個獨(dú)立按鍵作為選手搶答鍵,一個獨(dú)立按鍵作為主持人鍵,數(shù)碼管用作顯示組號和倒計(jì)時時間,利用4個LED燈作為選手搶答成功的指示燈。如果主持人按鍵沒有按下,而選手按鍵提前按下?lián)尨穑瑒t單片機(jī)不予處理選手按鍵,即搶答無效。硬件電路的總體設(shè)計(jì)框圖如圖1所示。
3.2 單片機(jī)及獨(dú)立按鍵電路
STC89C51單片機(jī)是STC公司推出的51內(nèi)核單片機(jī),包含有4個8位的并行I/O接口,分別為P0、P1、P2和P3口;其中P1、P2、P3口都是帶內(nèi)部上拉電阻的雙向I/O口,因此在使用時不需要再外接上拉電阻,可簡化電路;而且P1口是唯一的單功能口,僅能作通用的數(shù)據(jù)輸入/輸出口[4-5]。所以將P1.0—P1.3作為四路搶答信號輸入端,K0—K3為四個選手搶答按鍵;P1.4是主持人宣布開始信號輸入端,K4為主持人的“搶答開始”按鍵,單片機(jī)在中斷中循環(huán)檢測P1口的信號,當(dāng)有按鍵按下時,I/O口相應(yīng)的位為低電平。具體電路如圖2所示。
3.3 顯示電路
本系統(tǒng)采用1個4位0.56寸小型共陽極數(shù)碼管,數(shù)碼管均采用三極管驅(qū)動,5V電源,當(dāng)顯示倒計(jì)時和選手組號時,數(shù)碼管工作。P0.0—P0.7為信號的輸出端,接數(shù)碼管的a—dp管腳。具體電路圖如圖3所示。
4 軟件設(shè)計(jì)
4.1 流程圖
本系統(tǒng)的單片機(jī)編程在keil uVision4環(huán)境下完成,用單片機(jī)程序控制系統(tǒng),實(shí)現(xiàn)的功能比較靈活,能較方便地對系統(tǒng)進(jìn)行功能的擴(kuò)張和改進(jìn)。搶答器開始工作時,先進(jìn)行初始化,完成對相關(guān)參數(shù)進(jìn)行配置,以及對定時器進(jìn)行設(shè)置等工作。
然后判斷主持人按鍵是否按下,如果未按下,則返回等待;否則進(jìn)入倒計(jì)時狀態(tài),倒計(jì)時結(jié)束,再判斷是否有選手搶答按鍵按下,如果未按下,則原處等待;否則顯示該搶答成功的選手組號;如進(jìn)行新的一輪搶答,由需主持人按鍵重新按下。
主程序的流程圖如圖4所示。
4.2 主程序
void main ()//主程序
{
Timer0Init();//初始化定時器0
TR0=0;//定時器0停止計(jì)時
while (1) //主循環(huán)
{
if(Cont==0)//初始化搶答器
{
Display(3,0);//調(diào)用顯示子程序
Display(4,0);//調(diào)用顯示子程序
Cont=1;//進(jìn)入搶答開始工作狀態(tài)
}
if(Cont==1)//搶答開始
{
Display(3,0);//調(diào)用顯示子程序
Display(4,0);//調(diào)用顯示子程序
if(K4==0)//判斷主持人按鍵是否按下
{
Delay(50);//調(diào)用延時子程序
if(K4==0)//再次判斷主持人按鍵是否再次按下
{
Miao=3;//初始化倒計(jì)時時間為3秒
TR0=1;//定時器0開始計(jì)時
Cont=2;//進(jìn)入倒計(jì)時3秒工作狀態(tài)
}while(K4!=1);//判斷主持人按鍵是否釋放
}
}
if(Cont==2)//倒計(jì)時3秒
{
Display(4,Miao);//調(diào)用顯示子程序
if(Miao==0)//判斷倒計(jì)時3秒結(jié)束
{
TR0=0;//定時器0停止計(jì)時
Cont=3;////進(jìn)入選手搶答工作狀態(tài)
}
}
if(Cont==3)//選手搶答
{
Display(3,Key_Num/10);//調(diào)用顯示子程序