智力競賽搶答器的設(shè)計與實現(xiàn)畢業(yè)論文_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p><b>  關(guān)鍵詞I</b></p><p>  AbstractI</p><p>  key wordsII</p><p><

2、b>  1 前 言1</b></p><p>  1.1課題研究的背景1</p><p>  1.2 課題研究的意義2</p><p>  2 競賽搶答器的硬件與軟件的設(shè)計與實現(xiàn)2</p><p>  2.1 方案的確定2</p><p>  2.2 設(shè)計步驟3</p>&

3、lt;p>  2.3 電路原理圖的設(shè)計3</p><p>  2.3.1 電路組成框圖4</p><p>  2.4 競賽搶答器各部分電路原理圖介紹4</p><p>  2.4.1 單片機最小系統(tǒng)4</p><p>  2.4.2 按鍵電路7</p><p>  2.4.3 顯示電路8</p&

4、gt;<p>  2.4.4 報警電路8</p><p>  2.4.5 時鐘電路9</p><p>  2.4.6 復(fù)位電路9</p><p><b>  2.5 制板10</b></p><p>  2.5.1 設(shè)計原理圖10</p><p>  2.5.2 定義元件封

5、裝10</p><p>  2.5.3 設(shè)置PCB圖紙11</p><p>  2.5.4 生成網(wǎng)表和加載網(wǎng)表11</p><p>  2.5.5 布線調(diào)試及故障分析系統(tǒng)軟件的設(shè)計11</p><p>  2.6 系統(tǒng)軟件的設(shè)計11</p><p>  2.6.1 主流程12</p><

6、p>  2.6.2 按鍵掃描流程12</p><p>  2.6.3 中斷流程圖13</p><p>  2.6.4 編譯及仿真軟件軟件14</p><p>  3 調(diào)試及故障分析15</p><p>  3.1 硬件焊接及故障分析15</p><p>  3.2 程序調(diào)試16</p>

7、<p><b>  4 總結(jié)17</b></p><p><b>  參考文獻18</b></p><p><b>  致 謝19</b></p><p><b>  附錄:20</b></p><p>  智力競賽搶答器的設(shè)計與實現(xiàn)&l

8、t;/p><p><b>  摘 要</b></p><p>  本設(shè)計是以單片機STC89C52為核心控制器件,利用單片機的定時器/計數(shù)器定時和計數(shù)的原理,將軟、硬件有機地結(jié)合起來,使得系統(tǒng)能夠正確地進行計時,同時使數(shù)碼管能夠正確地顯示時間和選手號碼。用開關(guān)做鍵盤輸出,蜂鳴器發(fā)聲提示。在搶答中,只有在搶答開始即按鍵有效狀態(tài)下,搶答才有效,否則,在開始搶答前搶答為無效;可

9、以顯示是哪位選手有效搶答和無效搶答,正確按鍵后有蜂鳴器提示;搶答時間和回答問題時間倒記時顯示,時間完后時間計時停止,蜂鳴器在最后五秒內(nèi)告警提示。本文主要介紹了競賽搶答器的硬件電路和軟件程序的設(shè)計思路和具體過程,并最終給出硬件原理圖、源程序以及各自的流程圖。</p><p><b>  關(guān)鍵詞</b></p><p>  智力競賽搶答器;電路設(shè)計;程序設(shè)計</p&

10、gt;<p>  The Design and Implementation of Competition Intelligent Buzzer </p><p>  Abstract </p><p>  This design is based on microcontroller STC89C52 as the core control device, the

11、use of single-chip timer/counter timing and counting principle, the software and hardware organically, enables the system to correct time, at the same time enable digital tube to show time and player number correctly. Ma

12、de the keyboard switch output, buzzer sound prompt. In vies to answer first, only at the beginning of the vies to answer first the key effective state, the contest is valid, otherwise, before startin</p><p>

13、<b>  key words</b></p><p>  Quiz responder;lectric circuit design;The program design</p><p><b>  1 前 言</b></p><p>  1.1課題研究的背景</p><p>  隨著時代的發(fā)展

14、,各類競賽和選秀節(jié)目層出不窮,而參賽者的素質(zhì)也不斷提高,這不但迫切要求著一個更加公平公正公開的賽制更要求我們推出一個能夠支持公平公開公正的賽制的硬件設(shè)備。電子技術(shù)不斷發(fā)展的今天,搶答器功能越來越強,可靠性和準確性也越來越高。能夠?qū)崿F(xiàn)搶答器功能的方式有多種,可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過程復(fù)雜,而且準確性與可靠性不高,成品面積大[1]。</p><p>  對于目前搶

15、答器的功能描述,如涵蓋搶答器、搶答限時、選手答題計時及犯規(guī)組號搶答器具有搶答自鎖,燈光指示、暫停復(fù)位、電子音樂報聲、自動定時等功能,還有工作模式的切換和時間設(shè)定,對于這些,隨著科學(xué)技術(shù)的發(fā)展,肯定還要得到進一步的改進。一般都要趨向于智能化。</p><p>  單片機把我們帶入了智能化的電子領(lǐng)域,許多繁瑣的系統(tǒng)若由單片機進行設(shè)計,便能收到電路更簡單、功能更齊全的良好效果。若把經(jīng)典的電子系統(tǒng)當(dāng)作一個僵死的電子系統(tǒng),

