版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于單片機(jī)的智能搶答器的設(shè)計</p><p><b> 1 引言</b></p><p> 搶答器是為各類競賽參賽者答題時進(jìn)行搶答而設(shè)計的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識競賽、文娛活動等場合。傳統(tǒng)的搶答器大部分是基于數(shù)字電路組成的,制作過程復(fù)雜,且準(zhǔn)確性與可靠性不高,受現(xiàn)場環(huán)境影響大,成品面積大,安裝、維護(hù)困難。對于目前搶答器的功能描述
2、,如搶答限時、選手答題計時及犯規(guī)組號搶答器具有搶答自鎖、燈光指示、暫停復(fù)位、電子音樂報時、自動定時、工作模式的切換和時間設(shè)定等功能。</p><p> 本文介紹一種以51系列單片機(jī)為控制核心的智能型搶答器的電路組成、設(shè)計思路和功能。該搶答器除具有基本的強(qiáng)大功能外,還具有計時和報警功能。它對采樣的各路搶答信號進(jìn)行分析,識別超前違規(guī)信號、有效搶答信號,并對它們進(jìn)行處理,從而使每一次搶答過程都有效,保證了搶答過程的快
3、速性、有效性、準(zhǔn)確性、公平性。</p><p><b> 2 設(shè)計方案及原理</b></p><p> 2.1搶答器設(shè)計方案</p><p> ?。?)搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕“1” ~ “8”表示。</p><p> ?。?)設(shè)置一個系統(tǒng)清除和搶答控制的“開始”開關(guān),該開關(guān)由主持人控制。
4、</p><p> ?。?)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚(yáng)聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。</p><p> (4)搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如30秒)。當(dāng)主持人啟動"開始"鍵后,定時器進(jìn)行減計時,同時揚(yáng)聲器發(fā)出短暫的聲響
5、以提示搶答開始。</p><p> ?。?)參賽選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除或者答題計時結(jié)束為止。</p><p> ?。?)如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示FF</p><p> 2.2搶答器設(shè)計原理</p><
6、p> 該搶答器供不多于8名選手或8個代表隊的搶答比賽使用。每個選手的座位前安裝一只搶答按鈕開關(guān)和一只信號燈。主持人的座位前安裝一只復(fù)原按鈕開關(guān)、一只蜂鳴器和一只搶答器工作狀態(tài)指示燈。每當(dāng)主持人口頭發(fā)出允許搶答的號令并按下開始搶答按鈕之后,哪個隊先按下座位上的按鈕開關(guān),該座位的信號燈就先被點亮,同時封鎖其他按鈕開關(guān)的活動,并且熄滅主持人座位上的狀態(tài)指示燈和發(fā)出提示聲,以表明此次搶答動作已經(jīng)完成。在主持人確認(rèn)后,按下復(fù)原按鈕,狀態(tài)指
7、示燈重新點亮,為下一次的搶答作好準(zhǔn)備。電路中的蜂鳴器 LS 是一只帶有助音腔的壓電陶瓷蜂鳴器,用于模擬發(fā)出報警聲的功率放大器和喇叭。LS 可以看作是一個電容性負(fù)載,本身不能流過直流電流。發(fā)聲的原理是,作用在兩個電極極板的電位在發(fā)生變化時,陶瓷材料就發(fā)生彎曲,從而振動空氣發(fā)出聲音。</p><p><b> 3 系統(tǒng)硬件設(shè)計</b></p><p> 3.1AT89
8、C51單片機(jī)介紹</p><p> AT89C51單片機(jī)主要有以下部件構(gòu)成:八位微處理器CPU、振蕩電路、總線控制部件、中斷控制部件、片內(nèi)Flash存儲器、片內(nèi)RAM、并行I/O接口、定時器和串行I/O接口。AT89C51單片機(jī)內(nèi)部由CPU、4KB的FPEROM ,128B的RAM,兩個16位的定時/計數(shù)器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機(jī)內(nèi)部最核心的部分是CPU。</p
9、><p> AT89C51的只要引腳如圖3.1所示。</p><p> 圖3.1 AT89C51引腳圖</p><p> 3.2系統(tǒng)原理電路圖</p><p> 基于以上各個模塊的設(shè)計,可以設(shè)計出系統(tǒng)原理電路圖,P3.0為開始搶答,P3.1為停止,P1.0-P1.7為八路搶答輸入,數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口
10、,RST復(fù)位,XTAL1和XTAL2接晶振電路。</p><p> 系統(tǒng)原理電路圖如圖3.2所示。</p><p> 圖3.2 系統(tǒng)原理電路圖</p><p><b> 4 系統(tǒng)軟件設(shè)計</b></p><p> 為了能夠達(dá)到搶答的公平、公正、合理,應(yīng)該在主持人發(fā)布搶答命令之前必須先設(shè)定搶答的時間,因而在編開始搶
11、答前的程序得先編寫設(shè)定時間的程序,當(dāng)時間設(shè)好了之后,主持人發(fā)布搶答命令按下P3.0按鍵,程序開始打開定時中斷開始倒計時,然后調(diào)用鍵盤掃描子程序,編寫鍵盤掃描程序。當(dāng)在掃描到有人按下了答題鍵,馬上關(guān)閉T0、調(diào)用顯示程序、封鎖鍵盤。</p><p> 4.1系統(tǒng)流程圖設(shè)計</p><p> 系統(tǒng)流程圖如圖4.1所示。</p><p><b> 圖4.1系
12、統(tǒng)流程圖</b></p><p><b> 5 總結(jié)</b></p><p> 課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片
13、機(jī)的開發(fā)技術(shù)是十分重要的。</p><p> 回顧起此次單片機(jī)課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在短短一星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真
14、正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說三極管PNP管腳不懂怎么放置,不懂分得二極管的正負(fù)極,對單片機(jī)匯編語言掌握得不好……通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。</p><p> 這次課程設(shè)計
15、終于順利完成了,在設(shè)計中遇到了很多編程問題,最后在xx老師的辛勤指導(dǎo)下,終于游逆而解。同時,在xx老師的身上我學(xué)得到很多實用的知識,在次我表示感謝!同時,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝! </p><p><b> 6 參考文獻(xiàn)</b></p><p> [1] 李華,王思明,張明敏.單片機(jī)及應(yīng)用[M].蘭州:蘭州大學(xué)出版社.2001.&l
16、t;/p><p> [2] 李光飛.單片機(jī)課程設(shè)計實例指導(dǎo)[M].北京:北京航天航空大學(xué)出版社.2004</p><p> [3] 高偉.AT89單片機(jī)原理及應(yīng)用[M].北京:國防工業(yè)出版社.2008</p><p><b> 附錄(程序代碼)</b></p><p> 程序名:Quiz Buzzer.c</p
17、><p><b> 源程序代碼如下: </b></p><p> #include <reg51.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> unsigne
18、d char code table[]={0x40,0x79, /*共陰極數(shù)碼管編碼表 0 - f顯示*/</p><p> 0x24,0x30,0x19,0x12,0x02,0x78,0x00,</p><p> 0x10,0x08,0x03,0x46,0x21,0x06,0x0e};</p><p> sbit start= P3^6;
19、 /*變量定義*/</p><p> sbit stop=P3^5;</p><p> sbit reset = P3^7;</p><p> sbit key1 = P1^0;</p><p> sbit key2 = P1^1;</p><p> sbit key3 = P
20、1^2;</p><p> sbit key4 = P1^3;</p><p> sbit key5 = P1^4;</p><p> sbit key6 = P1^5;</p><p> sbit key7 = P1^6;</p><p> sbit key8 = P1^7;</p><
21、p> sbit buzzer = P3^4;</p><p> bit start_flag = 0; </p><p> bit stop_flag=0;</p><p> bit key1_flag = 0;</p><p> bit key2_flag = 0;</p><p> bi
22、t key3_flag = 0;</p><p> bit key4_flag = 0;</p><p> bit key5_flag = 0;</p><p> bit key6_flag = 0;</p><p> bit key7_flag = 0;</p><p> bit key8_flag = 0
23、;</p><p> bit reset_flag = 0;</p><p> bit action = 0;</p><p> uchar second = 20;</p><p> uchar timer0_count = 0;</p><p> uchar number = 0;</p>
24、<p> uchar number_display = 0;</p><p> void delay(uint z) /*延時函數(shù)delay()*/</p><p><b> {</b></p><p><b> uint x,y;</b></p>&
25、lt;p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void display(uchar number,uchar second) /*數(shù)碼管顯示驅(qū)動函數(shù)display()*/
26、 </p><p><b> {</b></p><p> uchar second_first,second_second;</p><p> second_first = second / 10;</p><p> second_second = second % 10;&l
27、t;/p><p> P2 = 0xfe;</p><p> P0 = table[number];</p><p><b> delay(2);</b></p><p> P2 = 0xfd;</p><p> P0 = 0x3f;</p><p><b>
28、 delay(2);</b></p><p> P2 = 0xfb;</p><p> P0 = table[second_first];</p><p><b> delay(2);</b></p><p> P2 = 0xf7;</p><p> P0 = table[
29、second_second];</p><p> delay(2);</p><p><b> }</b></p><p> void start_keyscan() /*開始鍵掃描函數(shù)start_keyscan()*/
30、 </p><p><b> {</b></p><p> if(start == 0)</p><p><b> {</b></p><p><b> delay(8);</b></p><p> if((start
31、 == 0)&&(!start_flag))</p><p><b> {</b></p><p> start_flag = 1;</p><p> action = 1;</p><p><b> TR0 = 1;</b></p><p><
32、;b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> start_flag = 0;</p><p><b>
33、 }</b></p><p><b> }</b></p><p> uchar key_scan8() /*八位搶答鍵掃描函數(shù)key_scan8()*/</p><p><b> {</b></p><p> if(key1 == 0)
34、</p><p><b> {</b></p><p><b> delay(8);</b></p><p> if((key1 == 0)&&(!key1_flag))</p><p><b> {</b></p><p>
35、key1_flag = 1;</p><p> number = 1;</p><p> number_display = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else&l
36、t;/b></p><p><b> {</b></p><p> key1_flag = 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key2 == 0)</p><p
37、><b> {</b></p><p><b> delay(8);</b></p><p> if((key2 == 0)&&(!key2_flag))</p><p><b> {</b></p><p> key2_flag = 1;<
38、;/p><p> number = 2;</p><p> number_display = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p>
39、;<p><b> {</b></p><p> key2_flag = 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key3 == 0)</p><p><b> {&
40、lt;/b></p><p><b> delay(8);</b></p><p> if((key3 == 0)&&(!key3_flag))</p><p><b> {</b></p><p> key3_flag = 1;</p><p>
41、; number = 3;</p><p> number_display = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b
42、> {</b></p><p> key3_flag = 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key4 == 0)</p><p><b> {</b></p&g
43、t;<p><b> delay(8);</b></p><p> if((key4 == 0)&&(!key4_flag))</p><p><b> {</b></p><p> key4_flag = 1;</p><p> number = 4;&l
44、t;/p><p> number_display = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
45、</p><p> key4_flag = 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key5 == 0)</p><p><b> {</b></p><p><
46、b> delay(8);</b></p><p> if((key5 == 0)&&(!key5_flag))</p><p><b> {</b></p><p> key5_flag = 1;</p><p> number = 5;</p><p&g
47、t; number_display = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p
48、> key5_flag = 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key6 == 0)</p><p><b> {</b></p><p><b> delay(8);&
49、lt;/b></p><p> if((key6 == 0)&&(!key6_flag))</p><p><b> {</b></p><p> key6_flag = 1;</p><p> number = 6;</p><p> number_displa
50、y = number;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> key6_flag =
51、 0;</p><p> number = 0;</p><p><b> }</b></p><p> if(key7 == 0)</p><p><b> {</b></p><p><b> delay(8);</b></p&g
52、t;<p> if((key7 == 0)&&(!key7_flag))</p><p><b> {</b></p><p> key7_flag = 1;</p><p> number = 7;</p><p> number_display = number;</p
53、><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> key7_flag = 0;</p>&l
54、t;p> number = 0;</p><p><b> }</b></p><p> if(key8 == 0)</p><p><b> {</b></p><p><b> delay(8);</b></p><p> if
55、((key8 == 0)&&(!key8_flag))</p><p><b> {</b></p><p> key8_flag = 1;</p><p> number = 8;</p><p> number_display = number;</p><p>&l
56、t;b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> key8_flag = 0;</p><p> number
57、= 0;</p><p><b> }</b></p><p> if(number_display != 0)</p><p><b> {</b></p><p><b> return 1;</b></p><p><b>
58、 }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><
59、;b> }</b></p><p> void reset_keyscan() /*復(fù)位鍵掃描函數(shù)reset_keyscan()*/</p><p><b> {</b></p><p> if(reset == 0)</p><p><b> {&
60、lt;/b></p><p><b> delay(8);</b></p><p> if((reset == 0)&&(!reset_flag))</p><p><b> {</b></p><p> reset_flag = 1;</p><p
61、> number_display = 0;</p><p> second=20;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b>
62、 {</b></p><p> reset_flag = 0;</p><p><b> }</b></p><p><b> }</b></p><p> void fengming() /*蜂鳴函數(shù)fengming(),脈寬t =
63、 1ms 周期T </p><p> { =2ms,頻率f = 0.5khz,用以報警*/ </p><p> buzzer = 0; /*給P3.7口送高電平*/</p><p> delay(10
64、0); /*延時1ms*/</p><p> buzzer = 1;</p><p> delay(100);</p><p><b> }</b></p><p> void main() /*主函數(shù)main() */</p
65、><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> EA=1;</b></p>&
66、lt;p><b> ET0=1;</b></p><p><b> TR0=0;</b></p><p><b> while(1)</b></p><p><b> { </b></p><p> start_keyscan(); &l
67、t;/p><p> reset_keyscan();</p><p> while(action==1)</p><p> {if(second<=5&&second>0)</p><p> fengming() ;</p><p> while(!key_scan8()&&a
68、mp;!stop==0)</p><p><b> {</b></p><p> display(number_display,second);</p><p> if(second == 0)</p><p><b> {</b></p><p> second
69、= 20;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> TR0 = 0;</b></p><p> display(
70、number_display,second);</p><p> action = 0;</p><p><b> break;</b></p><p><b> }</b></p><p> display(number_display,second);</p><p
71、><b> }</b></p><p><b> }</b></p><p> void timer0() interrupt 1 /*中斷服務(wù)函數(shù)timer0() interrupt 1*/</p><p><b> {</b></p><
72、;p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> timer0_count ++;</p><p> if(timer0_count == 20)</p><p><b> {</b></p><p&
73、gt; timer0_count = 0;</p><p> second --;</p><p> if(second<=5&&second>0)</p><p> fengming() ;</p><p> if(second == 0)</p><p><b>
74、{</b></p><p><b> TR0 = 0;</b></p><p> number_display = 0;</p><p> action = 0;</p><p><b> }</b></p><p><b> }</b&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計-- 基于單片機(jī)的搶答器設(shè)計
- 單片機(jī)搶答器課程設(shè)計
- 基于單片機(jī)的搶答器課程設(shè)計
- 單片機(jī)搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計---搶答器
- 搶答器 單片機(jī)課程設(shè)計
- 基于單片機(jī)的搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計搶答器(16路搶答器)
- 智力搶答器單片機(jī)課程設(shè)計
- 基于單片機(jī)的多人搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計多路搶答器
- 智力搶答器單片機(jī)課程設(shè)計
- 基于51單片機(jī)搶答器的課程設(shè)計
- 單片機(jī)課程設(shè)計--智力搶答器
- 單片機(jī)搶答器課程設(shè)計3
- 搶答器單片機(jī)課程設(shè)計報告
- 單片機(jī)課程設(shè)計--搶答器系統(tǒng)設(shè)計
- 四路搶答器單片機(jī)課程設(shè)計
- 四路搶答器單片機(jī)課程設(shè)計
評論
0/150
提交評論