版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 緒論1</b></p><p> 1.1基于單片機搶答器的系統(tǒng)結(jié)構(gòu)與原理2</p><p> 1.2設(shè)計內(nèi)容和要求3</p><p><b> 2 硬件設(shè)計3</b></p>
2、<p> 2.1搶答器硬件電路圖3</p><p> 2.2搶答器各部分電路設(shè)計4</p><p> 2.2.1單片機最小系統(tǒng)的設(shè)計4</p><p> 2.2.2搶答器按鍵電路的設(shè)計6</p><p> 2.2.3中斷控制按鍵電路的設(shè)計6</p><p> 2.2.4數(shù)碼管顯示電路的設(shè)
3、計6</p><p> 2.2.5蜂鳴器報警電路的設(shè)計7</p><p> 3.1主程序設(shè)計8</p><p> 。。。。。。。。。。。。。。。。。。8</p><p> 3.2延時程序設(shè)計9</p><p> 。。。。。。。。。。。。。。。。。。。。。。。9</p><p&g
4、t; 3.3鍵盤掃描程序設(shè)計9</p><p> 。。。。。。。。。。。。。。。。。。。。。。。9</p><p> 3.4數(shù)碼管顯示程序設(shè)計10</p><p> 。。。。。。。。。。。。。。。。。。。。。10</p><p> 3.5搶答程序設(shè)計10</p><p> 。。。。。。。。。。。。
5、。。。。。。。。。10</p><p> 3.6倒計時程序設(shè)計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 仿真軟件簡介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.單片機搶答器的背景</p><p> 二十世紀跨越了三個“電”的時代,即電氣時代、電子時代和現(xiàn)已進
8、入的電腦時代。不過,這種電腦,通常是指個人計算機,簡稱PC機。它由主機、鍵盤、顯示器等組成。還有一類計算機。大多數(shù)人卻不怎么熟悉。這種計算機就是把智能賦予各種機械的單片機(稱微控制器)。顧名思義,這種計算機的最小系統(tǒng)只用了一片集成電路,即可進行簡單的運算和控制。因為它的體積小,通常都藏在被控機械的“肚子”里。它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了。現(xiàn)在,這種單片機的使用領(lǐng)域已十分廣泛,如智能儀表、實時工控、
9、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機,就能起到產(chǎn)品升級換代的功效,常在產(chǎn)品名稱前冠以形容詞“智能型”。在知識競賽中,往往會用到搶答器。故此我們就選擇利用單片機編程來設(shè)計搶答器,即使兩組的搶答時間相差幾微秒,也能輕松分辨出哪一組(或哪個選手)先搶答到題。</p><p> 2.單片機搶答器的意義</p><p> 本系統(tǒng)采用單片機作為整個控制核心??刂葡到y(tǒng)的四個模塊為
10、:顯示模塊、儲存模塊、語音模塊、搶答模塊。該系統(tǒng)通過開關(guān)電路八個按鍵輸入搶答信號,利用一個數(shù)碼管來完成顯示功能用按鍵來讓選手進行搶答,在數(shù)碼管上顯示哪一組先答題的,從而實現(xiàn)整個搶答過程。本文主要介紹了單片機搶答器設(shè)計及工作原理,以及它的實際用途。系統(tǒng)工作原理采用AT89C51單片機作為核心??刂葡到y(tǒng)的四個模塊為:顯示模塊、儲存模塊、語音模塊、搶答模塊。該系統(tǒng)通過開關(guān)電路八個按鍵輸入搶答信號,利用一個數(shù)碼管來完成顯示功能。工作時,用按鍵通
11、過開關(guān)電路輸入各路的搶答信號,經(jīng)單片機的處理,輸出控制信號,單片機控制的智能搶答器設(shè)計。</p><p><b> 3.搶答器的應(yīng)用</b></p><p> 隨著我國經(jīng)濟和文化事業(yè)的發(fā)展,在很多公開競爭場合要求有公正的競爭裁決,諸如證券、股票交易及各種智力競賽等,因此出現(xiàn)了搶答器。搶答器一般由很多電路組成,線路復(fù)雜,可靠性不高,功能也比較簡單,特別是當搶答路數(shù)多
12、時,實現(xiàn)起來就更加的困難。因此我們設(shè)計了以單片機為核心的新型智能搶答器,在保留原始搶答器的基本功能的同時又增加了數(shù)碼管顯示電路實現(xiàn)了其它功能。搶答器又稱為第一信號鑒別器,其主要應(yīng)用于各種知識競賽、文藝活動等場合。</p><p><b> 1 系統(tǒng)設(shè)計方案</b></p><p> 1.1基于單片機搶答器的系統(tǒng)結(jié)構(gòu)與原理</p><p>
13、 圖1所示為搶答器電路,搶答器電路實際上就是單片機最小系統(tǒng)的應(yīng)用,主要由單片機芯片加上時鐘電路和復(fù)位電路以及按鍵和數(shù)碼管顯示電路及報警電路組成。1~8為8個 搶答鍵。P1.0~P1.7為8路搶答信號輸入端。當有搶答鍵按下時,對應(yīng)輸入端為低電平“0”反之為高電平“1”。開始搶答鍵為搶答啟動鍵。在搶答開始時,按動一下開始搶答鍵,向單片機申請一次INTO中斷單片機在中斷服務(wù)程序中對搶答信號進行采樣和識別處理。</p><p
14、> 采用四位LED共陰極數(shù)碼管以動態(tài)掃描方式對搶答鍵號、違規(guī)搶答鍵號、倒計時時間等信息進行顯示。蜂鳴器對違規(guī)搶答信號進行報警,以示出錯警告。 </p><p><b> 圖1 搶答器電路圖</b></p><p> 1.2設(shè)計內(nèi)容和要求</p><p> 本系統(tǒng)的設(shè)計內(nèi)容和要求如下:</p><p> 1
15、. 主持人按“搶答開始”鍵,立刻進入搶答倒計時(預(yù)設(shè)15s搶答時間),如果有選手搶答,并會顯示其號碼并立刻進入回答時間(預(yù)設(shè)30s搶答時間),不進行搶答查詢,所以只有第一個按搶答的選手有效。</p><p> 2. 如果主持人未按“搶答開始”鍵,而有人按了搶答鍵,犯規(guī)搶答,LED上顯示犯規(guī)號數(shù)并揚聲器發(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è)計</b></p><p> 2.1搶答器硬件電路圖</p><p> 搶答器硬件電路圖如圖1所示,主要包括以下幾部分:</p><p> ?。?)單片機最小系統(tǒng)電路:</p>
17、<p> 單片機最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng):是指用最少的元件組成的單片機可以工作的系統(tǒng)。對51系列單片機來說,最小系統(tǒng)一般應(yīng)該包括:單片機、晶振電路、復(fù)位電路。</p><p> 復(fù)位電路:由電容串聯(lián)電阻構(gòu)成,當系統(tǒng)一上電,RST腳將會出現(xiàn)高電平,并且,這個高電平持續(xù)的時間由電路的RC值來決定.典型的51單片機當RST腳的高電平持續(xù)兩個機器周期以上就將復(fù)位,所以,適當組合RC的取值就可以保證可靠
18、的復(fù)位。一般教科書推薦C 取10u,R取10K。</p><p> ?。?)搶答按鍵電路:</p><p> 搶答按鍵電路由8個按鈕和8個均值的電阻通過總線連接在AT89C51的P1.0至P1.7實現(xiàn)功能。</p><p> ?。?)中斷控制按鍵電路:</p><p> 由兩個10K的電阻,和兩個按鈕通過圖7的連接,并且D0、D1分別連接
19、在AT89C51芯片的P3.2口和P3.6.其中一個按鈕為開始搶答鍵,另一個為復(fù)位鍵。</p><p> ?。?)數(shù)碼管顯示電路:</p><p> 由七段數(shù)碼管7SEG-MPX-CA、RESPACK-8、74LS244及導(dǎo)線按圖8連接</p><p> 其中74LS244主要用于三態(tài)輸出,作為地址驅(qū)動器、時鐘驅(qū)動器、總線驅(qū)動器和定向發(fā)送器等.</p>
20、;<p> (5)蜂鳴器報警電路:</p><p> 由一個200歐的電阻和SPEAKER連接,其中揚聲器的一端與電阻相連,另一端連在AT89C51P3.7口。揚聲器起到報警作用,若有選手出現(xiàn)搶答犯規(guī),則揚聲器發(fā)聲。</p><p> 2.2搶答器各部分電路設(shè)計</p><p> 2.2.1單片機最小系統(tǒng)的設(shè)計</p><p
21、> 單片機的最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機可以工作</p><p> 的系統(tǒng)。對51系列單片機來說,最小系統(tǒng)一般應(yīng)該包括單片機芯片,時鐘電路和復(fù)位電路等三部分組成。最小系統(tǒng)電路圖如圖2所示。</p><p> 圖2 單片機最小系統(tǒng)圖</p><p> 2.2.1.1時鐘電路設(shè)計</p><p>
22、時鐘電路用于產(chǎn)生MCS-51單片機工作所必需的時鐘控制信號。時鐘頻率直接影響單片機的速度,電路的質(zhì)量直接影響系統(tǒng)的穩(wěn)定性。常用的時鐘電路有兩種方式:內(nèi)部時鐘方式和外部時鐘方式。</p><p><b> (1)內(nèi)部時鐘方式</b></p><p> 利用芯片內(nèi)部的振蕩器,然后在引腳XTALl和XTAL2兩端跨接晶體振蕩器(簡稱晶振),就構(gòu)成了穩(wěn)定的自激振蕩器,發(fā)出
23、的脈沖直接送入內(nèi)部時鐘電路。具體的接線方法如圖3所示。外接晶振時,C l和C2的值通常選擇為30pF左右;C l、C2對頻率有微調(diào)作用,晶振或陶瓷諧振器的頻率范圍可在1.2~12MHz之間選擇,其典型值為12MHz或6MHz。某些高速單片機芯片的時鐘頻率已達40MHz。</p><p><b> ?。?)外部時鐘方式</b></p><p> 外部時鐘信號由外部振蕩
24、器產(chǎn)生,它的波形應(yīng)為方波,頻率應(yīng)符合所用的MCS-51單片機的具體要求。接入外部時鐘時,應(yīng)根據(jù)不同類型的單片機,選擇相應(yīng)的連線方式,如圖4所示。</p><p> 本系統(tǒng)采用內(nèi)部時鐘電路方式。</p><p> 圖3 MCS-51采用內(nèi)部時鐘的接線圖</p><p> 圖4 MCS-51單片機與外部時鐘的連接方式</p><p>
25、2.2.1.2復(fù)位電路設(shè)計</p><p> 如圖5(a)所示為開機復(fù)位電路,也稱上電復(fù)位電路,由電容C1和電阻R1組成,一般C1取10uF,R1取8.2KΩ。上電復(fù)位電路是利用電容兩端電壓不能突變的原理實現(xiàn)的。當斷電時,電容C1經(jīng)放電后電荷為0;當上電時,由于電容兩端電壓不能突變,RST端的電平為高電平,隨著電容的充電,RST端的電位逐漸降低,最終變?yōu)?。從上電到電容充電結(jié)束,RST端的電平由高電平到低電平,
26、只要選擇合適的電容、電阻參數(shù),就能夠保證兩個以上機器周期的復(fù)位高電平時間,從而保證復(fù)位的實現(xiàn)。</p><p> 如圖5(b)所示為開機復(fù)位與人工復(fù)位電路也稱按鍵復(fù)位電路。在系統(tǒng)運行過程中,只要按下按鍵就可以復(fù)位。一般R1=1KΩ,R2=200Ω,C=22uF,按下按鍵,可以簡單看成兩個電阻串聯(lián),因為R1的電阻大,因而RST分壓為高電平,系統(tǒng)復(fù)位,松開按鍵后RST電壓給C充電,隨著電容的充電,RST端的電位逐漸
27、降低,最終變?yōu)?。系統(tǒng)開始工作。</p><p> 本系統(tǒng)采用按鍵復(fù)位電路。</p><p> ?。╝)開機復(fù)位電路 (b)開機復(fù)位/人工復(fù)位電路</p><p> 圖5 MCS-51單片機的復(fù)位電路</p><p> 2.2.2搶答器按鍵電路的設(shè)計</p><p> 搶答器輸入信號由八個按鍵控制,當有鍵按下的
28、時候,就會產(chǎn)生有效的輸入信號,本設(shè)計使用了上拉電阻把輸入信號先嵌位在高電平,當有按鍵按下時便使與這個按鍵相連的引腳變成低電平,產(chǎn)生一個低電平的輸入信號。</p><p> 圖6 搶答器按鍵電路</p><p> 2.2.3中斷控制按鍵電路的設(shè)計</p><p> 如圖7為中斷按鍵控制電路,其中有兩個按鍵D0、D1分別連接在AT89C51芯片的P3.2口和P3.
29、6.其中一個按鈕為開始搶答鍵,另一個為復(fù)位鍵。開始搶答按鈕由主持人按,當主持人按下開始搶答后,選手方可搶答,否則視為搶答違規(guī);另一按鈕為復(fù)位按鈕,搶答到的選手在限制的時間內(nèi)回答問題,若選手提前回答完畢,則主持人可通過復(fù)位鍵進行下一輪的搶答。</p><p> 圖7 中斷按鍵控制電路</p><p> 2.2.4數(shù)碼管顯示電路的設(shè)計</p><p> 本設(shè)計使
30、用七段數(shù)碼管顯示,通常在顯示上我們采用的方法一般包括兩種:一種是靜態(tài)顯示,一種是動態(tài)顯示。其中靜態(tài)顯示的特點是顯示穩(wěn)定不閃爍,程序編寫簡單,但占用端口資源多;動態(tài)顯示的特點是顯示穩(wěn)定性沒靜態(tài)好,程序編寫復(fù)雜,但相對靜態(tài)顯示而言占用資源少。本設(shè)計采用的是動態(tài)顯示方法。</p><p> 圖8 數(shù)碼管顯示電路</p><p> 圖8中數(shù)碼管采用的是4位七段共陰極數(shù)碼管,其中A~H段分別接
31、到單片機的P0口,由單片機輸出P0口數(shù)據(jù)來決定段碼值,位選碼COM1、COM2、COM3、COM4分別接到單片機的P2.0、P2.1、P2.2、P2.3,由單片機來決定當前該顯示的哪一位。圖中還有八個10K的電阻,連接在P0口上,用作P0口的上拉電阻,保證P0口沒有數(shù)據(jù)輸出時候出于高電平狀態(tài)。</p><p> 2.2.5蜂鳴器報警電路的設(shè)計</p><p> 我們知道,聲音的頻譜范圍
32、約在幾十到幾千赫茲,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時控制高或低電平的持續(xù)時間,就能改變輸出頻率,從而改變音頻,使喇叭發(fā)出不同的聲音。圖9中單片機的14腳輸出具有復(fù)合功能,此處用到了單片機17腳的IO端口功能,單片機通過內(nèi)部定時器的操作實現(xiàn)交替變換的波形輸出驅(qū)動揚聲器發(fā)聲。</p><p> 圖9 蜂鳴器報警
33、電路</p><p><b> 3 軟件設(shè)計</b></p><p> 程序總體說明:實現(xiàn)搶答器功能的程序主要包括:主程序,沒有進入中斷時,掃描選手是否犯規(guī),有選手犯規(guī),蜂鳴器叫,并顯示選手號;延時程序;鍵盤掃描程序,判斷是否有按鍵按下,有按鍵按下時返回鍵值;數(shù)據(jù)顯示程序,數(shù)碼管數(shù)據(jù)顯示,倒計時和座位號;外部中斷0,搶答程序;T0 定時中斷,倒計時程序等。分別介
34、紹如下,程序清單見附錄。</p><p><b> 3.1主程序設(shè)計</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; //定時中斷初始化</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è)計</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è)計</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); //延時去抖</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è)計</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è)計</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的倒計時</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秒的搶答時間,時
55、間到或者有選手按下時,跳出循環(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 倒計時程序設(shè)計</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、 //倒計時的位秒,十秒</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ù)碼管的編號</p><p> void dela
67、y(uchar t1);//延時函數(shù)</p><p> uchar keyscan();//鍵盤掃描</p><p> void display(); //數(shù)據(jù)顯示</p><p> //**************************************************************//</p><p>&l
68、t;b> //延時函數(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> //判斷是否有按鍵按下,有按鍵按下時返回鍵值//</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); //延時去抖</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ù)顯示,倒計時和座位號//</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、 定時中斷,倒計時//</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,進入搶答階段//</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的倒計時</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秒的搶答時間,時間到或者有選手按下時,跳出循環(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ù),沒有進入中斷時,掃描選手是否犯規(guī),有選手犯規(guī),蜂鳴器叫,并顯示選手號//</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; //定時中斷初始化</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 仿真軟件簡介</p><p> 4.1.1 Keil 仿真軟件</p><p> Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性
104、、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令你事半功倍。&l
105、t;/p><p> 4.1.2 PROTEUS仿真軟件</p><p> Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件(該軟件中國總代理為廣州風標電子技術(shù)有限公司)。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機愛好者、從事單片機教學(xué)的教師、致力
106、于單片機開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是目前世界上唯一將電路仿真軟件、PCB設(shè)計軟件和虛擬模型仿真軟件三合一的設(shè)計平臺,其處理器模型支持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ī)顯示,且揚聲器發(fā)聲,仿真結(jié)果如圖10所示。</p><p> 圖10 搶答犯規(guī)仿真圖</p><p> (2)搶答器開始時數(shù)碼管顯示序號0,選手搶答
108、實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。搶答后顯示優(yōu)先搶答者序號,并且不出現(xiàn)其他搶答者的序號,仿真結(jié)果如圖11所示。</p><p> 圖11 開始搶答仿真圖</p><p> (3)搶答器具有定時搶答功能,仿真結(jié)果如圖12所示。</p><p> 圖12定時搶答仿真圖</p><p> (4)主持人按下復(fù)位開
109、關(guān),使得搶答器再次進入禁止狀態(tài),選手編號的LED數(shù)字顯示器燈熄滅,電路進入原來的初始狀態(tài),準備進入下一輪的搶答,仿真結(jié)果如圖13所示。</p><p><b> 圖XX 復(fù)位仿真圖</b></p><p><b> 圖13復(fù)位仿真圖</b></p><p><b> 結(jié)束語</b></p&
110、gt;<p> 通過本次課程設(shè)計使我對Proteus仿真軟件的使用有了更進一步的了解和掌控。在最初編寫過程中,我也曾經(jīng)因為實踐經(jīng)驗的缺乏失落過,也曾經(jīng)因仿真成功而熱情高漲。特別是Proteus仿真軟件的使用,不知是由于電腦的問題還是怎么,這個軟件的安裝花了我很長的時間,好不容易安裝好了,自己對編程又有點不熟練,只能自己多看書,當我把程序?qū)胄酒?,進行仿真時,也沒能一次成功,總是要經(jīng)過無數(shù)次的更改才能實現(xiàn)結(jié)果,程序正常運行
111、的那一刻,心中真是有幾分的喜悅。對能力強的人來說是挺簡單的,但對我來說,真是花了不少的心血啊。</p><p> 這次課程設(shè)計讓我充分理解了AT89C51芯片的工作原理,知道了搶答器的硬件和軟件的實現(xiàn)過程,并且通過自己動手編寫程序來控制搶答器的工作,我感到非常有成就感,也鍛煉了我的編程能力。在剛開始編程的時候,我感到很茫然,不知道怎么樣下手,但是通過自己的仔細分析和老師的細心認真分析了原來已有的代碼后,和應(yīng)有的
112、硬件后,經(jīng)過多次調(diào)試和測試終于成功了。</p><p> 在此我非常感謝的是我的指導(dǎo)老師何玲老師,感謝老師的細心認真的輔導(dǎo),交給我許多原來不知道的知識。這次課程設(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老師豐富的實踐經(jīng)驗給我留下了深刻的印象,這一切將使我終生受益。在此,衷心感謝x老師對我的培養(yǎng)與教育。</p><p> 感謝在這段時間xx同學(xué)對我的幫助,在近三年的學(xué)習(xí)中,我們進行了無數(shù)次有益的</p>
114、<p> 學(xué)術(shù)探討,在這過程中受益匪淺,令人難忘! 另外,還要感謝電子工程系老師在兩年中為我們付出的辛勤勞動。他們不僅給與我專業(yè)知識上的指導(dǎo)還教給了我學(xué)習(xí)的方法和思路,使我在社會生活及論文寫作過程中不斷有新的認識和提高。在此,我對他們表示由衷的感謝。 </p><p> 感謝所有關(guān)心和幫助過我的朋友和師長!在此,向他們致以深深的謝意!</p><p><b&g
115、t; 參考文獻</b></p><p> [1]王迎旭.《單片機原理與應(yīng)用》. 機械工業(yè)出版社 2009年</p><p> [2]程相波,衛(wèi)安軍. 基于MCS-51單片機的八路搶答器設(shè)計方法研究【J】.北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報,2007,(2)。</p><p> [3]林凌,李剛,丁茹,李小霞,新型單片機接口器件與技術(shù)。西安電子科
116、技大學(xué)出版社,2005</p><p> [4]李增生,對《搶答器》的改進【J】,電子制作,2000,(12)</p><p> [5]馬軻瀛,八路搶答器系統(tǒng)【J】,華裔,2007,(23)</p><p> [6]高偉,AT89單片機原理及應(yīng)用【M】,北京:國防工業(yè)出版社,2008年</p><p> [7]蔡朝陽,單片機控制實習(xí)與
117、專題制作【M】,北京:北京航空航天大學(xué)出版社,2006年</p><p> [8]楊凌霄,微型計算機原理及應(yīng)用【M】,江蘇:中國礦業(yè)大學(xué)出版社,2004年</p><p> [9]丁建偉,搶答器電路設(shè)計【J】,蘭州工業(yè)高等??茖W(xué)校學(xué)報,2008,(04)</p><p> [10]胡雪海,單片機原理及應(yīng)用系統(tǒng)設(shè)計【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; //倒計時的位秒,十秒</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ù)碼管的編號</p><p> void delay(uchar t1);//延時函數(shù)</p><p> uchar keyscan();//鍵盤掃描</p><p> void display(); //數(shù)據(jù)顯示</p><p>
121、; //**************************************************************//</p><p><b> //延時函數(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> //判斷是否有按鍵按下,有按鍵按下時返回鍵值//</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); //延時去抖</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ù)顯示,倒計時和座位號//</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 定時中斷,倒計時//</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等.壓縮文件請下載最新的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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機搶答器畢業(yè)論文
- 數(shù)字搶答器畢業(yè)論文
- 畢業(yè)論文——數(shù)字搶答器
- 多路搶答器畢業(yè)論文
- 單片機無線搶答器設(shè)計畢業(yè)論文
- 四路搶答器畢業(yè)論文--基于單片機的四路搶答器設(shè)計
- 8路搶答器畢業(yè)論文
- 5路搶答器畢業(yè)論文
- 基于單片機的搶答器設(shè)計【畢業(yè)論文】
- 基于單片機的搶答器設(shè)計畢業(yè)論文
- 基于單片機的搶答器設(shè)計畢業(yè)論文
- 基于單片機的搶答器設(shè)計畢業(yè)論文
- 基于單片機的搶答器設(shè)計畢業(yè)論文
- 單片機六路搶答器【畢業(yè)論文】
- 四路搶答器設(shè)計畢業(yè)論文
- plc聲光智能搶答器畢業(yè)論文
- 競賽搶答器的設(shè)計畢業(yè)論文
- 智能搶答器的設(shè)計-畢業(yè)論文
- 智力競賽搶答器畢業(yè)論文
- 數(shù)字四路搶答器畢業(yè)論文
評論
0/150
提交評論