16、那么智能化的現(xiàn)代電子系統(tǒng)則是一個具有“生命”的電子系統(tǒng)。 而隨著技術(shù)的進步,單片機與串口通信的結(jié)合更多地應(yīng)用到各個電子系統(tǒng)中已成一種趨勢。本設(shè)計就是基于單片機設(shè)計搶答系統(tǒng),通過串口通信動態(tài)傳輸數(shù)據(jù),使搶答系統(tǒng)有了更多更完善的功能。單片機系統(tǒng)的硬件結(jié)構(gòu)給予了搶答系統(tǒng)“身軀”,而單片機的應(yīng)用程序賦予了其新的“生命”,對于搶答器我們大家都知道那是用于選手做搶答題時用的,選手進行搶答,搶到題的選手來回答問題。搶答器不僅考驗選手的反應(yīng)速度

17、同時也要求選手具備足夠的知識面和一定的勇氣。選手們都站在同一個起跑線上,體現(xiàn)了公平公正的原則。</p><p>  1.2 課題研究的意義</p><p>  基于單片機的智力競賽搶答器卻能滿足精確、高效、方便的要求。在這樣的條件下基于單片機的智力競賽搶答器的設(shè)計便呼之欲出了。智能搶答器方便快捷、簡便易操作的功能現(xiàn)在以用于各種競賽場合。隨著科技的發(fā)展和競賽的需要,競答器向著更快捷更精準操作

18、更簡單功能更全面的多元方向發(fā)展。智力競賽搶答器以適應(yīng)各競賽場合的需求便成為了搶答器的趨勢。 </p><p>  2 競賽搶答器的硬件與軟件的設(shè)計與實現(xiàn)</p><p><b>  2.1 方案的確定</b></p><p><b>  方案一:</b></p><p>  系統(tǒng)各部分采用中小規(guī)模集

19、成數(shù)字電路,用機械開關(guān)按鈕作為控制開關(guān),完成搶答輸入信號的觸發(fā)。該方案的特點是中小規(guī)模集成電路應(yīng)用技術(shù)成熟,性能可靠,能方便地完成選手搶答的基本功能,但是由于系統(tǒng)功能要求較高,所以電路連接集成電路相對較多,而且過于復(fù)雜,并且制作過程工序比較煩瑣,使用不太方便。</p><p><b>  方案二:</b></p><p>  采用52系列單片機STC89C52作為控制

20、核心,該系統(tǒng)可以完成運算控制、信號識別以及顯示功能的實現(xiàn)[2]。由于使用單片機作為控制核心,其技術(shù)比較成熟,應(yīng)用起來方便、簡單,并且周圍的輔助電路也比較少,便于控制和實現(xiàn)。整個系統(tǒng)具有極其靈活的可編程性,能方便地對系統(tǒng)進行功能的擴展和更改。</p><p>  經(jīng)過比較,顯然方案二比方案一簡單的多,不但從性能上優(yōu)于方案一,而且在使用上及其功能的實現(xiàn)上都較方案一簡潔,并且由于單片機具有優(yōu)越的高集成電路性,使其工作速

21、度更快、效率更高。另外STC89C52單片機可以采用12MHz的晶振,提高了信號的測量精度,并且使該系統(tǒng)可以通過軟件改進來擴展功能。而方案一采用了中小規(guī)模集成電路,由于其復(fù)雜的電路性能,可能會使信號的輸入輸出產(chǎn)生延時及不必要的誤差[3]。因此選擇方案二比較適合。</p><p>  2.2 設(shè)計步驟[4]</p><p>  (1)根據(jù)要求,設(shè)計出比較合理的方案,選取合適的硬件器件,熟悉各

22、個器件的性能。</p><p>  (2)編寫程序,根據(jù)設(shè)計的要求,編制主程序以及各子程序模塊。</p><p> ?。?)通過Keil、Proteus等軟件進行仿真。</p><p> ?。?)仿真成功后開始搭建實物電路,并且進行調(diào)試。</p><p> ?。?)進行PCB設(shè)計。</p><p><b> 

23、?。?)實驗總結(jié)。</b></p><p>  (7)撰寫研究報告。</p><p>  2.3 電路原理圖的設(shè)計</p><p>  根據(jù)設(shè)計功能的要求和各器件工作環(huán)境的要求,電路設(shè)計遵循可行性和可操作性來設(shè)計,具體應(yīng)該包括控制電路,按鍵電路,以及用來顯示裁決結(jié)果的顯示電路[5]。除了用數(shù)碼管顯示目前的動作情形,同時也需要用聲音提醒或者警告操作人員,因

24、此也在電路設(shè)計時加入了報警電路。經(jīng)過不斷的仿真和比較最終確定的競賽搶答器的電路主要電路硬件包括:單片機最小系統(tǒng)(即控制電路)、按鍵電路、顯示電路、報警電路、時鐘電路、復(fù)位電路[6]。具體電路原理圖見附錄A。</p><p>  2.3.1 電路組成框圖</p><p>  搶答器電路總體設(shè)計方框圖如圖2.1所示: </p><p>  圖2.1 搶答器總體設(shè)計方框圖

25、</p><p>  2.4 競賽搶答器各部分電路原理圖介紹</p><p>  2.4.1 單片機最小系統(tǒng)</p><p>  總線型單片機非總線應(yīng)用的最小系統(tǒng)示意圖如圖3所示,只有單片機和時鐘電路、復(fù)位電路構(gòu)成的最簡單電路,并行總線不用于外圍擴展,可作為應(yīng)用系統(tǒng)的I/O口使用[7]。</p><p>  圖2.2總線型單片機非總線應(yīng)用

