基于51單片機的八路搶答器設計(1)
基于51單片機的八路搶答器設計(1),基于,51,單片機,八路,搶答,設計
畢 業(yè) 設 計
智能競賽搶答器
指導教師
學院名稱
工程學院
專業(yè)名稱
自動化
論文提交日期
2010年 5 月
論文答辯日期
年 月
答辯委員會主席 ____________
評 閱 人 ____________
摘 要
搶答器是一種電子產品,廣泛應用于各種智力和知識競賽場合,是競賽問答中一種常用的必備裝置;從原理上講,它是一種典型的數字電路,其中包括了組合邏輯電路和時序邏輯電路.電路結構形式多種多樣,可以利用簡單的與非門構成,也可以利用觸發(fā)器構成,也可以利用單片機來完成.利用單片機來設計搶答器,使得電路更簡單,功能更優(yōu)越。
本設計是基于單片機控制的六路搶答器,當搶答開始則時間進入倒數,數碼管能夠正確地顯示時間倒數過程。用獨立式鍵盤輸入搶答命令,蜂鳴器發(fā)聲提示。在搶答中,只有按下啟動鍵后的搶答才有效;搶答時間限定為30s;回答正確與錯誤有不同的音樂作為提示;另外還有計分功能,可以記錄每個組搶答所得的積分;再次按下啟動鍵則進入下一輪的搶答,各個組所得的積分會被保存;按下復位鍵則搶答結束,同時積分會被清零。
本系統(tǒng)由于是采用51系列單片機,因此使用Keil C語言進行開發(fā),仿真軟件選擇的是能夠很好仿真單片機系統(tǒng)的Proteus,它能夠將電路的運行結果實時動態(tài)地顯示在界面上,此外它還能和Keil軟件經行聯接調試,使得調試的工作更加方便。
關鍵詞:單片機 顯示 搶答 計分
目 錄
1 設計意義 1
2 系統(tǒng)總體設計 1
2.1 搶答器的設計要求 1
2.2 設計要點 2
3 智能搶答器系統(tǒng)的硬件電路設計 2
3.1 搶答器顯示模塊 2
3.2 搶答器的控制模塊 3
3.3 搶答器的輸入模塊 5
3.4 搶答器其他模塊 6
3.5 搶答器的硬件電路的確定 7
3.5 系統(tǒng)主體部分電路圖 8
4 程序設計說明 9
4.1 搶答主體程序 9
4.1.1 程序流程圖 9
4.1.2 程序注釋 10
4.2 數碼管顯示程序 10
4.2.1 程序流程圖 10
4.2.2 程序注釋 11
4.3 計分程序主體部分 12
4.3.1 程序流程圖 12
4.3.2 程序注釋 12
4.4 蜂鳴器發(fā)聲程序 13
4.4.1程序流程圖 13
4.4.2程序注釋 14
5 軟件使用說明 14
5.1 編程軟件 14
5.2 仿真軟件 15
6 設計調試及性能測定 15
7 結論 16
致謝 17
參考文獻 18
英文摘要 19
附錄1 元器件清單
附錄2 程序清單
畢業(yè)設計成績評定表
I
1 設計意義
電子技術在不斷地發(fā)展,基于單片機的控制系統(tǒng)已廣泛應用于工業(yè)、農業(yè)、電力、電子、智能樓宇等行業(yè),微型計算機作為嵌入式控制系統(tǒng)的主體與核心,代替了傳統(tǒng)的控制系統(tǒng)的常規(guī)電子線路。電子技術和微型計算機的迅速發(fā)展,促進微型計算機測量和控制技術的迅速發(fā)展和廣泛應用,單片機的應用已經滲透到國民經濟的各個部門和領域,它起到了越來越重要的作用。本文就是單片機的其中一個具體應用,將其與搶答器的設計有機地結合起來。
在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設計一個系統(tǒng)來完成這個任務。因為在搶答的過程中,靠視覺是很難判斷出哪組先答題。利用單片機系統(tǒng)來設計搶答器,就可以很好地解決上述的問題,因為單片機的動作是極其迅速的,即使兩組的搶答相差的時間是微秒級的,也可輕松分辨出是哪組優(yōu)先答題,本文的搶答組數可以在六組以內任意使用,當然通過擴展搶答的組數是可以大于6組的。此外還對搶答器的功能進行了一些擴展,如用不同的音樂提示回答是正確還是錯誤;也新增了計分功能,當搶答結束,可以知道各個組別的積分的多少。
而對我們大學生來講,通過本次畢業(yè)設計可以鞏固和加深對電子電路基本知識的理解,提高綜合運用專業(yè)所學知識的能力。與此同時也培養(yǎng)了根據設計需要選學參考書籍,查閱相關手冊、圖表和文獻資料的自學能力。通過設計方案的分析、論證和比較,設計計算和選取元器件、電路焊接、系統(tǒng)的功能調試和檢測等環(huán)節(jié),掌握了一個設計由概念到成品設計過程的各個環(huán)節(jié),也通過電路的調試和性能指標的測試,提高實際動手能力和綜合的電子設計能力。
2 系統(tǒng)總體設計
2.1 搶答器的設計要求
(1)系統(tǒng)設置復位按鈕,按動后,重新開始搶答。
(2)搶答器開始時數碼管顯示序號0,選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。搶答后顯示優(yōu)先搶答者序號,并且不出現其他搶答者的序號。
(3)搶答器具有定時搶答功能。
(4)主持人按下復位開關,使得搶答器再次進入禁止狀態(tài),選手編號的LED數字顯示器燈熄滅,電路進入原來的初始狀態(tài),準備進入下一輪的搶答。
(5)擴展功能為音樂提醒和積分功能。
2.2 設計要點
根據控制系統(tǒng)的工作原理和執(zhí)行裝置,可以將系統(tǒng)設計分為硬件和軟件兩大部分。硬件設計部分,包括編寫電路原理圖、合理選擇元器件、焊接各個元器件,然后對硬件性能進行調試、測試,以達到設計要求。軟件設計部分,首先在設計之前完成系統(tǒng)總框圖和確定各個功能模塊,然后進行具體設計,包括各模塊的流程圖,選擇合適的編程語言和軟件應用程序,進行編程設計等;最后是通過軟件對程序進行調試、測試,以及仿真,以達到性能的最優(yōu)化。
下面是軟硬件設計方法確定的。軟件設計的方法與開發(fā)環(huán)境的選取有著直接的關系,本系統(tǒng)由于是采用51系列單片機,因此使用Keil C語言進行開發(fā)。此編程工具相比匯編語言具有結構化、適用范圍大、可移植性好等特點。本系統(tǒng)軟件設計采用模塊化系統(tǒng)設計方法,先編寫各個功能模塊子程序,然后進行組合與調整,經過調試后,可以進行仿真測試,已達到設計功能要求。為配合軟件的靈活設計,硬件電路是采用結構化系統(tǒng)設計方法,該方法保證設計電路的標準化、模塊化。硬件電路的設計最重要的選擇用于控制的單片機,再確定與之配套的外圍芯片,使所設計的系統(tǒng)既經濟又高性能。硬件電路設計可以在焊接元器件之前畫出詳細電路圖,標出芯片的型號、器件參數值,根據電路圖在仿真軟件上進行調試,發(fā)現設計錯誤時立即修改,高效,準確地完成硬件設計。
3 智能搶答器系統(tǒng)的硬件電路設計
3.1 搶答器顯示模塊
搶答器必須用到一些顯示模塊,對于一般的電子設計主要考慮以下兩種顯示方案。
方案一:使用液晶屏顯示。液晶顯示屏具有輕薄短小、低耗電量、無輻射危險,平面直角顯示以及影像穩(wěn)定不閃爍等優(yōu)勢,可視面積大,畫面效果好,分辨率高,抗干擾能力強的特點。但由于選手和編號信息量比較少,且由于液晶是以點陣的模式顯示各種符號,編程工作量大,控制器的資源占用較多,其成本也偏高。在使用時,不能有靜電干擾,否則易燒壞液晶顯示芯片,不易維護。
方案二:在使用傳統(tǒng)的數碼管顯示。數碼管具有:低能耗、低損耗、低壓、壽命長、耐老化、防曬、防潮、防火、防高(低)溫,對外界環(huán)境要求低,易于維護,同時其精度高,稱量快,精確可靠,操作簡單。數碼顯示是采用BCD編碼顯示數字,程序編譯容易,資源占用較少。
綜上所述,選用方案二,這里使用四位共陰極數碼管作為顯示模塊。
圖1 四位共陰極數碼管
3.2 搶答器的控制模塊
控制器主要用于各模塊控制對顯示、搶答、音樂、計分等??刂破鞯倪x擇有以下兩鐘方案。
方案一:采用FPGA(現場可編程門列陣)作為系統(tǒng)的控制器。FPGA可以實現各種復雜的邏輯功能,規(guī)模大,密度高,它將所有器件集成在一塊芯片上,減小了體積,提高了穩(wěn)定性,并且可以應用EDA軟件仿真、調試,易于進行功能擴展。但由于本設計對數據處理的速度要求不高,FPGA的高速處理的優(yōu)勢得不到充分體現,并且由于其集成度高,使其成本偏高,同時由于芯片的引腳較多,實物硬件電路板布線復雜,加重了電路設計和實際焊接的工作。
方案二:采用ATMEL公司的AT89S52作為系統(tǒng)控制器的CPU方案。單片機算術運算功能強,軟件編程靈活、自由度大,可以用軟件編程實現各種算法和邏輯控制,并且由于其功耗低、體積小、技術成熟和成本低等優(yōu)點,使其在各個領域應用廣泛。
通過以上分析,采用方案二,選用AT89S52作為控制模塊。
AT89S52單片機是一種低功耗、高性能CMOS 8位微控制器,具有8k在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52單片機為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。
AT89S52引腳圖如圖2所示。
圖2 AT89S52引腳圖
AT89S52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路[1]。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。
89S52基本外圍電路:
①時鐘電路:
單片機的時鐘信號用來提供單片機片內各種微操作的時間基準,時鐘信號通常用兩種電路形式得到:內部振蕩和外部振蕩。AT89S52單片機內部有一個用于構成振蕩器的高增益反向放大器,引腳XTALl和XTAL2分別是此放大電器的輸入端和輸出端,由于采用內部方式時,電路簡單,所得的時鐘信號比較穩(wěn)定,實際使用中常采用這種方式,如圖3所示在其外接晶體振蕩器(簡稱晶振)或陶瓷諧振器就構成了內部振蕩方式,片內高增益反向放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起可構成一個自激振蕩器并產生振蕩時鐘脈沖[2]。圖3中外接晶體以及電容C9和C10構成并聯諧振電路,它們起穩(wěn)定振蕩頻率、快速起振的作用,其值均為30pF左右,晶振頻率選12MHz。
圖3 晶振電路
②復位電路:
為了初始化單片機內部的某些特殊功能寄存器,必須采用復位的方式,復位后可使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開始正常工作。單片機的復位是靠外電路來實現的,在正常運行情況下,只要RST引腳上出現兩個機器周期時間以上的高電平,即可引起系統(tǒng)復位,但如果RST引腳上持續(xù)為高電平,單片機就處于循環(huán)復位狀態(tài)。復位后系統(tǒng)將I/O口寄存器置為0FFH,堆棧指針SP置為07H,SBUF內置為不定值,其余的寄存器全部清0,內部RAM的狀態(tài)不受復位的影響,在系統(tǒng)上電時RAM的內容是不定的。復位操作有兩種情況,即上電復位和手動(開關)復位。本系統(tǒng)采用手動復位和上電復位組合方式。
復位電路如圖4所示。
圖4 復位電路
3.3 搶答器的輸入模塊
鍵盤是單片機不可缺少的輸入設備,是實現人機對話的紐帶。鍵盤的類型很多,常用的有獨立式鍵盤,行列式鍵盤等。
方案一:行列式鍵盤
行列式鍵盤是用N條I/O線作為行線,M條I/O線作為列線組成的鍵盤,在行線和列線的每個交叉點上,設置一個按鍵中按鍵的個數是M*N個。這種形式的鍵盤結構,能夠有效的提高單片機系統(tǒng)中I/O的利用率。
CPU對鍵盤的掃描可以采用取程序控制的隨機方式,即只有在CPU空閑是時才去掃描鍵盤,響應操作人員的鍵盤輸入,但CPU在執(zhí)行應用程序的過程中,不能響應鍵盤輸入,對鍵盤的掃描可以采用定時方式,即利用單片機內部定時器每隔一定時間對鍵盤掃描一次,這樣控制方式,不管鍵盤上有無鍵閉合,CPU總是定時的關心鍵盤狀態(tài)。
方案二:獨立式鍵盤
鍵盤接口中使用多少根I/O線,鍵盤中就有幾個按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中各按鍵的工作互不干擾。因此可以根據實際需要對鍵盤中的按鍵靈活的編碼[3]。
最簡單的編碼方式就是根據I/O輸入口所直接反映的相應按鍵,按下的狀態(tài)進行編碼,稱按鍵直接狀態(tài)碼,對于這樣編碼的獨立式鍵盤,CPU可以通過直接讀取I/O口的狀態(tài)來獲取按鍵的直接狀態(tài)編碼值,根據這個值直接進行按鍵識別,這樣形式的鍵盤結構簡單,按鍵識別容易。
獨立式鍵盤的缺點是需要占用比較多的I/O口線,當單片機應用系統(tǒng)鍵盤中需要的按鍵比較少或I/O口線比較富余時,可以采用這樣類型的鍵盤。
通過分析本系統(tǒng)中所需的按鍵比較少,選用方案二獨立式鍵盤。
圖5 獨立式鍵盤
3.4 搶答器其他模塊
發(fā)聲模塊:經過一個三極管和電容組成的電流放大電路驅動蜂鳴器,改變通電頻率從而改變發(fā)聲的音調。
蜂鳴器驅動電路如圖7所示。
圖7 蜂鳴器驅動電路
LED燈模塊:本設計采用6路led燈的共陰極連接,用于顯示搶答成功的組數。電路如圖8所示。
圖8 LED電路
3.5 搶答器的硬件電路的確定
搶答器同時供6名選手或6個代表隊比賽,分別用6個按鈕表示。設置一個系統(tǒng)清除和搶答控制按扭,以及兩個分別表示答對或答錯的的按鈕,控制加減分,以上三按鈕由均由主持人控制??刂颇K使用單片機,型號為AT89S52,由單片機執(zhí)行程序控制各個組件實現功能。顯示方面使用4位共陰極的數碼管,用動態(tài)掃描的顯示方式顯示數字[4]。外加6個發(fā)光二極管表示成功搶答的選手,并且有一個蜂鳴器發(fā)聲,答對或答錯用不同音樂提醒。
3.5 系統(tǒng)主體部分電路圖
控制芯片采用單片機AT89S52,顯示功能采用4位的共陰極數碼管,輸入硬件是用獨立式鍵盤,用蜂鳴器發(fā)聲來提示搶答的正確與否,每個選手前有一個發(fā)光二極管,用于提示成功搶答的小組。
系統(tǒng)仿真電路圖如圖9所示。
圖9 主體部分電路圖
4 程序設計說明
4.1 搶答主體程序
4.1.1 程序流程圖
程序不斷地掃描單片機的各個輸入端口,即各個選手的按鍵。當有按鍵按下時將成功搶答的選手組號顯示在數碼管上,同時蜂鳴器響起,直到啟動鍵再次被按下時則繼續(xù)掃描各個輸入端口,進入下一輪的搶答。
程序流程圖如圖10所示。
開始
初始化
顯示組號
蜂鳴器響起
第一組
第二組
第三組
第六組
否
是
是
否
否
是
是
圖10 程序搶答部分流程圖
4.1.2 程序注釋
程序如下所示:
if(n) /*n時間到后不能再按*/
{if(m1==0) t=1;
else if(m2==0) t=2; /*掃描按鍵,確定搶答成功的小組*/
else if(m3==0) t=3;
else if(m4==0) t=4;
else if(m5==0) t=5;
else if(m6==0) t=6;
else if(m7==0) t=7;
}
while(t) /*t不為零即有鍵按下*/
{
if(m==0)
{switch(t) /*判斷按鍵并作出相應的操作*/
{ case 1:{TR0=0;i=1;second=0;led1=1;beept(100);m=1;break;}
case 2:{TR0=0;i=2;second=0;led2=1;beept(100);m=1;break;}
case 3:{TR0=0;i=3;second=0;led3=1;beept(100);m=1;break;}
case 4:{TR0=0;i=4;second=0;led4=1;beept(100);m=1;break;}
case 5:{TR0=0;i=5;second=0;led5=1;beept(100);m=1;break;}
case 6:{TR0=0;i=6;second=0;led6=1;beept(100);m=1;break;}
case 7:{i=0;second=29;m=1;t=0;beept(100);while(!m7);
TR0=1;break;}
}
}
4.2 數碼管顯示程序
4.2.1 程序流程圖
在寫程序之前需要先測出數碼管顯示數字時它各個引腳的電平情況,從而得出各個數字的代碼,控制單片機輸出不同的代碼,就能顯示不同的數字。本次的程序采取動態(tài)掃描的編程方式,一般顯示的頻率在50hz左右,眼睛不會感到有閃爍感,因此應該適當地選擇顯示延時的時間。
程序流程圖如圖11所示。
子程序入口
查表取得段碼
位碼送驅動顯示
段碼送數碼管顯示
延時
圖11 數碼管顯示程序流程圖
4.2.2 程序注釋
數碼管顯示程序如下:
void display(uchar shiwei,uchar gewei,uchar xuanshou)
{P2=0xfd; /*位選*/
P0=shiwei; /*段選*/
delay_us(80); /*延時顯示*/
P2=0xfe;
P0=gewei;
delay_us(80);
P2=0xf7;
P0=xuanshou;
delay_us(80);
}
4.3 計分程序主體部分
4.3.1 程序流程圖
當有選手成功搶答并回答完問題后,回答正確的按下加分鍵,則分數加5分,按下減分鍵則分數減5分。分數上限是80分,下限是0分。數碼管實時顯示分數值,直到按下復位鍵后,分數才會被清零。
程序流程圖如圖12所示。
圖12 計分程序流程圖
4.3.2 程序注釋
計分程序如下:
uint tab1[]={0,0,0,0,0,0,0} ;
if(m1==0) t=1; /*掃描按鍵,確定搶答成功的小組*/
else if(m2==0) t=2;
else if(m3==0) t=3;
else if(m4==0) t=4;
else if(m5==0) t=5;
else if(m6==0) t=6;
i=t;
if(bu1==0)
if(tab1[i]<80) tab1[i]=tab1[i]+5; /*最高分80分,每按一下加分鍵
if(bu2==0) 加5分*/
if(tab1[i]!=0) tab1[i]=tab1[i]-5; /*最低分0分,每按一下減分鍵
減五分*/
4.4 蜂鳴器發(fā)聲程序
4.4.1程序流程圖
發(fā)聲部分主要是通過改變蜂鳴器的通斷頻率去改變聲調,具體是改變高低電平的延遲時間,頻率越高則聲調越高,頻率越低則聲調越低。
程序流程圖如圖13所示。
圖13 蜂鳴器發(fā)聲程序流程
4.4.2程序注釋
蜂鳴器發(fā)聲程序如下:
void sound_ok() /*回答正確子程序*/
{ uchar a,b;
TR1=0;
for(a=4;a>0;a--)
{for(b=900;b;b--)
{ beep=1; /*開蜂鳴器*/
delay_us((a+5)*10); /*改變高電平持續(xù)時間*/
beep=0; /*關蜂鳴器*/
delay_us((a+5)*10); /*改變低電平持續(xù)時間*/
}
}
}
void sound_err(void) /*回答錯誤子程序*/
{uchar a,b;
TR1=0;
for(a=1;a<5;a++)
{for(b=900;b;b--)
{ beep=1; /*開蜂鳴器*/
delay_us((a+5)*10); /*改變高電平持續(xù)時間*/
beep=0; /*關蜂鳴器*/
delay_us((a+5)*10); /*改變低電平持續(xù)時間*/
}
}
}
5 軟件使用說明
5.1 編程軟件
本系統(tǒng)由于是采用51系列單片機,因此使用Keil C語言進行開發(fā),此編程工具相比匯編語言具有結構化、適用范圍大、可移植性好等特點。本系統(tǒng)軟件設計采用模塊化系統(tǒng)設計方法,先編寫各個功能模塊子程序,然后進行組合與調整達到設計功能要求。編程軟件選擇Keil uVision3,Keil軟件是目前最流行開發(fā)MCS-51系列單片機的軟件,Keil提供包括C編譯器,宏編譯,連接器,庫管理器和一個功能強大的仿真調試器等在內的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。
5.2 仿真軟件
仿真軟件我選擇的是能夠很好仿真單片機系統(tǒng)的Proteus,下面就這一軟件作一些說明。
Proteus ISIS是英國Labcenter公司開發(fā)的電路分析與實物仿真軟件。它運行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點是:①實現了單片機仿真和SPICE電路仿真相結合。具有模擬電路仿真、數字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS232動態(tài)仿真、I2C調試器、SPI調試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。②支持主流單片機系統(tǒng)的仿真。目前支持的單片機類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。③提供軟件調試功能。在硬件仿真系統(tǒng)中具有全速、單步、設置斷點等調試功能,同時可以觀察各個變量、寄存器等的當前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時支持第三方的軟件編譯和調試環(huán)境,如Keil C51 uVision2等軟件。④具有強大的原理圖繪制功能??傊撥浖且豢罴瘑纹瑱C和SPICE分析于一身的仿真軟件,功能極其強大。
6 設計調試及性能測定
首先是數碼管的調試,因為在硬件各模塊中出錯機會比較大的就是數碼管的顯示混亂。按照設計前測出的位碼和段碼編寫一小程序,四位同時依次顯示0至9,測試段碼的編碼是否正確,看是否有顯示錯誤的段位。與此同時,因為本設計采用的是動態(tài)掃描的顯示方式,因此要設定每一位的顯示時間,根據人的視覺殘留的特性,為保持視覺上的沒有閃爍感,每位的顯示時間應小于1ms,經過多次測試,發(fā)現在80微妙的時候具有較好的顯示效果。然后是位碼的測試,將程序改為讓數碼管的1至4位依次顯示數字1~4,經測試后,顯示正常。數碼管經測試功能正常。
然后是最重要也是最困難的,就是程序的調試。
首先根據功能要求編寫程序,在單獨測試中各個模塊的程序功能正常,但將各個部分結合在一起的時候遇到了一個問題,就是顯示程序與發(fā)聲程序之間有一定的沖突,例如要求在倒計時開始和結束的時候要求有一聲0.5秒左右的鳴叫聲,但是發(fā)現在發(fā)聲的這段時間里數碼管沒有了顯示,因為單片機在同一個時間里只能執(zhí)行一條程序。經過一番努力終于想到的解決的方法,因為原來的數碼管顯示間隔與計時倒數是公用同一個定時器的,因此間隔過大,解決方案為:數碼管顯示程序用另外一個定時器來調用,并使用較小的顯示間隔,這樣當要發(fā)聲時數碼管上仍然有顯示,因為這時程序在發(fā)聲和顯示模塊之間快速的來回跳動,而且數碼管沒有閃爍感。
再而是發(fā)聲程序的調試,本設計是利用通過給蜂鳴器不同的頻率使其發(fā)出不同的響聲,從而區(qū)別開回答正確與否的不同音樂聲。首先在仿真軟件上調試,回答正確是用頻率由低到高的四聲鳴叫表示,而回答錯誤則是用頻率由高到低的四聲鳴叫表示,經過多次頻率的測試得到了較好的效果。最后是實物調試,因為畢竟仿真跟實物是有一定的區(qū)別的,果然,在實物調試時效果不是很理想,通過實物的在線調試后,其發(fā)聲效果達到一個較滿意的效果。
另外是其余部分的調試,包括鍵盤響應和發(fā)光二極管的亮暗,經調試其余部分功能正常。
設計各個部分功能調試完畢,顯示正常,發(fā)聲正常,搶答正常,計分正常,
并且性能良好。
7 結論
本設計是基于單片機的智能競賽搶答器。系統(tǒng)設置復位按鈕,按動后,搶答器進入禁止狀態(tài),數碼管顯示序號0,所有數據復位。按下啟動按鈕,搶答開始,選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號保持顯示,其LED亮起。搶答器具有定時搶答功能,倒數時間為30s。主持人再次按下啟動按鈕,選手編號的LED數字顯示器燈熄滅,進入下一輪的搶答倒數。擴展功能為音樂提醒和積分功能,回答的正確與否用不同的音調提示,并且可以記錄各個選手的積分,一直保存直到按下復位鍵后清零。
致 謝
時光的流逝也許是客觀的,然而流逝的快慢卻純是一種主觀的感受。忽然間意識到,原來四年已經過去,到了該告別的時候了。一念至此,不禁有些惆悵。想到自己要踏上人生的另外一個征途,激動之余也有點不舍。
回想大學四年,首先要感謝的就是所有教導過我的老師,他們都有在不同的領域給了我啟發(fā),提升了我的專業(yè)知識與技能,也使我學到了很多為人處事的道理,這就是一種成長的過程。然后要感謝的是我大學所有的朋友,有了你們互相扶持,互相鼓勵,我的大學生活才會添上各種不同的色彩,雖然我們都沒有明說,我知道我們都很珍惜彼此。還有就是我的父母,你們的養(yǎng)育與培養(yǎng)之恩我畢生不忘,我會努力變強,承擔照顧你們的責任。
參 考 文 獻
[1]謝振輝. 改進式MCS-51單片機實驗. 北京:科學出版社,2006: 121-156
[2]李朝青. 單片機原理及接口技術. 北京:北京航空航天大學出版社,2006: 112-132
[3]康華光,鄒壽彬. 電子技術基礎數字部分. 第五版. 北京:高等教育出版社,2005: 72-96
[4]胡偉,季曉衡. 單片機C程序設計及應用實例. 北京:人民郵電出版社,2003: 84-112
[5]曹建樹,夏云生,曾林春. 51單片機實用教程. 北京:中國石化出版社,2008: 66-87
[6]Murray. Single chip microcomputers and their applications. Bell Laboratories,2006: 121-143
Intellectual Competition Responder
Liang Zhanpeng
(College of Engineering,South China Agricultural University,Guangzhou 510642,China)
Abstract:Responder is an electronic product which is widely used in intelligence competitions and knowledge competitions, is a popular and necessary equipment in quiz ;,It is a typical digital circuits, including combinational logic circuit and sequential logic circuits. The responder’s circuit has various forms, you use a simple NAND gate to structure, you can also use triggers or single-chip devices. Using the single-chip device can make the circuits more simple, and make the function superior.
This design is a six-way responder based on a single-chip device. When the responder turn on the time begin to count down, and the Digital tube can show the process correctly. It use a stand-alone keyboard as the output equipment. and use a buzzer as the audible device. During the quiz game, only after the start button being pressed the answer is available. The answer is in a limited time of 30 seconds. The right answer and the wrong answer have different music as a reminder. The responder also have scoring function, it can record the score. When the start button is pressed again, then begin to respond the next question, and the scores are saved. When the reset button is pressed, then the game is over, the score is cleared.
Since this system is based on 51 series, we use Keil C language to develop. Simulation software we choose Proteus that can simulate the single-chip very well. It can display the circuit operating results on the interface dynamically. In addition, it can debug with the Keil to make the debugging much more convenient
Key words:Single-Chip Microcomputer Display Respond Score
19
附錄1 元器件清單
元器件清單
數量
AT89S52
4位公陰數碼管
晶振
發(fā)光二極管
按鍵
蜂鳴器
排阻
電阻(10k)
電阻(220)
電容(33pf)
電容(100pf)
1
1
1
6
10
1
1
1
6
2
1
附錄2 程序清單
#define uchar unsigned char
#define uint unsigned int
#include
sbit m1=P1^0;
sbit m2=P1^1;
sbit m3=P1^2;
sbit m4=P1^3;
sbit m5=P1^4;
sbit m6=P1^5;
sbit m7=P1^6;
sbit beep=P1^7;
sbit led1=P3^2;
sbit led2=P3^3;
sbit led3=P3^4;
sbit led4=P3^5;
sbit led5=P3^6;
sbit led6=P3^7;
sbit bu1=P3^0;
sbit bu2=P3^1;
uchar
code tab[]={0x77,0x11,0x6D,0x3D,0x1B,0x3E,0x7E,0x15,0x7f,0x3F};//數碼
uint tab1[]={0,0,0,0,0,0,0} ; 管編碼
uchar shiwei;
uchar gewei;
uchar count;
uchar xuanshou;
uchar m;
uchar n;
uchar p;
uchar i;
uchar fen;
static unsigned char second=30;
void delay(unsigned int x);
void delay_us(uint i);
void timer();
void sound_ok() ;
void sound_err();
void beept(int a);
void display(uchar shiwei,uchar gewei,uchar xuanshou);
main()
{uint t=0;
beep=0;
P3=0;
i=0;
n=1;
p=1;
fen=0;
shiwei=tab[0];
gewei=tab[0];
xuanshou=tab[0];
timer();
while(m7);
if(m7==0)
{beept(100);
timer();
delay(10);
while(1)
{P3=0x03;
shiwei=tab[second/10];
gewei=tab[second%10];
xuanshou=0;
m=0;
if(n) //n為0表示時間到不能再按鍵
{if(m1==0) t=1;
else if(m2==0) t=2;
else if(m3==0) t=3;
else if(m4==0) t=4;
else if(m5==0) t=5;
else if(m6==0) t=6;
else if(m7==0) t=7;
}
while(t) //有按鍵按下后
{
if(m==0)
{switch(t)
{ case 1:{TR0=0;i=1;second=0;led1=1;beept(100);m=1;break;}
case 2:{TR0=0;i=2;second=0;led2=1;beept(100);m=1;break;}
case 3:{TR0=0;i=3;second=0;led3=1;beept(100);m=1;break;}
case 4:{TR0=0;i=4;second=0;led4=1;beept(100);m=1;break;}
case 5:{TR0=0;i=5;second=0;led5=1;beept(100);m=1;break;}
case 6:{TR0=0;i=6;second=0;led6=1;beept(100);m=1;break;}
case 7:{i=0;second=29;m=1;t=0;beept(100);while(!m7);
TR0=1;break;}
}
}
shiwei=tab[tab1[i]/10];
gewei=tab[tab1[i]%10];
xuanshou=tab[i];
if(m7==0) {i=0;t=0;n=1;second=30;TR0=1;beept(100);fen=0;}
if(bu1==0) sound_ok();
if(bu2==0) sound_err();
}
if(second==0&&p==1) {TR0=0; n=0;p=0;beept(300);}
if(m7==0) {i=0;t=0;n=1;p=1;second=30;TR0=1;}
}
}
}
void timer() //定時器初始化
{TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1 = (65536-1000)/256 ; // 預置定時常數64536(fc18),產生1ms
TL1 = (65536-1000)%256 ; 間隔用于動態(tài)顯示
EA = 1; // 開總中斷
ET0 = 1; // 定時/計數器0允許中斷
ET1 = 1;
TR0=1;
TR1=1;
}
void time0() interrupt 1 using 1 //定時器0中斷倒數子程序
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{count=0;
second--;
}
}
void time1() interrupt 3 //定時器1中斷顯示子程序
{
display( shiwei,gewei,xuanshou);
TH1 = (65536-1000)/256 ; // 預置定時常數64536(fc18),產生1ms
TL1 = (65536-1000)%256 ; 間隔用于動態(tài)顯示
}
void sound_ok() //回答正確調用子程序
{
uchar a,b;
TR1=0;
for(a=4;a>0;a--)
{
for(b=900;b;b--)
{
beep=1; //開蜂鳴器
delay_us((a+5)*10); //延時
beep=0; //關蜂鳴器
delay_us((a+5)*10);
}
}
if(tab1[i]<80) tab1[i]=tab1[i]+5; //回答正確加5分
TR1=1;
}
void sound_err(void) //回答錯誤調用子程序
{
uchar a,b;
TR1=0;
for(a=1;a<5;a++)
{
for(b=900;b;b--)
{
beep=1; //開蜂鳴器
delay_us((a+5)*10);
beep=0; //關蜂鳴器
delay_us((a+5)*10);
}
}
if(tab1[i]!=0) tab1[i]=tab1[i]-5; //回答錯誤減5分
TR1=1;
}
void delay(unsigned int x) //延遲子程序
{uchar j;
while(x--)
{for(j=0;j<100;j++)
;
}
}
void display(uchar shiwei,uchar gewei,uchar xuanshou) //顯示子程序
{P2=0xfd; //段選
P0=shiwei; //位選
delay_us(80); //顯示延遲
P2=0xfe;
P0=gewei;
delay_us(80);
P2=0xf7;
P0=xuanshou;
delay_us(80);
}
void delay_us(uint i) //延遲子程序(微秒)
{
for(;i;i--)
{;}
}
void beept(int a) //發(fā)聲子程序
{ beep=1;
delay(a);
beep=0;
}
收藏