版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 緒論1</b></p><p> 1.1基于單片機(jī)搶答器的系統(tǒng)結(jié)構(gòu)與原理2</p><p> 1.2設(shè)計(jì)內(nèi)容和要求3</p><p><b> 2 硬件設(shè)計(jì)3</b></p>
2、<p> 2.1搶答器硬件電路圖3</p><p> 2.2搶答器各部分電路設(shè)計(jì)4</p><p> 2.2.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)4</p><p> 2.2.2搶答器按鍵電路的設(shè)計(jì)6</p><p> 2.2.3中斷控制按鍵電路的設(shè)計(jì)6</p><p> 2.2.4數(shù)碼管顯示電路的設(shè)
3、計(jì)6</p><p> 2.2.5蜂鳴器報(bào)警電路的設(shè)計(jì)7</p><p> 3.1主程序設(shè)計(jì)8</p><p> 。。。。。。。。。。。。。。。。。。8</p><p> 3.2延時(shí)程序設(shè)計(jì)9</p><p> 。。。。。。。。。。。。。。。。。。。。。。。9</p><p&g
4、t; 3.3鍵盤掃描程序設(shè)計(jì)9</p><p> 。。。。。。。。。。。。。。。。。。。。。。。9</p><p> 3.4數(shù)碼管顯示程序設(shè)計(jì)10</p><p> 。。。。。。。。。。。。。。。。。。。。。10</p><p> 3.5搶答程序設(shè)計(jì)10</p><p> 。。。。。。。。。。。。
5、。。。。。。。。。10</p><p> 3.6倒計(jì)時(shí)程序設(shè)計(jì)12</p><p> 。。。。。。。。。。。。。。。。。。。。。。。。12</p><p> 3.7程序流程圖13</p><p> 。。。。。。。。。。。。。。。。。。。。。。。。13</p><p><b> 4 仿真調(diào)試
6、19</b></p><p> 4.1 仿真軟件簡(jiǎn)介19</p><p> 4.1.1 Keil 仿真軟件19</p><p> 。。。。。。。。。。。。。。。。。。。19</p><p> 4.1.2 PROTEUS仿真軟件19</p><p> 4.2 仿真調(diào)試結(jié)果19</p
7、><p><b> 結(jié)束語22</b></p><p><b> 致謝23</b></p><p><b> 緒論</b></p><p> 1.單片機(jī)搶答器的背景</p><p> 二十世紀(jì)跨越了三個(gè)“電”的時(shí)代,即電氣時(shí)代、電子時(shí)代和現(xiàn)已進(jìn)
8、入的電腦時(shí)代。不過,這種電腦,通常是指?jìng)€(gè)人計(jì)算機(jī),簡(jiǎn)稱PC機(jī)。它由主機(jī)、鍵盤、顯示器等組成。還有一類計(jì)算機(jī)。大多數(shù)人卻不怎么熟悉。這種計(jì)算機(jī)就是把智能賦予各種機(jī)械的單片機(jī)(稱微控制器)。顧名思義,這種計(jì)算機(jī)的最小系統(tǒng)只用了一片集成電路,即可進(jìn)行簡(jiǎn)單的運(yùn)算和控制。因?yàn)樗捏w積小,通常都藏在被控機(jī)械的“肚子”里。它在整個(gè)裝置中,起著有如人類頭腦的作用,它出了毛病,整個(gè)裝置就癱瘓了?,F(xiàn)在,這種單片機(jī)的使用領(lǐng)域已十分廣泛,如智能儀表、實(shí)時(shí)工控、
9、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機(jī),就能起到產(chǎn)品升級(jí)換代的功效,常在產(chǎn)品名稱前冠以形容詞“智能型”。在知識(shí)競(jìng)賽中,往往會(huì)用到搶答器。故此我們就選擇利用單片機(jī)編程來設(shè)計(jì)搶答器,即使兩組的搶答時(shí)間相差幾微秒,也能輕松分辨出哪一組(或哪個(gè)選手)先搶答到題。</p><p> 2.單片機(jī)搶答器的意義</p><p> 本系統(tǒng)采用單片機(jī)作為整個(gè)控制核心??刂葡到y(tǒng)的四個(gè)模塊為
10、:顯示模塊、儲(chǔ)存模塊、語音模塊、搶答模塊。該系統(tǒng)通過開關(guān)電路八個(gè)按鍵輸入搶答信號(hào),利用一個(gè)數(shù)碼管來完成顯示功能用按鍵來讓選手進(jìn)行搶答,在數(shù)碼管上顯示哪一組先答題的,從而實(shí)現(xiàn)整個(gè)搶答過程。本文主要介紹了單片機(jī)搶答器設(shè)計(jì)及工作原理,以及它的實(shí)際用途。系統(tǒng)工作原理采用AT89C51單片機(jī)作為核心??刂葡到y(tǒng)的四個(gè)模塊為:顯示模塊、儲(chǔ)存模塊、語音模塊、搶答模塊。該系統(tǒng)通過開關(guān)電路八個(gè)按鍵輸入搶答信號(hào),利用一個(gè)數(shù)碼管來完成顯示功能。工作時(shí),用按鍵通
11、過開關(guān)電路輸入各路的搶答信號(hào),經(jīng)單片機(jī)的處理,輸出控制信號(hào),單片機(jī)控制的智能搶答器設(shè)計(jì)。</p><p><b> 3.搶答器的應(yīng)用</b></p><p> 隨著我國(guó)經(jīng)濟(jì)和文化事業(yè)的發(fā)展,在很多公開競(jìng)爭(zhēng)場(chǎng)合要求有公正的競(jìng)爭(zhēng)裁決,諸如證券、股票交易及各種智力競(jìng)賽等,因此出現(xiàn)了搶答器。搶答器一般由很多電路組成,線路復(fù)雜,可靠性不高,功能也比較簡(jiǎn)單,特別是當(dāng)搶答路數(shù)多
12、時(shí),實(shí)現(xiàn)起來就更加的困難。因此我們?cè)O(shè)計(jì)了以單片機(jī)為核心的新型智能搶答器,在保留原始搶答器的基本功能的同時(shí)又增加了數(shù)碼管顯示電路實(shí)現(xiàn)了其它功能。搶答器又稱為第一信號(hào)鑒別器,其主要應(yīng)用于各種知識(shí)競(jìng)賽、文藝活動(dòng)等場(chǎng)合。</p><p><b> 1 系統(tǒng)設(shè)計(jì)方案</b></p><p> 1.1基于單片機(jī)搶答器的系統(tǒng)結(jié)構(gòu)與原理</p><p>
13、 圖1所示為搶答器電路,搶答器電路實(shí)際上就是單片機(jī)最小系統(tǒng)的應(yīng)用,主要由單片機(jī)芯片加上時(shí)鐘電路和復(fù)位電路以及按鍵和數(shù)碼管顯示電路及報(bào)警電路組成。1~8為8個(gè) 搶答鍵。P1.0~P1.7為8路搶答信號(hào)輸入端。當(dāng)有搶答鍵按下時(shí),對(duì)應(yīng)輸入端為低電平“0”反之為高電平“1”。開始搶答鍵為搶答啟動(dòng)鍵。在搶答開始時(shí),按動(dòng)一下開始搶答鍵,向單片機(jī)申請(qǐng)一次INTO中斷單片機(jī)在中斷服務(wù)程序中對(duì)搶答信號(hào)進(jìn)行采樣和識(shí)別處理。</p><p
14、> 采用四位LED共陰極數(shù)碼管以動(dòng)態(tài)掃描方式對(duì)搶答鍵號(hào)、違規(guī)搶答鍵號(hào)、倒計(jì)時(shí)時(shí)間等信息進(jìn)行顯示。蜂鳴器對(duì)違規(guī)搶答信號(hào)進(jìn)行報(bào)警,以示出錯(cuò)警告。 </p><p><b> 圖1 搶答器電路圖</b></p><p> 1.2設(shè)計(jì)內(nèi)容和要求</p><p> 本系統(tǒng)的設(shè)計(jì)內(nèi)容和要求如下:</p><p> 1
15、. 主持人按“搶答開始”鍵,立刻進(jìn)入搶答倒計(jì)時(shí)(預(yù)設(shè)15s搶答時(shí)間),如果有選手搶答,并會(huì)顯示其號(hào)碼并立刻進(jìn)入回答時(shí)間(預(yù)設(shè)30s搶答時(shí)間),不進(jìn)行搶答查詢,所以只有第一個(gè)按搶答的選手有效。</p><p> 2. 如果主持人未按“搶答開始”鍵,而有人按了搶答鍵,犯規(guī)搶答,LED上顯示犯規(guī)號(hào)數(shù)并揚(yáng)聲器發(fā)聲連續(xù)響十下。</p><p> 3. P3.2為開始搶答,P3.6為停止,p1.0
16、-p1.7為八路搶答輸入,數(shù)碼管選P0口,位選P2口低4位,蜂鳴器輸出為P3.7口。</p><p><b> 2 硬件設(shè)計(jì)</b></p><p> 2.1搶答器硬件電路圖</p><p> 搶答器硬件電路圖如圖1所示,主要包括以下幾部分:</p><p> ?。?)單片機(jī)最小系統(tǒng)電路:</p>
17、<p> 單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng):是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:?jiǎn)纹瑱C(jī)、晶振電路、復(fù)位電路。</p><p> 復(fù)位電路:由電容串聯(lián)電阻構(gòu)成,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且,這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定.典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠
18、的復(fù)位。一般教科書推薦C 取10u,R取10K。</p><p> ?。?)搶答按鍵電路:</p><p> 搶答按鍵電路由8個(gè)按鈕和8個(gè)均值的電阻通過總線連接在AT89C51的P1.0至P1.7實(shí)現(xiàn)功能。</p><p> ?。?)中斷控制按鍵電路:</p><p> 由兩個(gè)10K的電阻,和兩個(gè)按鈕通過圖7的連接,并且D0、D1分別連接
19、在AT89C51芯片的P3.2口和P3.6.其中一個(gè)按鈕為開始搶答鍵,另一個(gè)為復(fù)位鍵。</p><p> ?。?)數(shù)碼管顯示電路:</p><p> 由七段數(shù)碼管7SEG-MPX-CA、RESPACK-8、74LS244及導(dǎo)線按圖8連接</p><p> 其中74LS244主要用于三態(tài)輸出,作為地址驅(qū)動(dòng)器、時(shí)鐘驅(qū)動(dòng)器、總線驅(qū)動(dòng)器和定向發(fā)送器等.</p>
20、;<p> ?。?)蜂鳴器報(bào)警電路:</p><p> 由一個(gè)200歐的電阻和SPEAKER連接,其中揚(yáng)聲器的一端與電阻相連,另一端連在AT89C51P3.7口。揚(yáng)聲器起到報(bào)警作用,若有選手出現(xiàn)搶答犯規(guī),則揚(yáng)聲器發(fā)聲。</p><p> 2.2搶答器各部分電路設(shè)計(jì)</p><p> 2.2.1單片機(jī)最小系統(tǒng)的設(shè)計(jì)</p><p
21、> 單片機(jī)的最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作</p><p> 的系統(tǒng)。對(duì)51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括單片機(jī)芯片,時(shí)鐘電路和復(fù)位電路等三部分組成。最小系統(tǒng)電路圖如圖2所示。</p><p> 圖2 單片機(jī)最小系統(tǒng)圖</p><p> 2.2.1.1時(shí)鐘電路設(shè)計(jì)</p><p>
22、時(shí)鐘電路用于產(chǎn)生MCS-51單片機(jī)工作所必需的時(shí)鐘控制信號(hào)。時(shí)鐘頻率直接影響單片機(jī)的速度,電路的質(zhì)量直接影響系統(tǒng)的穩(wěn)定性。常用的時(shí)鐘電路有兩種方式:內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。</p><p><b> ?。?)內(nèi)部時(shí)鐘方式</b></p><p> 利用芯片內(nèi)部的振蕩器,然后在引腳XTALl和XTAL2兩端跨接晶體振蕩器(簡(jiǎn)稱晶振),就構(gòu)成了穩(wěn)定的自激振蕩器,發(fā)出
23、的脈沖直接送入內(nèi)部時(shí)鐘電路。具體的接線方法如圖3所示。外接晶振時(shí),C l和C2的值通常選擇為30pF左右;C l、C2對(duì)頻率有微調(diào)作用,晶振或陶瓷諧振器的頻率范圍可在1.2~12MHz之間選擇,其典型值為12MHz或6MHz。某些高速單片機(jī)芯片的時(shí)鐘頻率已達(dá)40MHz。</p><p><b> ?。?)外部時(shí)鐘方式</b></p><p> 外部時(shí)鐘信號(hào)由外部振蕩
24、器產(chǎn)生,它的波形應(yīng)為方波,頻率應(yīng)符合所用的MCS-51單片機(jī)的具體要求。接入外部時(shí)鐘時(shí),應(yīng)根據(jù)不同類型的單片機(jī),選擇相應(yīng)的連線方式,如圖4所示。</p><p> 本系統(tǒng)采用內(nèi)部時(shí)鐘電路方式。</p><p> 圖3 MCS-51采用內(nèi)部時(shí)鐘的接線圖</p><p> 圖4 MCS-51單片機(jī)與外部時(shí)鐘的連接方式</p><p>
25、2.2.1.2復(fù)位電路設(shè)計(jì)</p><p> 如圖5(a)所示為開機(jī)復(fù)位電路,也稱上電復(fù)位電路,由電容C1和電阻R1組成,一般C1取10uF,R1取8.2KΩ。上電復(fù)位電路是利用電容兩端電壓不能突變的原理實(shí)現(xiàn)的。當(dāng)斷電時(shí),電容C1經(jīng)放電后電荷為0;當(dāng)上電時(shí),由于電容兩端電壓不能突變,RST端的電平為高電平,隨著電容的充電,RST端的電位逐漸降低,最終變?yōu)?。從上電到電容充電結(jié)束,RST端的電平由高電平到低電平,
26、只要選擇合適的電容、電阻參數(shù),就能夠保證兩個(gè)以上機(jī)器周期的復(fù)位高電平時(shí)間,從而保證復(fù)位的實(shí)現(xiàn)。</p><p> 如圖5(b)所示為開機(jī)復(fù)位與人工復(fù)位電路也稱按鍵復(fù)位電路。在系統(tǒng)運(yùn)行過程中,只要按下按鍵就可以復(fù)位。一般R1=1KΩ,R2=200Ω,C=22uF,按下按鍵,可以簡(jiǎn)單看成兩個(gè)電阻串聯(lián),因?yàn)镽1的電阻大,因而RST分壓為高電平,系統(tǒng)復(fù)位,松開按鍵后RST電壓給C充電,隨著電容的充電,RST端的電位逐漸
27、降低,最終變?yōu)?。系統(tǒng)開始工作。</p><p> 本系統(tǒng)采用按鍵復(fù)位電路。</p><p> (a)開機(jī)復(fù)位電路 (b)開機(jī)復(fù)位/人工復(fù)位電路</p><p> 圖5 MCS-51單片機(jī)的復(fù)位電路</p><p> 2.2.2搶答器按鍵電路的設(shè)計(jì)</p><p> 搶答器輸入信號(hào)由八個(gè)按鍵控制,當(dāng)有鍵按下的
28、時(shí)候,就會(huì)產(chǎn)生有效的輸入信號(hào),本設(shè)計(jì)使用了上拉電阻把輸入信號(hào)先嵌位在高電平,當(dāng)有按鍵按下時(shí)便使與這個(gè)按鍵相連的引腳變成低電平,產(chǎn)生一個(gè)低電平的輸入信號(hào)。</p><p> 圖6 搶答器按鍵電路</p><p> 2.2.3中斷控制按鍵電路的設(shè)計(jì)</p><p> 如圖7為中斷按鍵控制電路,其中有兩個(gè)按鍵D0、D1分別連接在AT89C51芯片的P3.2口和P3.
29、6.其中一個(gè)按鈕為開始搶答鍵,另一個(gè)為復(fù)位鍵。開始搶答按鈕由主持人按,當(dāng)主持人按下開始搶答后,選手方可搶答,否則視為搶答違規(guī);另一按鈕為復(fù)位按鈕,搶答到的選手在限制的時(shí)間內(nèi)回答問題,若選手提前回答完畢,則主持人可通過復(fù)位鍵進(jìn)行下一輪的搶答。</p><p> 圖7 中斷按鍵控制電路</p><p> 2.2.4數(shù)碼管顯示電路的設(shè)計(jì)</p><p> 本設(shè)計(jì)使
30、用七段數(shù)碼管顯示,通常在顯示上我們采用的方法一般包括兩種:一種是靜態(tài)顯示,一種是動(dòng)態(tài)顯示。其中靜態(tài)顯示的特點(diǎn)是顯示穩(wěn)定不閃爍,程序編寫簡(jiǎn)單,但占用端口資源多;動(dòng)態(tài)顯示的特點(diǎn)是顯示穩(wěn)定性沒靜態(tài)好,程序編寫復(fù)雜,但相對(duì)靜態(tài)顯示而言占用資源少。本設(shè)計(jì)采用的是動(dòng)態(tài)顯示方法。</p><p> 圖8 數(shù)碼管顯示電路</p><p> 圖8中數(shù)碼管采用的是4位七段共陰極數(shù)碼管,其中A~H段分別接
31、到單片機(jī)的P0口,由單片機(jī)輸出P0口數(shù)據(jù)來決定段碼值,位選碼COM1、COM2、COM3、COM4分別接到單片機(jī)的P2.0、P2.1、P2.2、P2.3,由單片機(jī)來決定當(dāng)前該顯示的哪一位。圖中還有八個(gè)10K的電阻,連接在P0口上,用作P0口的上拉電阻,保證P0口沒有數(shù)據(jù)輸出時(shí)候出于高電平狀態(tài)。</p><p> 2.2.5蜂鳴器報(bào)警電路的設(shè)計(jì)</p><p> 我們知道,聲音的頻譜范圍
32、約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個(gè)口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)控制高或低電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音頻,使喇叭發(fā)出不同的聲音。圖9中單片機(jī)的14腳輸出具有復(fù)合功能,此處用到了單片機(jī)17腳的IO端口功能,單片機(jī)通過內(nèi)部定時(shí)器的操作實(shí)現(xiàn)交替變換的波形輸出驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。</p><p> 圖9 蜂鳴器報(bào)警
33、電路</p><p><b> 3 軟件設(shè)計(jì)</b></p><p> 程序總體說明:實(shí)現(xiàn)搶答器功能的程序主要包括:主程序,沒有進(jìn)入中斷時(shí),掃描選手是否犯規(guī),有選手犯規(guī),蜂鳴器叫,并顯示選手號(hào);延時(shí)程序;鍵盤掃描程序,判斷是否有按鍵按下,有按鍵按下時(shí)返回鍵值;數(shù)據(jù)顯示程序,數(shù)碼管數(shù)據(jù)顯示,倒計(jì)時(shí)和座位號(hào);外部中斷0,搶答程序;T0 定時(shí)中斷,倒計(jì)時(shí)程序等。分別介
34、紹如下,程序清單見附錄。</p><p><b> 3.1主程序設(shè)計(jì)</b></p><p> void main()</p><p><b> {</b></p><p> uchar i,j;</p><p><b> P1=0XFF;</b&g
35、t;</p><p><b> P2=0XFF;</b></p><p><b> P0=0XFF;</b></p><p> TMOD=0X01; //定時(shí)中斷初始化</p><p><b> TH0=0X3C;</b></p><p>
36、<b> TL0=0XB0;</b></p><p><b> EA=1;</b></p><p><b> EX0=1;</b></p><p><b> ET0=1;</b></p><p><b> IT0=1;</b>
37、;</p><p><b> PT0=1;</b></p><p><b> ss=10;</b></p><p><b> s=10;</b></p><p><b> while(1)</b></p><p><b
38、> {</b></p><p> keyscan(); </p><p> if(kk!=9) //有選手犯規(guī)</p><p><b> {</b></p><p> for(i=0;i<100;i++)</p><p><b> {</b
39、></p><p> keyscan(); </p><p><b> P2=0x08;</b></p><p> P0=~codekey[kk+1];</p><p> delay(10); //顯示犯規(guī)的選手</p><p> for(j=0;j<3;j++)&
40、lt;/p><p><b> {</b></p><p> naba=0; //蜂鳴器叫</p><p> delay(10);</p><p><b> naba=1;</b></p><p> delay(10);</p><p><
41、;b> }</b></p><p><b> }</b></p><p><b> kk=9;</b></p><p><b> }</b></p><p><b> }</b></p><p><
42、b> }</b></p><p><b> 3.2延時(shí)程序設(shè)計(jì)</b></p><p> void delay(uchar t1)</p><p><b> {</b></p><p> uchar i,j;</p><p> for(i=0;i
43、<t1;i++)</p><p> for(j=0;j<143;j++);</p><p><b> }</b></p><p> 3.3鍵盤掃描程序設(shè)計(jì)</p><p> uchar keyscan() </p><p><b> {</b><
44、/p><p> uchar key;</p><p><b> P1=0xff;</b></p><p><b> key=P1;</b></p><p> if(key!=0xff)</p><p><b> {</b></p>&
45、lt;p> delay(10); //延時(shí)去抖</p><p> if(key!=0xff)</p><p><b> {</b></p><p> switch(key)</p><p><b> {</b></p><p> case 0xfe: kk
46、=0;break;</p><p> case 0xfd: kk=1;break;</p><p> case 0xfb: kk=2;break;</p><p> case 0xf7: kk=3;break;</p><p> case 0xef: kk=4;break;</p><p> case 0x
47、df: kk=5;break;</p><p> case 0xbf: kk=6;break;</p><p> case 0x7f: kk=7;break;</p><p><b> }</b></p><p> return(kk);</p><p><b> }
48、</b></p><p><b> }</b></p><p> return(9);</p><p><b> }</b></p><p> 3.4數(shù)碼管顯示程序設(shè)計(jì)</p><p> void display()</p><p&g
49、t;<b> {</b></p><p><b> P2=0X01;</b></p><p> P0=~codekey[ss];</p><p> delay(10);</p><p><b> P2=0x02;</b></p><p> P
50、0=~codekey[s];</p><p> delay(10);</p><p><b> P2=0x04;</b></p><p><b> P0=~0xc0;</b></p><p> delay(10);</p><p><b> P2=0x08
51、;</b></p><p> P0=~codekey[kk+1];</p><p> delay(10);</p><p><b> }</b></p><p><b> 3.5搶答程序設(shè)計(jì)</b></p><p> void int0() inter
52、rupt 0</p><p><b> {</b></p><p><b> naba=1;</b></p><p><b> rst=1;</b></p><p><b> TR0=1;</b></p><p><b
53、> s=3;</b></p><p><b> ss=0;</b></p><p><b> kk=9;</b></p><p> while(s!=0) //3s的倒計(jì)時(shí)</p><p><b> {</b></p><p&
54、gt; display();</p><p><b> }</b></p><p><b> s=5;</b></p><p><b> ss=1;</b></p><p> while((s||ss)!=0&&kk==9) //15秒的搶答時(shí)間,時(shí)
55、間到或者有選手按下時(shí),跳出循環(huán)</p><p><b> {</b></p><p> keyscan();</p><p> display();</p><p><b> }</b></p><p><b> if(kk!=9)</b>&l
56、t;/p><p><b> {</b></p><p><b> s=0;</b></p><p><b> ss=3;</b></p><p> while(rst==1&&(s||ss)!=0)</p><p><b>
57、 {</b></p><p> display();</p><p><b> }</b></p><p><b> }</b></p><p><b> TR0=0;</b></p><p><b> s=10;<
58、;/b></p><p><b> ss=10;</b></p><p><b> kk=9;</b></p><p><b> P2=0x08;</b></p><p><b> P0=~0x80;</b></p><p
59、> delay(10);</p><p> //display();</p><p><b> }</b></p><p> 3.6 倒計(jì)時(shí)程序設(shè)計(jì)</p><p> void time() interrupt 1</p><p><b> {</b>&l
60、t;/p><p> uchar rr,ms;</p><p><b> rr=0;</b></p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> ms++;&
61、lt;/b></p><p> if(ms==20)</p><p><b> {</b></p><p><b> ms=0;</b></p><p><b> if(s!=0)</b></p><p><b> {</
62、b></p><p><b> if(s>0)</b></p><p><b> s--;</b></p><p><b> if(s==0)</b></p><p><b> rr=1;</b></p><p>
63、;<b> }</b></p><p> if(rr!=1&ss!=0&s==0)</p><p><b> {</b></p><p><b> rr=0;</b></p><p><b> ss--;</b></p>
64、;<p><b> s=9;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 3.7程序流程圖</b><
65、;/p><p> #include<reg51.h></p><p> #define uchar unsigned char</p><p> sbit rst=P3^6; //復(fù)位鍵</p><p> sbit naba=P3^7; //蜂鳴器</p><p> uchar s,ss;
66、 //倒計(jì)時(shí)的位秒,十秒</p><p> uchar kk=9; //鍵值</p><p> uchar codekey[]={0x3f,0x06,0x5b,0x4f,0x66,</p><p> 0x6d,0x7d,0x07,0x7f,0x6f,0x3f}; //0~9 數(shù)碼管的編號(hào)</p><p> void dela
67、y(uchar t1);//延時(shí)函數(shù)</p><p> uchar keyscan();//鍵盤掃描</p><p> void display(); //數(shù)據(jù)顯示</p><p> //**************************************************************//</p><p>&l
68、t;b> //延時(shí)函數(shù)//</b></p><p> //**************************************************************//</p><p> void delay(uchar t1)</p><p><b> {</b></p><p&
69、gt; uchar i,j;</p><p> for(i=0;i<t1;i++)</p><p> for(j=0;j<143;j++);</p><p><b> }</b></p><p> //*************************************************
70、*************//</p><p> //判斷是否有按鍵按下,有按鍵按下時(shí)返回鍵值//</p><p> //*************************************************************//</p><p> uchar keyscan() </p><p><b>
71、 {</b></p><p> uchar key;</p><p><b> P1=0xff;</b></p><p><b> key=P1;</b></p><p> if(key!=0xff)</p><p><b> {</b
72、></p><p> delay(10); //延時(shí)去抖</p><p> if(key!=0xff)</p><p><b> {</b></p><p> switch(key)</p><p><b> {</b></p><p&g
73、t; case 0xfe: kk=0;break;</p><p> case 0xfd: kk=1;break;</p><p> case 0xfb: kk=2;break;</p><p> case 0xf7: kk=3;break;</p><p> case 0xef: kk=4;break;</p>&
74、lt;p> case 0xdf: kk=5;break;</p><p> case 0xbf: kk=6;break;</p><p> case 0x7f: kk=7;break;</p><p><b> }</b></p><p> return(kk);</p><
75、p><b> }</b></p><p><b> }</b></p><p> return(9);</p><p><b> }</b></p><p> //*************************************************
76、************//</p><p> //數(shù)碼管數(shù)據(jù)顯示,倒計(jì)時(shí)和座位號(hào)//</p><p> //************************************************************//</p><p> void display()</p><p><b> {</b&
77、gt;</p><p><b> P2=0X01;</b></p><p> P0=~codekey[ss];</p><p> delay(10);</p><p><b> P2=0x02;</b></p><p> P0=~codekey[s];</p&
78、gt;<p> delay(10);</p><p><b> P2=0x04;</b></p><p><b> P0=~0xc0;</b></p><p> delay(10);</p><p><b> P2=0x08;</b></p>
79、<p> P0=~codekey[kk+1];</p><p> delay(10);</p><p><b> }</b></p><p> //**********************************************************//</p><p> //T0
80、 定時(shí)中斷,倒計(jì)時(shí)//</p><p> //**********************************************************//</p><p> void time() interrupt 1</p><p><b> {</b></p><p> uchar rr,ms;
81、</p><p><b> rr=0;</b></p><p><b> TH0=0X3C;</b></p><p><b> TL0=0XB0;</b></p><p><b> ms++;</b></p><p> i
82、f(ms==20)</p><p><b> {</b></p><p><b> ms=0;</b></p><p><b> if(s!=0)</b></p><p><b> {</b></p><p><b&g
83、t; if(s>0)</b></p><p><b> s--;</b></p><p><b> if(s==0)</b></p><p><b> rr=1;</b></p><p><b> }</b></p>
84、<p> if(rr!=1&ss!=0&s==0)</p><p><b> {</b></p><p><b> rr=0;</b></p><p><b> ss--;</b></p><p><b> s=9;</b
85、></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //***********************************************************//
86、</p><p> //外部中斷0,進(jìn)入搶答階段//</p><p> //***********************************************************//</p><p> void int0() interrupt 0</p><p><b> {</b></p
87、><p><b> naba=1;</b></p><p><b> rst=1;</b></p><p><b> TR0=1;</b></p><p><b> s=3;</b></p><p><b> ss=
88、0;</b></p><p><b> kk=9;</b></p><p> while(s!=0) //3s的倒計(jì)時(shí)</p><p><b> {</b></p><p> display();</p><p><b> }</b&
89、gt;</p><p><b> s=5;</b></p><p><b> ss=1;</b></p><p> while((s||ss)!=0&&kk==9) //15秒的搶答時(shí)間,時(shí)間到或者有選手按下時(shí),跳出循環(huán)</p><p><b> {</b&
90、gt;</p><p> keyscan();</p><p> display();</p><p><b> }</b></p><p><b> if(kk!=9)</b></p><p><b> {</b></p>&l
91、t;p><b> s=0;</b></p><p><b> ss=3;</b></p><p> while(rst==1&&(s||ss)!=0)</p><p><b> {</b></p><p> display();</p>
92、;<p><b> }</b></p><p><b> }</b></p><p><b> TR0=0;</b></p><p><b> s=10;</b></p><p><b> ss=10;</b>
93、</p><p><b> kk=9;</b></p><p><b> P2=0x08;</b></p><p><b> P0=~0x80;</b></p><p> delay(10);</p><p> //display();<
94、;/p><p><b> }</b></p><p> //***********************************************************//</p><p> //主函數(shù),沒有進(jìn)入中斷時(shí),掃描選手是否犯規(guī),有選手犯規(guī),蜂鳴器叫,并顯示選手號(hào)//</p><p> //****
95、*******************************************************//</p><p> void main()</p><p><b> {</b></p><p> uchar i,j;</p><p><b> P1=0XFF;</b><
96、;/p><p><b> P2=0XFF;</b></p><p><b> P0=0XFF;</b></p><p> TMOD=0X01; //定時(shí)中斷初始化</p><p><b> TH0=0X3C;</b></p><p><b
97、> TL0=0XB0;</b></p><p><b> EA=1;</b></p><p><b> EX0=1;</b></p><p><b> ET0=1;</b></p><p><b> IT0=1;</b><
98、/p><p><b> PT0=1;</b></p><p><b> ss=10;</b></p><p><b> s=10;</b></p><p><b> while(1)</b></p><p><b>
99、 {</b></p><p> keyscan(); </p><p> if(kk!=9) //有選手犯規(guī)</p><p><b> {</b></p><p> for(i=0;i<100;i++)</p><p><b> {</b>&
100、lt;/p><p> keyscan(); </p><p><b> P2=0x08;</b></p><p> P0=~codekey[kk+1];</p><p> delay(10); //顯示犯規(guī)的選手</p><p> for(j=0;j<3;j++)</p
101、><p><b> {</b></p><p> naba=0; //蜂鳴器叫</p><p> delay(10);</p><p><b> naba=1;</b></p><p> delay(10);</p><p><b>
102、; }</b></p><p><b> }</b></p><p><b> kk=9;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
103、 }</b></p><p><b> 4 仿真調(diào)試</b></p><p> 4.1 仿真軟件簡(jiǎn)介</p><p> 4.1.1 Keil 仿真軟件</p><p> Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性
104、、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。運(yùn)行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)令你事半功倍。&l
105、t;/p><p> 4.1.2 PROTEUS仿真軟件</p><p> Proteus軟件是英國(guó)Labcenter electronics公司出版的EDA工具軟件(該軟件中國(guó)總代理為廣州風(fēng)標(biāo)電子技術(shù)有限公司)。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國(guó)內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力
106、于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即將增加Corte
107、x和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。</p><p> 4.2 仿真調(diào)試結(jié)果</p><p> (1)搶答犯規(guī)顯示,且揚(yáng)聲器發(fā)聲,仿真結(jié)果如圖10所示。</p><p> 圖10 搶答犯規(guī)仿真圖</p><p> (2)搶答器開始時(shí)數(shù)碼管顯示序號(hào)0,選手搶答
108、實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清除為止。搶答后顯示優(yōu)先搶答者序號(hào),并且不出現(xiàn)其他搶答者的序號(hào),仿真結(jié)果如圖11所示。</p><p> 圖11 開始搶答仿真圖</p><p> (3)搶答器具有定時(shí)搶答功能,仿真結(jié)果如圖12所示。</p><p> 圖12定時(shí)搶答仿真圖</p><p> (4)主持人按下復(fù)位開
109、關(guān),使得搶答器再次進(jìn)入禁止?fàn)顟B(tài),選手編號(hào)的LED數(shù)字顯示器燈熄滅,電路進(jìn)入原來的初始狀態(tài),準(zhǔn)備進(jìn)入下一輪的搶答,仿真結(jié)果如圖13所示。</p><p><b> 圖XX 復(fù)位仿真圖</b></p><p><b> 圖13復(fù)位仿真圖</b></p><p><b> 結(jié)束語</b></p&
110、gt;<p> 通過本次課程設(shè)計(jì)使我對(duì)Proteus仿真軟件的使用有了更進(jìn)一步的了解和掌控。在最初編寫過程中,我也曾經(jīng)因?yàn)閷?shí)踐經(jīng)驗(yàn)的缺乏失落過,也曾經(jīng)因仿真成功而熱情高漲。特別是Proteus仿真軟件的使用,不知是由于電腦的問題還是怎么,這個(gè)軟件的安裝花了我很長(zhǎng)的時(shí)間,好不容易安裝好了,自己對(duì)編程又有點(diǎn)不熟練,只能自己多看書,當(dāng)我把程序?qū)胄酒?,進(jìn)行仿真時(shí),也沒能一次成功,總是要經(jīng)過無數(shù)次的更改才能實(shí)現(xiàn)結(jié)果,程序正常運(yùn)行
111、的那一刻,心中真是有幾分的喜悅。對(duì)能力強(qiáng)的人來說是挺簡(jiǎn)單的,但對(duì)我來說,真是花了不少的心血啊。</p><p> 這次課程設(shè)計(jì)讓我充分理解了AT89C51芯片的工作原理,知道了搶答器的硬件和軟件的實(shí)現(xiàn)過程,并且通過自己動(dòng)手編寫程序來控制搶答器的工作,我感到非常有成就感,也鍛煉了我的編程能力。在剛開始編程的時(shí)候,我感到很茫然,不知道怎么樣下手,但是通過自己的仔細(xì)分析和老師的細(xì)心認(rèn)真分析了原來已有的代碼后,和應(yīng)有的
112、硬件后,經(jīng)過多次調(diào)試和測(cè)試終于成功了。</p><p> 在此我非常感謝的是我的指導(dǎo)老師何玲老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),交給我許多原來不知道的知識(shí)。這次課程設(shè)計(jì)能夠順利的完成,當(dāng)然有我個(gè)人的努力,但同時(shí)也離不開指導(dǎo)老師和同學(xué)們的幫助。</p><p><b> 致謝</b></p><p> 本論文自始至終是在xx老師的關(guān)心和指導(dǎo)下完
113、成的。導(dǎo)師為論文課題的研究提出了許</p><p> 多指導(dǎo)性的意見,為論文的撰寫、修改提出了許多具體的指導(dǎo)和幫助。在兩年的學(xué)習(xí)中,xx老師在學(xué)習(xí)上給了我極大的幫助,何xx老師豐富的實(shí)踐經(jīng)驗(yàn)給我留下了深刻的印象,這一切將使我終生受益。在此,衷心感謝x老師對(duì)我的培養(yǎng)與教育。</p><p> 感謝在這段時(shí)間xx同學(xué)對(duì)我的幫助,在近三年的學(xué)習(xí)中,我們進(jìn)行了無數(shù)次有益的</p>
114、<p> 學(xué)術(shù)探討,在這過程中受益匪淺,令人難忘! 另外,還要感謝電子工程系老師在兩年中為我們付出的辛勤勞動(dòng)。他們不僅給與我專業(yè)知識(shí)上的指導(dǎo)還教給了我學(xué)習(xí)的方法和思路,使我在社會(huì)生活及論文寫作過程中不斷有新的認(rèn)識(shí)和提高。在此,我對(duì)他們表示由衷的感謝。 </p><p> 感謝所有關(guān)心和幫助過我的朋友和師長(zhǎng)!在此,向他們致以深深的謝意!</p><p><b&g
115、t; 參考文獻(xiàn)</b></p><p> [1]王迎旭.《單片機(jī)原理與應(yīng)用》. 機(jī)械工業(yè)出版社 2009年</p><p> [2]程相波,衛(wèi)安軍. 基于MCS-51單片機(jī)的八路搶答器設(shè)計(jì)方法研究【J】.北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2007,(2)。</p><p> [3]林凌,李剛,丁茹,李小霞,新型單片機(jī)接口器件與技術(shù)。西安電子科
116、技大學(xué)出版社,2005</p><p> [4]李增生,對(duì)《搶答器》的改進(jìn)【J】,電子制作,2000,(12)</p><p> [5]馬軻瀛,八路搶答器系統(tǒng)【J】,華裔,2007,(23)</p><p> [6]高偉,AT89單片機(jī)原理及應(yīng)用【M】,北京:國(guó)防工業(yè)出版社,2008年</p><p> [7]蔡朝陽,單片機(jī)控制實(shí)習(xí)與
117、專題制作【M】,北京:北京航空航天大學(xué)出版社,2006年</p><p> [8]楊凌霄,微型計(jì)算機(jī)原理及應(yīng)用【M】,江蘇:中國(guó)礦業(yè)大學(xué)出版社,2004年</p><p> [9]丁建偉,搶答器電路設(shè)計(jì)【J】,蘭州工業(yè)高等??茖W(xué)校學(xué)報(bào),2008,(04)</p><p> [10]胡雪海,單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)【M】,北京:北京電子工業(yè)出版社,2005年&l
118、t;/p><p><b> 附錄</b></p><p><b> 程序清單:</b></p><p> #include<reg51.h></p><p> #define uchar unsigned char</p><p> sbit rst=P3^
119、6; //復(fù)位鍵</p><p> sbit naba=P3^7; //蜂鳴器</p><p> uchar s,ss; //倒計(jì)時(shí)的位秒,十秒</p><p> uchar kk=9; //鍵值</p><p> uchar codekey[]={0x3f,0x06,0x5b,0x4f,0x66,</p&
120、gt;<p> 0x6d,0x7d,0x07,0x7f,0x6f,0x3f}; //0~9 數(shù)碼管的編號(hào)</p><p> void delay(uchar t1);//延時(shí)函數(shù)</p><p> uchar keyscan();//鍵盤掃描</p><p> void display(); //數(shù)據(jù)顯示</p><p>
121、; //**************************************************************//</p><p><b> //延時(shí)函數(shù)//</b></p><p> //**************************************************************//</p>
122、<p> void delay(uchar t1)</p><p><b> {</b></p><p> uchar i,j;</p><p> for(i=0;i<t1;i++)</p><p> for(j=0;j<143;j++);</p><p><
123、b> }</b></p><p> //**************************************************************//</p><p> //判斷是否有按鍵按下,有按鍵按下時(shí)返回鍵值//</p><p> //*****************************************
124、********************//</p><p> uchar keyscan() </p><p><b> {</b></p><p> uchar key;</p><p><b> P1=0xff;</b></p><p><b>
125、key=P1;</b></p><p> if(key!=0xff)</p><p><b> {</b></p><p> delay(10); //延時(shí)去抖</p><p> if(key!=0xff)</p><p><b> {</b><
126、/p><p> switch(key)</p><p><b> {</b></p><p> case 0xfe: kk=0;break;</p><p> case 0xfd: kk=1;break;</p><p> case 0xfb: kk=2;break;</p>
127、<p> case 0xf7: kk=3;break;</p><p> case 0xef: kk=4;break;</p><p> case 0xdf: kk=5;break;</p><p> case 0xbf: kk=6;break;</p><p> case 0x7f: kk=7;break;&
128、lt;/p><p><b> }</b></p><p> return(kk);</p><p><b> }</b></p><p><b> }</b></p><p> return(9);</p><p><
129、b> }</b></p><p> //*************************************************************//</p><p> //數(shù)碼管數(shù)據(jù)顯示,倒計(jì)時(shí)和座位號(hào)//</p><p> //***********************************************
130、*************//</p><p> void display()</p><p><b> {</b></p><p><b> P2=0X01;</b></p><p> P0=~codekey[ss];</p><p> delay(10);<
131、;/p><p><b> P2=0x02;</b></p><p> P0=~codekey[s];</p><p> delay(10);</p><p><b> P2=0x04;</b></p><p><b> P0=~0xc0;</b>&
132、lt;/p><p> delay(10);</p><p><b> P2=0x08;</b></p><p> P0=~codekey[kk+1];</p><p> delay(10);</p><p><b> }</b></p><p>
133、; //**********************************************************//</p><p> //T0 定時(shí)中斷,倒計(jì)時(shí)//</p><p> //**********************************************************//</p><p> void time
134、() interrupt 1</p><p><b> {</b></p><p> uchar rr,ms;</p><p><b> rr=0;</b></p><p><b> TH0=0X3C;</b></p><p><b>
135、 TL0=0XB0;</b></p><p><b> ms++;</b></p><p> if(ms==20)</p><p><b> {</b></p><p><b> ms=0;</b></p><p><b>
136、; if(s!=0)</b></p><p><b> {</b></p><p><b> if(s>0)</b></p><p><b> s--;</b></p><p><b> if(s==0)</b></p&g
137、t;<p><b> rr=1;</b></p><p><b> }</b></p><p> if(rr!=1&ss!=0&s==0)</p><p><b> {</b></p><p><b> rr=0;</b&
138、gt;</p><p><b> ss--;</b></p><p><b> s=9;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)搶答器畢業(yè)論文
- 數(shù)字搶答器畢業(yè)論文
- 畢業(yè)論文——數(shù)字搶答器
- 多路搶答器畢業(yè)論文
- 單片機(jī)無線搶答器設(shè)計(jì)畢業(yè)論文
- 四路搶答器畢業(yè)論文--基于單片機(jī)的四路搶答器設(shè)計(jì)
- 8路搶答器畢業(yè)論文
- 5路搶答器畢業(yè)論文
- 基于單片機(jī)的搶答器設(shè)計(jì)【畢業(yè)論文】
- 基于單片機(jī)的搶答器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的搶答器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的搶答器設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的搶答器設(shè)計(jì)畢業(yè)論文
- 單片機(jī)六路搶答器【畢業(yè)論文】
- 四路搶答器設(shè)計(jì)畢業(yè)論文
- plc聲光智能搶答器畢業(yè)論文
- 競(jìng)賽搶答器的設(shè)計(jì)畢業(yè)論文
- 智能搶答器的設(shè)計(jì)-畢業(yè)論文
- 智力競(jìng)賽搶答器畢業(yè)論文
- 數(shù)字四路搶答器畢業(yè)論文
評(píng)論
0/150
提交評(píng)論