26、 圖2.3 單片機最小系統(tǒng)</p><p><b>  的最小系統(tǒng)</b></p><p><b>  系統(tǒng)特點</b></p><p>  有大量可使用的I/O口;</p><p>  沒有并行擴展,應(yīng)用系統(tǒng)結(jié)構(gòu)簡單;</p><p>  外圍器

27、件只能通過UART口的串行移位方式或虛擬串行擴展總線進行擴展。</p><p>  STC89C52的內(nèi)部結(jié)構(gòu)圖</p><p>  STC89C52的內(nèi)部結(jié)構(gòu)圖如圖4所示:</p><p>  圖2.4 STC89C52內(nèi)部結(jié)構(gòu)圖</p><p>  52單片機有4個8位并行輸入/輸出接口:P0、P1、P2和P3口這四個口既可以并行輸入或輸

28、出8位數(shù)據(jù),又可按位使用,即每一位均能獨立做輸入或輸出用[8]。圖5為各接口的電氣結(jié)構(gòu)示意圖。</p><p>  圖2.5 P0、P1、P2、P3口的電氣結(jié)構(gòu)圖</p><p>  I/O端口的功能復(fù)用。P3口為復(fù)用的I/O端口,口內(nèi)有復(fù)用輸出功能的控制端;引腳也有復(fù)用輸入功能的控制端。P3口的第二功能輸入引腳功能表如表2.1所示:</p><p>  表2.1

29、P3口的第二功能輸入引腳</p><p>  P0、P1、P2、P3口作為普通I/O口使用時,都是準雙向口結(jié)構(gòu),準雙向口的典型結(jié)構(gòu)如圖(5)-b所示,準雙向口的輸入操作和輸出操作本質(zhì)不同,輸入操作是讀引腳狀態(tài);輸出操作是對口鎖存器的寫入操作。由口鎖存器和引腳電路可知,當(dāng)由內(nèi)部總線給口鎖存器置0或1時,鎖存器中的“1”或“0”狀態(tài)立即反映到引腳上。但是在輸入操作(讀引腳)時,如果口鎖存器狀態(tài)為“0”,引腳被鉗位在“

30、0”狀態(tài),導(dǎo)致無法讀出引腳的高電平輸入。</p><p>  2.4.2 按鍵電路</p><p>  鍵盤掃描只是CPU工作的一部分,鍵盤處理只是在有鍵按下時才有意義[9]。對于是否有鍵按下的信息輸入方式有中斷方式和查詢方式兩種,行列式鍵盤工作原理。按鍵電路如圖2.6</p><p><b>  圖2.6 按鍵電路</b></p>

31、<p>  行列式鍵盤又叫矩陣式鍵盤。用I/O線組成行、列結(jié)構(gòu),按鍵設(shè)置在行與列的交點上,這樣可以節(jié)約I/O口線。4×4矩陣式鍵盤的示意圖如圖2.7所示:</p><p>  圖2.7 4×4矩陣式鍵盤的示意圖 圖2.8 四位共陰極LED動態(tài)</p><p><b>  顯示接口電路 </b><

32、/p><p>  首先由P1口的高四位輸出0電平,從P1口的低四位讀取鍵盤的狀態(tài);再從P1口的低四位輸出0電平,從P1口的高四位讀取鍵盤狀態(tài)。將兩次讀取的結(jié)果組合起來就可以得到一組特編碼,如表2.2所示:</p><p>  表2.2 4×4矩陣式鍵盤鍵碼表</p><p>  2.4.3 顯示電路</p><p>  顯示電路為四位共

33、陰極LED動態(tài)顯示接口電路。具體電路圖如圖2.8所示。</p><p>  單個共陰極7段數(shù)碼的段選碼如表3所示:</p><p>  表2.3 7段共陰數(shù)碼管段選碼表</p><p>  共陰極LED數(shù)碼管將發(fā)光二極管的陰極(負極)短接后作為公共陰極,當(dāng)驅(qū)動信號為高電平、“-”端接低電平時才能發(fā)光。這樣的多位顯示,將所有位的選線并聯(lián)在一起,由一個8位I/O口控制

34、,實現(xiàn)各部分的分時選通。由于所有位選皆由一個I/O口控制,在每一瞬間6位LED會顯示相同的字符。想要每一位顯示不同的字符,就必須采用掃描方法輪流點亮各位LED,即在每一瞬間只使某一位顯示字符。在此瞬間,段選控制I/O口輸出相應(yīng)字型碼,而位選則控制I/O口在該顯示位送出低電平,以保證該位顯示相應(yīng)字符。如此輪流,使每一位分時顯示該位應(yīng)顯示字符。其管腳配置及動態(tài)顯示接口電路如圖2.9所示:</p><p>  圖2.9

35、 共陰極數(shù)碼管管腳配置及動態(tài)顯示接口電路</p><p>  2.4.4 報警電路</p><p>  考慮到實驗室現(xiàn)有的元器件,設(shè)計中采用了蜂鳴器報警電路,如果有條件還可以采用更高級的語音報警電路,那樣更加直觀方便。電路的接法如圖2.10 所示:</p><p>  圖2.10 蜂鳴器報警電路 圖2.11 單片機外接晶體的接法&l

36、t;/p><p>  工作工程:蜂鳴器經(jīng)過74LS04接在P3.7口,當(dāng)P3.7輸出為低電平“0”時,74LS04端輸出為“1”,晶體管導(dǎo)通,蜂鳴器兩端獲得約+5V的電壓而鳴叫;當(dāng)P3.7輸出為高電平“1”時,三極管截止,蜂鳴器停止鳴叫。</p><p>  電路中74LS04不僅起到了反向作用,還有增大負載能力的作用。</p><p>  2.4.5 時鐘電路<

37、/p><p>  時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號。設(shè)計中采用了比較典型的內(nèi)部時鐘方式,如圖2.11 所示:</p><p>  其工作原理是:片內(nèi)高增益反向放大器XTAL1、XTAL2外接作為反饋元件的晶體(呈感性)與電容組成的并聯(lián)諧振回路構(gòu)成一個自激振蕩器向內(nèi)部時鐘電路提供振蕩時鐘。</p><p>  2.4.6 復(fù)位電路</p><

38、p>  復(fù)位是單片機的初始化操作,其主要功能是將程序計數(shù)器PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。復(fù)位操作不影響片內(nèi)RAM的內(nèi)容,但是對SFR中的一些寄存器有影響。</p><p>  圖2.12 復(fù)位電路</p><p>  單片機的復(fù)位是靠外部電路復(fù)位的。其復(fù)位方式有上電復(fù)位和按鍵手動復(fù)位兩種。復(fù)位電路中的電阻、電容數(shù)值的設(shè)置,是為了保證在RST管腳處至少

39、保持兩個機器周期(24個振蕩周期)的高電平而完成復(fù)位過程的,也就是在斯密特觸發(fā)器的輸入端維持在最低閥值電壓以上足夠長時間,使斯密特觸發(fā)器產(chǎn)生一個正脈沖。電阻值通常為1K,電容值通常為22uF。圖2.12為復(fù)位電路接法。 </p><p><b>  2.5 制板</b></p><p>  根據(jù)設(shè)計的電路原理圖,利用我們的制版軟件Altium Designer Win

40、ter 09 設(shè)置我們的PCB電路板。設(shè)計流程:設(shè)計原理圖、定義元件封裝、設(shè)置PCB圖紙、生成網(wǎng)表和加載網(wǎng)表、布線、調(diào)試及故障分析系統(tǒng)軟件的設(shè)計。</p><p>  2.5.1 設(shè)計原理圖</p><p>  創(chuàng)建一個新項目;創(chuàng)建一張新的原理圖圖紙;查找元件;在原理圖中放置元件;設(shè)置元件屬性;放置電源和接地符號;繪制原理圖。</p><p>  2.5.2 定義元

41、件封裝 </p><p>  原理圖設(shè)計完成后,元件的封裝有可能被遺漏或有錯誤。對于用戶自己設(shè)計的元件或者是某些特殊元件,必須由用戶自己定義或修改元件的封裝。 </p><p>  2.5.3 設(shè)置PCB圖紙</p><p>  可以設(shè)定PCB電路板的結(jié)構(gòu)及尺寸,板層數(shù)目,通孔的類型,網(wǎng)格的大小等,既可以用系統(tǒng)提供的PCB設(shè)計模板進行設(shè)計,也可以手動設(shè)計PCB板。

42、</p><p>  2.5.4 生成網(wǎng)表和加載網(wǎng)表 </p><p>  網(wǎng)表是電路原理圖和印刷電路板設(shè)計的接口,只有將網(wǎng)表引入PCB系統(tǒng)后,才能進行電路板的自動布線。 </p><p>  2.5.5 布線調(diào)試及故障分析系統(tǒng)軟件的設(shè)計</p><p>  設(shè)置布線規(guī)則后,先自動布線,然后手工調(diào)整。在元件很少且布線簡單的情況下,也可以直接進

43、行手動布線。制成的電路板如圖2.13所示:</p><p>  圖2.13 搶答器的PCB電路圖</p><p>  2.6 系統(tǒng)軟件的設(shè)計</p><p>  眾多軟件的聯(lián)合使用對應(yīng)用系統(tǒng)的設(shè)計起到了很重要的作用,在實物制作之前對設(shè)計進行仿真,可以檢驗程序的執(zhí)行結(jié)果是否與設(shè)計的功能相同,這樣可以對程序進行改進。在這里用到了Keil C和Proteus,同時在電路制

44、板時用到了Altium Designer Winter 09繪制PCB板。</p><p><b>  2.6.1 主流程</b></p><p>  主流程圖如圖2.14所示</p><p><b>  N</b></p><p>  Y </p>

45、;<p>  圖2.14 主流程圖</p><p>  2.6.2 按鍵掃描流程</p><p>  每一個按鍵都對應(yīng)一個處理子程序,按鍵掃描流程圖如圖2.15所示,包括了對矩陣鍵盤和調(diào)整時間按鍵的掃描。</p><p>  N </p><p><b>  Y</b></p&

46、gt;<p><b>  N</b></p><p>  Y </p><p>  N </p><p><b>  Y</b></p><p><b>  Y</b>&l

47、t;/p><p>  圖2.15 按鍵掃描流程</p><p>  2.6.3 中斷流程圖</p><p>  設(shè)計采用了外部中斷,中斷程序流程圖如圖2.16所示:</p><p>  圖2.16 中斷流程圖</p><p>  2.6.4 編譯及仿真軟件軟件</p><p><b>  

48、Keil C的使用</b></p><p>  Keil C是眾多單片機應(yīng)用開發(fā)軟件中優(yōu)秀的軟件之一,它集編輯,編譯,仿真等于一體,同時支持匯編和C語言的程序設(shè)計,本設(shè)計使用它作為C編譯器,使用方法如下:</p><p>  首先建立一個工程,然后將C程序文件添加到工程下鏈接編譯,接著設(shè)置生成并輸出HEX文件,如果程序編譯后有錯誤就進行調(diào)試[10]。</p>&l

49、t;p>  proteus7.4的使用</p><p>  PROTEUS軟件是英國Labcenter electronics公司研發(fā)的EDA工具軟件。它是一個集模擬電路、數(shù)字電路、模/數(shù)混合電路以及多種微控制器系統(tǒng)為一體的系統(tǒng)設(shè)計和仿真平臺。是目前同類軟件中最先進、最完整的電子類仿真平臺之一。它真正實現(xiàn)了在計算機上完成從原理圖、電路分析與仿真、單片機代碼調(diào)試與仿真、系統(tǒng)測試與功能驗證到PCB板生成的完整的

50、電子產(chǎn)品研發(fā)過程[10]。具體仿真圖見附錄B。</p><p><b>  3 調(diào)試及故障分析</b></p><p>  通過對制版過程中出現(xiàn)的問題和故障進行不斷的調(diào)試和改進,以達到我們預(yù)定的電路的效果。</p><p>  3.1 硬件焊接及故障分析</p><p>  電子電路是由許多元器件和導(dǎo)線連接而成,每一個元

51、件和導(dǎo)線的好壞,連接的正確可靠與否,都可能產(chǎn)生故障,情況很復(fù)雜。有的是一種原因引起的簡單故障,也有的是多種原因引起的復(fù)雜故障。以下是一些常見的故障:</p><p> ?。?)電路組裝有錯誤或連接不牢,致使電路與原理電路不一致。</p><p> ?。?)電路元器件本身特性不良或損壞,特別是芯片的損壞最為常見,其次是電容的擊穿、短路以及電阻的阻值與標稱值不符。因此在組裝電路前應(yīng)進行檢查和篩

52、選,以防組裝完電路后,再查找原因所帶來的種種麻煩。</p><p> ?。?)各儀器連線是否正確,是否與電路共地;儀表使用是否得當(dāng)。</p><p> ?。?)以上檢查無錯誤時,應(yīng)考慮電路設(shè)計,這也是實驗中尤其是在數(shù)字電路中常遇到的。</p><p>  硬件搭建:按照設(shè)計的原理圖一步一步完成電路的搭建。這過程中一定要耐心、細心,否則很容易跳錯線。</p>

53、;<p>  實物電路搭好以后,仔細對照原理圖檢查一遍,然后就可以上電檢測了。</p><p>  制作硬件過程中,出現(xiàn)了以下問題經(jīng)過檢查得到了解決:</p><p>  (1)接上電源后發(fā)覺數(shù)碼管無顯示。經(jīng)檢查后現(xiàn)單片機的29腳懸空未接,應(yīng)該接在高電平上,這是單片機正常工作的前提。</p><p> ?。?)單片機不工作。檢查后判定是振蕩電路不起振,

54、原因是用跳線將振蕩電路連在了遠離單片機的位置,影響了振蕩電路的穩(wěn)定。</p><p> ?。?)矩陣鍵盤的其中一行不正常工作。經(jīng)檢查后發(fā)現(xiàn)是虛焊。</p><p><b>  3.2 程序調(diào)試</b></p><p>  程序調(diào)試:分步驟進行調(diào)試,對每一個子程序進行編譯鏈接后,將整個程序全部編譯,生成HEX文件加載到單片機上,進行仿真。出現(xiàn)錯誤

55、和警告時要進行分析,解決問題。</p><p>  仿真分析:啟動(上電)后,顯示00—00。</p><p>  當(dāng)主持人按鍵,顯示30秒的搶答時間,如有選手搶答,會顯示選手號碼以及60秒的回答時間,回答時間剩余5秒時,會響提示音。</p><p>  如果第一位選手不能回答,那么主持人再次按下START鍵允許其他選手繼續(xù)搶答,允許其他選手搶答的時間為上一次搶答的

56、剩余時間,答題時間仍是60秒。</p><p>  如果沒有人搶答,搶答倒計時還有5秒的時候會響提示音,搶答時間過后搶答器會自動進入復(fù)位狀態(tài),可以進行下一輪的搶答。 </p><p>  如果主持人未按START鍵,有選手按了搶答按鍵,犯規(guī)搶答,顯示犯規(guī)選手號并閃爍FF,直到主持人復(fù)位。</p><p>  這與預(yù)期的效果是一致的。</p><p

57、><b>  4 總結(jié)</b></p><p>  時光飛逝,歲月如梭。一晃我從一個青澀懵懂的高中生變成了大學(xué)畢業(yè)生。在懷化學(xué)院物理與信息工程系學(xué)習(xí)的四年,我學(xué)到了很多知識。也成長了很多,經(jīng)過四年對專業(yè)知識的學(xué)習(xí)最終給自己和學(xué)校交的一份答卷便是我的畢業(yè)設(shè)計,通過此次設(shè)計,我學(xué)到了很多知識如更加深入的學(xué)習(xí)與了解了單片機的知識與使用方法,因為我們沒有學(xué)過altium designer wi

58、nter和protrous軟件,我通過查閱有關(guān)書籍和網(wǎng)上查閱自學(xué)了這兩門軟件,通過不斷的與同學(xué)和老師交流和學(xué)習(xí)我終于完成了這次的畢業(yè)設(shè)計。與普通搶答器相比,本設(shè)計有以下幾方面優(yōu)勢:</p><p>  (1)具有清零裝置和搶答控制,可由主持人操縱避免有人提前搶答違反規(guī)則。</p><p> ?。?)具有定時功能,在規(guī)定時間內(nèi)無人搶答表示所有參賽選手或參賽隊對本題棄權(quán)。</p>

59、<p>  實物的制作僅僅是在實驗室完成的,在實際應(yīng)用中還有許多問題需要考慮,比如選手是分散在主席臺下的,那么選手的按鍵就要通過總線進行連接,而不是實驗板上簡單的矩陣鍵盤式的連接。</p><p>  另外,搶答器的功能有待進一步增強,比如增加計分功能。而功能的擴展恰恰體現(xiàn)了本設(shè)計中選用單片機作為核心控制器的優(yōu)勢——簡單的接線、靈活的可編程性。</p><p><b>

60、;  參考文獻</b></p><p>  [1] 李增生.對搶答器的改進[J].電子制作,2008,(12).</p><p>  [2] 李朝青.單片機原理及接口技術(shù)(第3版)[M].北京:北京航空航天大學(xué)出版社,2002.</p><p>  [3] 程相波,衛(wèi)安軍.基于MCS-51單片機的八路搶答器設(shè)計方法研究[J].北京工業(yè)職業(yè)技 術(shù)學(xué)院

61、學(xué)報,2007,(2).</p><p>  [4] 黃正謹.綜合電子設(shè)計與實踐[M].東南大學(xué)出版社,2002-3.</p><p>  [5] 徐熙文.電路基礎(chǔ)[M]. 高等教育出版社,2003.</p><p>  [6] 石生.電路基本分析[M]. 高等教育出版社,2006. </p><p>  [7] 李光飛.單片機課程設(shè)計實例指

62、導(dǎo)[M].北京:北京航天航空大學(xué)出版社,2004.</p><p>  [8] 馮育長.單片機系統(tǒng)設(shè)計與實例指導(dǎo)[M].北京:西安電子科技大學(xué)出版社,2007.</p><p>  [9] 李華.MCS-51系列單片機實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版,1993.</p><p>  [10]杜樹春.基于Proteus和Keil C51的單片機設(shè)計與仿真

63、[M].電子工業(yè)出版社,2012.</p><p><b>  致 謝</b></p><p>  在本次畢業(yè)設(shè)計過程中,我要感謝四年來我的各科老師感謝他們對我的教育。特別是在段教授的單片機的課程中,我不僅學(xué)到了對于我們專業(yè)非常重要的單片機的課程,更多的提高了自己的動手能力,對我這次的畢設(shè)設(shè)計打好了堅實的基礎(chǔ)。在他的課程中我也學(xué)到了仔細認真、細致嚴謹?shù)闹螌W(xué)態(tài)度,對我以

64、后的工作學(xué)習(xí)有很大的指導(dǎo)作用,使我受益終身。同時,我還要非常感謝我的指導(dǎo)老師張學(xué)斌老師,張老師對本論文從選題、構(gòu)思、資料收集到最后定稿的各個環(huán)節(jié)都給予了細心指引與教導(dǎo),使我得以最終完成畢業(yè)設(shè)計,在此對張老師表示衷心感謝!</p><p>  同時也要感謝我的各位同學(xué),他們在設(shè)計的各個階段給了我很多幫助和建議。</p><p>  最后,我要向在百忙之中抽時間對本文進行審閱、評議的各位老師表

65、示感謝!</p><p><b>  附錄:</b></p><p><b>  附錄A:</b></p><p><b>  附錄B:</b></p><p><b>  附錄C:</b></p><p>  #include&l

66、t;reg51.h></p><p>  unsigned char key;</p><p>  unsigned char key1;</p><p>  unsigned char sec;</p><p>  unsigned char sec2;</p><p>  unsigned char flag

67、;</p><p>  unsigned char flag1=0;</p><p>  unsigned char flag2=0;</p><p>  unsigned char flag3=0;</p><p>  unsigned char i; </p><p>  sbit LOUDER=P3^7;<

68、;/p><p>  sbit RED=P3^4;</p><p>  sbit PAUSE=P3^5;</p><p>  sbit RESTART=P3^6;</p><p>  sbit ADD=P3^0;</p><p>  sbit SUB=P3^1;</p><p>  unsigned

69、char led[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,</p><p>  0x7D,0x07, 0x7F,0x6F,0X71};</p><p>  //***************delay()延時函數(shù)***********/</p><p>  void delay(int t)</p><p>  

70、{unsigned char i,j;</p><p>  for(i=0;i<t;i++)</p><p>  for(j=0;j<100;j++);}</p><p>  void delay1()</p><p>  {unsigned char i,j;</p><p>  for(i=0;i<

71、;8;i++)</p><p>  for(j=0;j<100;j++);}</p><p>  /********中斷的初始化***************/</p><p>  void init()</p><p>  {IT0=1; //外部中斷T0,邊沿觸發(fā)</p><p><b&g

72、t;  EX0=1;</b></p><p>  IT1=1; //外部中斷T1,邊沿觸發(fā)</p><p><b>  EX1=1;</b></p><p>  TMOD=0X11; //定時器T0 T1 均為模式一</p><p>  PT1=1; //設(shè)定定時器T1、外

73、部中斷T0的中斷優(yōu)先級//</p><p><b>  PX0=1;</b></p><p>  EA=1; //CPU允許中斷}</p><p>  /************外部中斷T0,用于復(fù)位*****************/</p><p>  void Exit_int0() interrupt 0

74、</p><p><b>  {EA=0;</b></p><p><b>  sec=0;</b></p><p><b>  key=0;</b></p><p><b>  flag=0;</b></p><p><b&

75、gt;  flag1=0;</b></p><p><b>  flag2=0;</b></p><p><b>  flag3=0;</b></p><p><b>  RED=1;</b></p><p><b>  PAUSE=1;</b>

76、;</p><p>  RESTART=1;</p><p><b>  TR0=0;</b></p><p><b>  ET0=0;</b></p><p><b>  TR1=0;</b></p><p><b>  ET1=0;<

77、/b></p><p>  IT1=1; //允許外部中斷T1 </p><p><b>  EX1=1;</b></p><p><b>  EA=1 }</b></p><p>  /**************外部中斷T1服務(wù)程序*******************

78、**/</p><p>  void Exit_int2() interrupt 2</p><p>  { flag3++; //flag3初始值0,外部中斷T1每中斷一次flag3值加一</p><p>  EX1=0; // 關(guān)掉外部中斷T1</p><p>  if(flag3==1) //第一次按下START鍵,啟動定時器T

79、0計時30秒,紅燈亮</p><p>  { RED=0;</p><p>  flag1=1; //flag1置一</p><p>  TL0=0XB0; //啟動定時器T0三十秒倒計時</p><p><b>  TH0=0X3C;</b></p><p><b> 

80、 sec=30;</b></p><p>  ET0=1; //開啟T0中斷</p><p>  TR0=1; //允許T0計數(shù) }</p><p><b>  else </b></p><p>  if(flag3==2) //第二次按下START鍵,黃燈亮,紅燈滅</p

81、><p><b>  { flag=0;</b></p><p><b>  flag1=0;</b></p><p><b>  flag2=0;</b></p><p><b>  RED=1;</b></p><p><b&

82、gt;  PAUSE=0;</b></p><p><b>  TR1=0;</b></p><p><b>  sec=sec2;</b></p><p><b>  key=0} </b></p><p><b>  else</b><

83、;/p><p>  if(flag3==3) //第三次按下START鍵,啟動計時, 并允許再次搶答,藍燈亮,黃燈滅</p><p><b>  { TR0=1;</b></p><p><b>  flag2=0;</b></p><p><b>  PAUSE=1;</b&g

84、t;</p><p>  RESTART=0; </p><p>  flag=0;//為搶答前有選手違規(guī) 為提示聲設(shè)定標志位</p><p><b>  flag1=1;</b></p><p><b>  key=0}</b></p><p><b>  e

85、lse</b></p><p>  if(flag3==4)</p><p><b>  { flag=1;</b></p><p><b>  flag1=0;</b></p><p><b>  flag2=0;</b></p><p>

86、  RESTART=1;</p><p><b>  RED=1;</b></p><p><b>  PAUSE=0;</b></p><p><b>  TR1=0;</b></p><p><b>  sec=sec2;</b></p>

87、<p>  key=0; } </p><p><b>  else</b></p><p>  if(flag3>4)</p><p><b>  {TR0=1;</b></p><p><b>  key=0;</b></p><p&

88、gt;<b>  flag2=0;</b></p><p><b>  flag=0;</b></p><p><b>  PAUSE=1;</b></p><p>  RESTART=0;</p><p><b>  TR1=1;</b></p&g

89、t;<p><b>  flag=0;</b></p><p>  flag1=1;} </p><p><b>  EX1=1;</b></p><p><b>  LOUDER=0;</b></p><p>  delay(250);</p>&

90、lt;p>  LOUDER=1;}</p><p>  /*****************定時器T0,計時30秒***************/</p><p>  void Timer1() interrupt 1</p><p>  {static unsigned char count;</p><p><b>  T

91、L0=0XB0;</b></p><p><b>  TH0=0X3C;</b></p><p><b>  count++;</b></p><p>  if(count==20)</p><p>  { count=0;</p><p><b>  

92、sec--;</b></p><p>  if(sec==5)</p><p>  {LOUDER=0;</p><p>  delay(250);</p><p><b>  LOUDER=1}</b></p><p>  if(sec==0)</p><p>

93、;<b>  { sec=0;</b></p><p><b>  ET0=0;</b></p><p>  TR0=0; } }}/**************定時器T1,計時60秒***************/</p><p>  void Timer3() interrupt 3</p><

94、p>  {static unsigned char count;</p><p><b>  TL1=0XB0;</b></p><p><b>  TH1=0X3C;</b></p><p><b>  count++;</b></p><p>  if(count==

95、20)</p><p><b>  {count=0;</b></p><p><b>  sec--;</b></p><p>  if(sec==5)</p><p>  { LOUDER=0;</p><p>  delay(250);</p><

96、p>  LOUDER=1;}</p><p>  if(sec==0)</p><p><b>  {sec=0;</b></p><p><b>  ET1=0;</b></p><p><b>  TR1=0;</b></p><p>  ke

97、y=0;}}}/*****************功能鍵盤掃描************/</p><p>  key_scan()</p><p>  { unsigned char k=0,p1_h=0,p1_l=0;</p><p><b>  P1=0XF0;</b></p><p><b>  k=P1

98、;</b></p><p><b>  flag=0;</b></p><p>  if(k!=0XF0)</p><p>  { delay(60);</p><p>  k=P1; //讀入行鍵值</p><p><b>  flag=1;&

99、lt;/b></p><p>  if(k!=0XF0)</p><p>  {p1_h=P1; //行鍵值給高位</p><p>  P1=0X0f;//翻轉(zhuǎn)后讀入列的值給P1(讀鍵值時按鍵還未釋放)</p><p>  p1_l=P1; //列鍵值給低位</p><p>  

100、k=p1_h | p1_l; //高低位相或確定具體按鍵值 flag2++; //第二個人搶答無效,即鎖存第一個人的號</p><p>  if(flag2==1) </p><p>  sec2=sec; </p><p>  if(flag2>=2)</p><p><b>  k=0; </b>

101、;</p><p><b>  switch(k)</b></p><p>  { case 0: return(0) ;break;</p><p>  case 238: return(key=1,sec=60);break;</p><p>  case 237: return(key=2,sec=60);

102、break;</p><p>  case 235: return(key=3,sec=60);break;</p><p>  case 231: return(key=4,sec=60);break;</p><p>  case 222: return(key=5,sec=60);break;</p><p>  case 221: r

103、eturn(key=6,sec=60);break;</p><p>  case 219: return(key=7,sec=60);break;</p><p>  case 215: return(key=8,sec=60);break;</p><p>  case 190: return(key=9,sec=60);break;</p>&l

104、t;p>  case 189: return(key=10,sec=60);break;</p><p>  case 187: return(key=11,sec=60);break;</p><p>  case 183: return(key=12,sec=60);break;</p><p>  case 126: return(key=13,sec=

105、60);break;</p><p>  case 125: return(key=14,sec=60);break;</p><p>  case 123: return(key=15,sec=60);break;</p><p>  case 119: return(key=16,sec=60);break;</p><p>  defa

106、ult: return(0) ;break;}}</p><p><b>  else</b></p><p>  return(0);}else </p><p>  return(0);</p><p>  }/************main() 函數(shù)***************/</p>

107、<p>  void main()</p><p>  { LOUDER=0;</p><p><b>  init();</b></p><p><b>  while(1)</b></p><p>  {key_scan();</p><p>  if(

108、(flag3==2)|(flag3==4))</p><p>  delay(250);</p><p>  if((flag3==2)|(flag3==4))</p><p>  {if(ADD==0)</p><p><b>  sec++;</b></p><p>  if(SUB==0)&

109、lt;/p><p><b>  sec--; }</b></p><p><b>  i=2;</b></p><p>  for(i=2;i>0;i--)</p><p>  { if((flag!=0)&&(flag1==1)) //在外部中斷T1觸發(fā)后flag1=1,fl

110、ag4的初值為0,開始搶答,并且有人搶答,啟動定時器T1倒計時60S//</p><p>  { LOUDER=0;</p><p>  delay(250);</p><p><b>  LOUDER=1;</b></p><p><b>  ET1=0;</b></p><

111、p><b>  TR0=0;</b></p><p><b>  TL1=0XB0;</b></p><p><b>  TH1=0X3C;</b></p><p><b>  ET1=1;</b></p><p><b>  TR1=1;

112、}</b></p><p>  if(flag==0) //沒有選手按下按鍵時此模塊是在沒有按鍵按下時flag=0;只用于顯示倒計時的時間, 包括30秒 和60秒兩個倒計時//</p><p>  { P2=0xfd;</p><p>  P0=led[key%10];</p><p><b>  delay1

113、();</b></p><p><b>  P2=0xff;</b></p><p><b>  P2=0xfe;</b></p><p>  P0=led[key/10];</p><p><b>  delay1();</b></p><p&

114、gt;<b>  P2=0xff;</b></p><p>  P0=led[sec%10];</p><p><b>  P2=0x7f;</b></p><p><b>  delay(8);</b></p><p><b>  P2=0xff</b>

115、</p><p>  P0=led[sec/10];</p><p><b>  P2=0xbf;</b></p><p><b>  delay(8);</b></p><p>  P2=0xff; }else</p><p>  if((flag!=0)&(fl

116、ag1==0))//外部中斷T1 沒觸發(fā)一次則flag1=0;但是在又有按鍵按下即是有選手違規(guī)搶答時,此模塊用作顯示違規(guī)者的號碼,同時有提示聲音//</p><p>  { sec=sec2; </p><p><b>  P2=0xfd;</b></p><p>  P0=led[key%10];</p><

117、;p><b>  delay1();</b></p><p><b>  P2=0xff;</b></p><p><b>  P2=0xfe;</b></p><p>  P0=led[key/10];</p><p><b>  delay1();</

118、b></p><p><b>  P2=0xff;</b></p><p><b>  P2=0xfB;</b></p><p>  P0=led[10];</p><p><b>  delay1();</b></p><p><b>

119、  P2=0xff;</b></p><p><b>  P2=0xf7;</b></p><p>  P0=led[10];</p><p><b>  delay1();</b></p><p><b>  P2=0xff; </b></p>&l

120、t;p><b>  LOUDER=0;</b></p><p>  delay(250);</p><p><b>  LOUDER=1;</b></p><p><b>  flag=0;</b></p><p>  flag1=0;} } }} </p>

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論