版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計</p><p> 課程名稱 單片機原理及應(yīng)用 </p><p> 課題名稱 搶答器設(shè)計 </p><p> 專 業(yè) 自動化 </p><p> 班
2、 級 自動化090 2 </p><p> 學(xué) 號 </p><p> 姓 名 </p><p> 指導(dǎo)教師 </p>&
3、lt;p> 2012年 6 月 13 日</p><p><b> 目 錄</b></p><p> 第1章 課題設(shè)計的要求、目的及意義1</p><p> 1.1課題設(shè)計的要求1</p><p> 1.2課題設(shè)計的目的及意義1</p><p> 第2章 總體設(shè)
4、計思路2</p><p> 2.1 總體設(shè)計框圖2</p><p> 2.2 總體設(shè)計流程圖3</p><p> 第3章 各單元設(shè)計及說明4</p><p> 3.1 硬件單元設(shè)計及說明4</p><p> 3.2 軟件設(shè)計及說明6</p><p> 第4章 調(diào)試
5、與運行9</p><p><b> 4.1仿真測試9</b></p><p> 4.2仿真結(jié)果分析11</p><p> 第5章 系統(tǒng)硬件調(diào)試及結(jié)果12</p><p> 第6章 心得體會13</p><p><b> 參考文獻14</b></
6、p><p><b> 附件15</b></p><p><b> 源程序15</b></p><p> PROTEUS系統(tǒng)電路原理圖24</p><p> 第1章 課題設(shè)計的要求、目的及意義</p><p> 1.1 課題設(shè)計的要求</p><
7、;p> 本課題要求以單片機為核心設(shè)計一個電子搶答器,具有搶答控制和倒計時顯示功能。有一位主持人與3~4位搶答者,控制器應(yīng)有復(fù)位控制、開始控制、搶答控制和狀態(tài)指示等功能,并有答題時間控制和顯示功能。設(shè)計任務(wù)包括控制器硬件設(shè)計和應(yīng)用程序設(shè)計。</p><p> 1.2 課題設(shè)計的目的及意義</p><p><b> 課題設(shè)計的目的:</b></p>
8、<p> 掌握用51單片機控制LED數(shù)碼管顯示字符的方法。</p><p> 掌握用單片機進行顯示系統(tǒng)開發(fā)的方法。</p><p> 掌握單片機軟件、硬件調(diào)試技術(shù)。</p><p> 了解LED顯示器的一般驅(qū)動方法。</p><p><b> 課題設(shè)計的意義:</b></p><
9、;p> 本系統(tǒng)采用單片機作為整個控制核心。該系統(tǒng)通過搶答電路鍵盤按鍵輸入搶答信號;利用一個數(shù)碼管來完成顯示功能;用按鍵來讓選手進行搶答,在數(shù)碼管上顯示哪一組先答題的,從而實現(xiàn)整個搶答過程。在知識比賽中,特別是做搶答題目的時候,在搶答過程中,為了知道哪一組或哪一位選手先答題,必須要設(shè)計一個系統(tǒng)來完成這個任務(wù)。如果在搶答中,靠視覺是很難判斷出哪組先答題。利用單片機系統(tǒng)來設(shè)計搶答器,使以上問題得以解決,即使兩組的搶答時間相差幾微秒,也
10、可分辨出哪組優(yōu)先答題。通過該課程的學(xué)習(xí)使我們對計算機控制系統(tǒng)有一個全面的了解、掌握常規(guī)控制算法的使用方法、掌握簡單微型計算機應(yīng)用系統(tǒng)軟硬的設(shè)計方法,進一步鍛煉同學(xué)們在微型計算機應(yīng)用方面的實際工作能力。</p><p> 第2章 總體設(shè)計思路</p><p> 設(shè)計目的:設(shè)計簡單搶答器,功能齊全,連線簡單,方便學(xué)校時常舉行競賽。同時加深對單片機的認(rèn)識和理解,加強自己的動手能力。<
11、/p><p> 設(shè)計內(nèi)容及要求:本課題要求以單片機為核心設(shè)計一個竟賽搶答器系統(tǒng),具有搶答控制和倒計時顯示功能。有一位主持人和3位搶答者,控制系統(tǒng)應(yīng)有復(fù)位控制、開始控制、搶答控制和狀態(tài)指示等功能,并有答題時間控制與時間顯示功能。設(shè)計任務(wù)包括控制系統(tǒng)硬件設(shè)計和應(yīng)用程序設(shè)計。一位主持人和3位搶答者,復(fù)位后,3位搶答者的兩組指示燈全亮;開始后,開始指示燈亮,3位搶答者指示燈全暗,準(zhǔn)備開始;優(yōu)先者成功搶答及相應(yīng)指示燈亮,不出
12、現(xiàn)其他搶答者的序號;在規(guī)定前搶答,示為犯規(guī)并指示;答題開始,有倒計時顯示,到規(guī)定時間不允許答題;復(fù)位返回。在七段數(shù)碼管上將其組號(1-3)顯示出來,并使喇叭響一下(或LED顯示)。</p><p> 2.1 總體設(shè)計框圖</p><p> 利用單片機設(shè)計,總體框圖如下圖2.1所示:</p><p> 本搶答系統(tǒng)設(shè)計為三路搶答,通過對應(yīng)LED燈亮、數(shù)碼管顯示編
13、號來表明某一搶答者搶答,在搶答者搶答之前,由主持人按下復(fù)位鍵后,在按下開始鍵,說明搶答開始,10秒鐘之內(nèi),若有人搶答,就由搶答者開始答題,限時一分鐘,一分鐘內(nèi)答完,由主持人復(fù)位,再重新開始新一輪的搶答;若一分鐘內(nèi)未答完,系統(tǒng)就會報警,定時器中斷,停止計時,此次搶答完成,再開始新一輪的搶答。10秒分鐘內(nèi)沒人搶答,系統(tǒng)報警,進入下一個題目的搶答。搶答者若是在復(fù)位鍵按下后,開始鍵按下之前就強答,則說明搶答者未按規(guī)則搶答,此次搶答也無效,然后由
14、主持人復(fù)位,開始搶答下一題目。</p><p> 2.2 總體設(shè)計流程圖</p><p> 利用單片機設(shè)計,總體設(shè)計流程圖如下圖2.2所示:</p><p> 第三章 各單元設(shè)計及說明</p><p> 3.1 硬件單元設(shè)計及說明</p><p> 3.1.1 搶答電路</p><p
15、> 搶答器是將鍵盤部分、單片機部分、鎖存顯示部分按指示的3個單元電路相接。這樣就將整個硬件部分連接起來組成一個整體電路。搶答器由主體電路和擴展電路兩部分組成。主體電路完成基本的搶答功能;擴展電路完成定時搶答的功能。定時搶答器的工作過程是:接通電源時,節(jié)目主持人按下復(fù)位鍵,搶答器處于禁止工作狀態(tài),編號顯示器滅燈,定時顯示器滅燈,當(dāng)節(jié)目主持人宣布“搶答開始”,同時按下開始搶答鍵,定時顯示器顯示設(shè)定的時間,搶答器處于工作狀態(tài),定時器倒
16、計時。當(dāng)定時時間到,卻沒有選手搶答時,系統(tǒng)報警,并封鎖輸入電路,禁止選手超時后搶答。在規(guī)定時間內(nèi)若有人搶答,搶答時間為10秒鐘,在一分鐘內(nèi)若搶答完,主持人按下復(fù)位鍵,開始新一輪的搶答,若沒有搶答完,會發(fā)出報警聲,主持人按下復(fù)位鍵,在進入新一輪的搶答。</p><p> 3.1.2 單片機電路引腳各部分連接及功能</p><p> AT89C52 (如圖3.1所示)提供以下標(biāo)準(zhǔn)功能:8字
17、節(jié)FLASH閃速存儲器,256字竹內(nèi)部RAM , 32個I/O口線,3個16 位定時/計數(shù)器,一個6向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89c52可降至OHz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電上作模式??臻e方式停止CPU 的工作,但允許RAM,定時/計數(shù)器.串行通信口及中斷系統(tǒng)繼續(xù)工作。</p><p><b> 3.1.3顯示部分</b><
18、/p><p> 采用動態(tài)掃描4 位LED 顯示接口電路(如圖3.2所示),LED 動態(tài)顯示是單片機中應(yīng)用最為廣泛的一種顯示方式,其接口電路是把所有顯示器的8 個筆劃段a~dp 同名端并聯(lián)在一起,而每一個顯示器的公共極COM 是各自獨立地受I/ O線控制,CPU 的字段輸出口送出字形碼時,所有顯示器由于同名端并聯(lián)接收到相同的字形碼,但究竟哪個顯示器亮,則取決于COM 端,這一端是由I/ O 控制的,可以自行決定何時顯
19、示哪一位。在輪流點亮掃描過程中,每位顯示器的點亮?xí)r間是極為短暫的,盡管實際上各位顯示器并非同時點亮,但只要掃描速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。</p><p> 3.1.4矩陣鍵盤工作原理</p><p> 本次因為要用到9個開關(guān)。但是單片機板子上只有4個獨立開關(guān)所以選擇使用矩陣鍵盤。本次用的是掃描法。首先是判斷有無鍵按下。設(shè)其列口初值為0FH,然后輸入行線
20、狀態(tài),測試行線中是否有低電平,如果沒有低電平則測試列線狀態(tài)。若有低電平則閉合鍵找到。且鍵碼值為行健號加上列鍵號。本次設(shè)計可以通過鍵盤操作修改答題時間和犯規(guī)搶答時間。</p><p> 3.1.5指示燈的設(shè)計原理</p><p> 主持人沒有按下開始鍵時復(fù)位燈亮。當(dāng)主持人按下開始鍵后開始燈亮。沒有按下開始鍵時搶答為犯規(guī)。及犯規(guī)選手的燈和報警燈同時亮。</p><p&g
21、t; 3.2軟件設(shè)計及說明</p><p><b> 3.2.1主函數(shù)</b></p><p> 主函數(shù)是對定時器0、1的初始化,開放CPU總中斷、定時器0、1中斷,其中while 循環(huán)是一個死循環(huán),單片機一旦上電就一直會運行下去,不斷掃描鍵盤的狀態(tài),通過scan()函數(shù),兩個中斷函數(shù)來實現(xiàn)對個電路的控制,一實現(xiàn)搶答器的功能。</p><p&
22、gt; 3.2.2定時器0中斷的定時、倒計時</p><p> void timer0()interrupt 1 ,這是定時器0的中斷函數(shù),設(shè)置定時時間為50ms,每運行50ms,就發(fā)生一次中斷,且與軟件計數(shù)器綜合使用,軟件計數(shù)為20,當(dāng)計數(shù)達到20時,正好為一秒,即產(chǎn)生秒脈沖信號。每一秒通過鍵盤掃描函數(shù)來判斷有無按鍵按下,如果有就進入相應(yīng)函數(shù),執(zhí)行相應(yīng)功能。比如主持人按下復(fù)位鍵后,再按下開始鍵后,開始燈會亮
23、,數(shù)碼管處于通電狀態(tài),并且顯示0300,開始進入倒計時階段,期間如有強答者搶答,數(shù)碼管的第一位會顯示搶答者的編號,后三位進入五分鐘倒計時階段,同時,沒當(dāng)有鍵按下,蜂鳴器都會響一聲,蜂鳴器響的時長及頻率由 void speaker_out()該函數(shù)確定。在規(guī)定時間內(nèi)如果沒有人搶答或者犯規(guī)搶答,或者定時時間已到就會發(fā)出報警聲,并且報警燈也會亮。</p><p> 3.2.3定時器1中斷的動態(tài)掃描顯示</p&g
24、t;<p> void timer1()interrupt 3,這是定時器1的中斷函數(shù),定時時間為10ms,即每隔10ms掃描一次鍵盤的狀態(tài),如果掃描時間太長的話,掃描頻率低,數(shù)碼管的顯示會有閃爍,所以為了保證顯示處于“連續(xù)”的狀態(tài),利用人眼的視覺逗留特性,這里我們設(shè)置器定時時間為20ms,滿足要求。數(shù)碼管顯示器的位選信號由單片機的P2口控制,段選信號由單片機的P0口控制。</p><p>
25、3.2.4鍵盤掃描與控制</p><p> void scan() ,這是鍵盤掃描與控制函數(shù),一旦主持人按下復(fù)位鍵(flag0=1),進入預(yù)搶答狀態(tài),三位搶答者的燈就會亮,同時數(shù)碼管通電,如果在主持人沒有按下開始鍵時就有人搶答,視此次搶答無效,報警燈會亮,并且發(fā)出報警聲,顯示器會顯示對應(yīng)搶答者的編號,然后有主持人重新按下復(fù)位鍵,開始新一輪的搶答;如果沒有有犯規(guī),主持人緊接著按下開始鍵,開始燈會亮,然后數(shù)碼管顯示
26、倒計時3分鐘,三分鐘內(nèi)有人搶答,搶答者按下?lián)尨疰I,相應(yīng)指示燈亮,數(shù)碼管也會顯示其編號,顯示五分鐘倒計時 。按規(guī)則搶答的子程序流程圖如下圖3.3所示:</p><p><b> 第四章 調(diào)試與運行</b></p><p><b> 4.1 仿真測試</b></p><p> 4.1.1 開始搶答仿真:</p>
27、;<p> 主持人按開始按鈕后,進入搶答10秒倒計時,仿真結(jié)果如圖</p><p> 4.1.2搶答犯規(guī)仿真:</p><p> 若在主持人還未按開始按鈕時,就搶答則為搶答犯規(guī)。C號選手在主持人未宣布開始時就搶答,從而造成犯規(guī),犯規(guī)仿真如圖。</p><p> 4.1.3搶答成功仿真:</p><p> 主持人按開始按
28、鈕后,10秒內(nèi)搶答則為成功搶答。仿真圖為A號選手成功搶答,搶答后進入60秒倒計時答題時間,搶答成功仿真如圖</p><p> 4.2 仿真結(jié)果分析</p><p> 通過對電路的仿真,可以看出基于AT89C52單片機控制的搶答器在PROTEUS軟件上可以很好的實現(xiàn)搶答閃爍、搶答成功顯示、搶答倒計時等一系列功能。</p><p> 當(dāng)仿真開始運行時,各個模塊處于
29、初始狀態(tài)。此時顯示器并無狀態(tài)顯示,但此時搶答鍵處于開啟狀態(tài),若此時有選手按下?lián)尨疰I,則指示燈會閃爍,并且在數(shù)碼管上顯示犯規(guī)的選手的編號。主持人重新按下開始鍵,此時表示搶答正式開始,并且數(shù)碼管顯示10秒倒計時,提醒選手搶答開始了。選手搶答成功,同時也進入到倒計時60秒答題時間。從仿真的測試結(jié)果來看,此設(shè)計還是能比較好的實現(xiàn)預(yù)期的目標(biāo)。</p><p> 第五章 系統(tǒng)硬件調(diào)試及結(jié)果</p><p
30、> 二號選手成功答題與三號選手違規(guī)答題的硬件示意圖如下:</p><p> 圖5.1二號選手答題成功 圖5.2 三號選手答題違規(guī)</p><p><b> 第六章 心得體會</b></p><p> 本單片機課程設(shè)計是要設(shè)計一個可用于實際操作的搶答器,該電路由我和我的搭檔一起完成 ,該設(shè)計的顯示要求是要顯示
31、剩余答題時間與剩余允許搶答時間及搶答選手號,有狀態(tài)顯示電路及報警電路。要求有主持人復(fù)位按鍵,開始按鍵,三位搶答者各按鍵一個,一個蜂鳴器,用于提示選手或者主持人按下鍵以及犯規(guī)搶答、搶答超時等功能。功能相當(dāng)齊全,在以后還可擴展功能。如自動控制記分器進行記分,并通過串行口與PC 機通信,用PC 機統(tǒng)計選手得分情況,完全實現(xiàn)智能化,減小人為因素造成的影響。</p><p> 通過運用我所學(xué)習(xí)的單片機原理及應(yīng)用、數(shù)字電子
32、技術(shù)等關(guān)于電子技術(shù)的課程中的理論知識來完成此項設(shè)計。在設(shè)計的過程中,通過查找資料又重新的溫習(xí)了一下各個部分的內(nèi)容,并且通過查閱書籍和相關(guān)文獻資料來提高獨立分析能力和解決實際問題的能力;掌握并熟練運用相關(guān)軟件進行操作;熟悉常用電子器件的類型、特征和功能,并本著合理采選用的原則進行選用;進一步熟悉電子儀器的正確使用。此外,本次我們設(shè)計的搶答器,電路簡單,成本較低,操作方便,靈敏可靠,功能也較多。</p><p>
33、在此我要感謝指導(dǎo)老師的悉心教導(dǎo),感謝期間幫助過我的同學(xué),謝謝你們,讓我加強了對單片機知識的理解,能過把所學(xué)的理論知識運用到實際當(dāng)中去,加強了我的動手能力。同時,在整個設(shè)計過程中我懂得了許多東西,不僅加強了我與搭檔一起合作的團結(jié)能力,增進了我們之間的友誼,樹立了對自己工作能力的信心,相信這次設(shè)計對今后的工作有非常重要的影響,而且還大大提高了我的動手能力,使我充分體會到了在創(chuàng)造過程中的探索的艱難和成功的喜悅??傊?,通過這次課程設(shè)計我受益良多
34、。</p><p><b> 參考文獻</b></p><p> 1、《51系列單片機應(yīng)用與實踐教程》 周向紅 編 北航出版社</p><p> 2、《單片機應(yīng)用系統(tǒng)設(shè)計》 何立民 編 北航出版社</p><p> 3、《單片機原理及應(yīng)用》 王迎旭 主編 機械工業(yè)出版社 2012年二月</p>
35、;<p> 4、《51系列單片機設(shè)計實例》 樓然苗 等編 北航出版社</p><p> 5、《51單片機應(yīng)用系統(tǒng)開發(fā)典型實例》戴家 等編 中國電力出版社</p><p> 《單片機實用系統(tǒng)設(shè)計技術(shù)》房小翠 編 國防工業(yè)出版社</p><p><b> 附件</b></p><p><
36、b> 源程序</b></p><p><b> 程序清單:</b></p><p> #include<reg52.h></p><p> unsigned char flag0=0;//用于標(biāo)志數(shù)碼管顯示的內(nèi)容</p><p> unsigned char flag1=0,fla
37、g2=0,flag3=0,flag4=0,flag5=1; //1表示數(shù)碼管顯示的內(nèi)容,2表示選手正常答題,5表示復(fù)位狀態(tài)</p><p> unsigned char key; //鍵盤掃描的鍵值</p><p> unsigned char sec=0; //當(dāng)前數(shù)碼管顯示的秒數(shù)</p><p> unsigned char key1=0,key2
38、=0,key3=0; //每位數(shù)碼管表示的數(shù)值</p><p> sbit LEDA=P1^0;</p><p> sbit LEDB=P1^1;</p><p> sbit LEDC=P1^2;</p><p> sbit LEDF=P1^3;</p><p> sbit LEDK=P1^4;</p
39、><p> unsigned char t1,t2;</p><p> sbit ALARM1=P1^7;</p><p> unsigned char led1[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,</p><p> 0x7D,0x07, 0x7F,0x6F,0X71};//共陰數(shù)碼管數(shù)字意以及F字符
40、數(shù)組</p><p> //unsigned char led2[3]={0x80,0x40,0x20};//數(shù)碼管位選數(shù)組</p><p> unsigned char led2[3]={0xFE,0xFD,0xFB};//數(shù)碼管位選數(shù)組</p><p> void delay(int t)</p><p><b>
41、{</b></p><p> unsigned char i,j;</p><p> for(i=0;i<t;i++)</p><p> for(j=0;j<100;j++);</p><p><b> }</b></p><p> void initiatime
42、0()</p><p><b> {</b></p><p> TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 </p><p> TH0 =(65536-50000)/256;//50毫秒</p><p> TL0 =(655
43、36-50000)%256; //給定初值,這里使用定時器最大值從0開始計數(shù)一直到65535溢出</p><p> EA=1; //總中斷打開 </p><p> ET0=1; //定時器中斷打開</p><p> TR0=1; //定時器開關(guān)打開</p><
44、p><b> }</b></p><p> /*****************功能:鍵盤掃描************/</p><p> key_scan()</p><p><b> {</b></p><p> unsigned char k=0,p3_h=0,p3_l=0;&
45、lt;/p><p><b> P3=0XF0;</b></p><p><b> k=P3;</b></p><p> if(k!=0XF0)</p><p><b> { </b></p><p> delay(20);
46、 //讀入行鍵值</p><p> if(k!=0XF0)</p><p><b> {</b></p><p> p3_h=P3; //行鍵值給高位</p><p> P3=0X0f; //翻轉(zhuǎn)后讀入列的值給P1(讀鍵值時按鍵還未釋放)</p><
47、p> p3_l=P3; //列鍵值給低位</p><p> k=p3_h | p3_l; //高低位相或確定具體按鍵值 </p><p> if(key==5||key==6||key==7) </p><p><b> {</b></p><p> if(k!=0xED)</p&
48、gt;<p><b> k=0;</b></p><p><b> }</b></p><p><b> switch(k)</b></p><p><b> {</b></p><p> case 0: return(0)
49、 ;break;</p><p> case 0xEE: if(flag2==0){flag0 = 1;sec=t1;initiatime0();return(key=1);}break; //開始</p><p> case 0xED: {flag0 = 1;return(key=2);}break;//復(fù)位</p><p> case 0xE
50、B: {flag0 = 1;sec=t1;initiatime0();return(key=3);}break;</p><p> case 0xe7: {flag0 = 1;sec=t2;initiatime0();return(key=4);}break;</p><p> case 0xde: {flag0 = 1;sec=t2;initiatime0();return(
51、key=5);}break; //A選手</p><p> case 0xdd: {flag0 = 1;sec=t2;initiatime0();return(key=6);}break; //B選手</p><p> case 0xdb: {flag0 = 1;sec=t2;initiatime0();return(key=7);}break; //C選手</p>
52、<p> //case 0xd7: {flag0 = 1;sec=t2;initiatime0();return(key=8);}break;</p><p> case 0xbe: {flag0 = 1;return(key=9);}break; //時間加</p><p> case 0xbd: {flag0 = 1;return(key=10);}break;
53、//時間減</p><p> default: return(0) ; break;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
54、 }</b></p><p> /*****************定時器T0**************</p><p> 函數(shù)功能:實現(xiàn)倒計時秒鐘的遞減</p><p> ******************************************/</p><p> void Timer0() interr
55、upt 1</p><p><b> {</b></p><p> static unsigned char count; //計時數(shù)量</p><p> TH0 =(65536-50000)/256;//50毫秒</p><p> TL0 =(65536-50000)%256; //給定初值,這
56、里使用定時器最大值從0開始計數(shù)一直到65535溢出</p><p><b> P3=0xf0;</b></p><p> while(P3!=0xf0)</p><p><b> {</b></p><p> key_scan();//鍵盤掃描</p><p><
57、;b> }</b></p><p> EX0=0; //關(guān)閉外部中斷0</p><p><b> count++;</b></p><p> if(count==20)</p><p><b> {</b></p><p><b>
58、 count=0;</b></p><p><b> sec--;</b></p><p><b> }</b></p><p> if(sec==0) //倒計時完成,參數(shù)初始化</p><p><b> { </b></p><p&
59、gt;<b> ET0=0;</b></p><p><b> sec=0;</b></p><p><b> TR0=0;</b></p><p><b> key=0;</b></p><p><b> }</b><
60、;/p><p><b> }</b></p><p> /****************************************</p><p><b> 函數(shù)名:main</b></p><p> 功能:調(diào)節(jié)整個程序的功能完成顯示功能</p><p> *
61、**************************************/</p><p> void main()</p><p><b> { </b></p><p> P1=0; //關(guān)閉所有燈</p><p><b> t1=10;</b></p><p
62、><b> t2=60;</b></p><p><b> key=0;</b></p><p><b> flag0=0;</b></p><p><b> key1=10;</b></p><p><b> sec=0;<
63、;/b></p><p><b> while(1)</b></p><p><b> {</b></p><p> key_scan(); //鍵盤掃描</p><p> if(sec==0&&flag3==0) //當(dāng)?shù)褂嫊r完畢后flag0=0;是程序進入復(fù)位狀
64、態(tài)</p><p><b> {</b></p><p><b> flag0=0; </b></p><p><b> }</b></p><p> if(0==flag0) //顯示FFF</p><p><b> {</
65、b></p><p><b> P1=0;</b></p><p><b> LEDF=1;</b></p><p> // ALARM1=0;</p><p><b> key=0;</b></p><p><b> fla
66、g1=0;</b></p><p><b> flag2=0;</b></p><p> flag5=1; //做為復(fù)位的標(biāo)志</p><p> key1=key2=key3=10;</p><p> P0=led1[key1];</p><p> P2=led2[0];
67、</p><p><b> delay(5);</b></p><p> P0=led1[key2];</p><p> P2=led2[1];</p><p><b> delay(5);</b></p><p> P0=led1[key3];</p>
68、<p> P2=led2[2];</p><p><b> delay(5);</b></p><p><b> }</b></p><p> if(1==flag0)</p><p><b> { </b></p><p>&l
69、t;b> flag4=0;</b></p><p> switch(key)</p><p><b> {</b></p><p><b> case 1:</b></p><p><b> {</b></p><p><
70、;b> LEDK=1;</b></p><p> LEDA=LEDB=LEDC=LEDF=0;</p><p><b> flag2=1;</b></p><p><b> flag1=1;</b></p><p><b> key1=10;</b>
71、</p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[key1];</p><p> delay(60); </p><p> P2=led2[1];</p>
72、<p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];//須先顯示段碼數(shù)碼管不然會閃</p><p> P0=led1[key3];</p><p> delay(40);</p><p><b> } break
73、;</b></p><p> case 2: //實現(xiàn)復(fù)位</p><p><b> {</b></p><p><b> flag2=0;</b></p><p><b> flag0=0;</b></p><p><b&
74、gt; flag3=0;</b></p><p><b> flag4=0;</b></p><p><b> flag1=0;</b></p><p><b> } break;</b></p><p> case 3: //實現(xiàn)搶答時間的設(shè)置
75、</p><p><b> {</b></p><p> while(flag5) //</p><p><b> {</b></p><p> P1=0;//關(guān)閉所有燈</p><p><b> sec=t1;</b></p>
76、<p><b> key1=10;</b></p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[key1];</p><p> delay(60); </
77、p><p> P2=led2[1];</p><p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];</p><p> P0=led1[key3];</p><p> delay(60);</p>&l
78、t;p> key_scan();</p><p> if(key==9)</p><p><b> {</b></p><p> while(P3!=0xf0);//等待按鍵松開</p><p><b> key=0;</b></p><p><b>
79、; t1++;</b></p><p><b> }</b></p><p> if(key==10&&t1>=5)</p><p><b> {</b></p><p> while(P3!=0xf0);//等待按鍵松開</p><
80、p><b> key=0;</b></p><p><b> t1--;</b></p><p><b> }</b></p><p> if(key==2)</p><p><b> {</b></p><p>&
81、lt;b> flag5=0;</b></p><p><b> }</b></p><p> else key=0;</p><p><b> } </b></p><p><b> } break;</b></p><p>
82、; case 4://實現(xiàn)答題時間的設(shè)置</p><p><b> {</b></p><p> while(flag5)</p><p><b> {</b></p><p><b> P1=0;</b></p><p><b&
83、gt; sec=t2;</b></p><p><b> key1=10;</b></p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[key1];</p&
84、gt;<p> delay(60); </p><p> P2=led2[1];</p><p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];</p><p> P0=led1[key3];</p><
85、;p> delay(40);</p><p> key_scan();</p><p> if(key==9)</p><p><b> {</b></p><p> while(P3!=0xf0);</p><p><b> key=0;</b></
86、p><p><b> t2++;</b></p><p><b> }</b></p><p> if(key==10&&t1>=5)</p><p><b> {</b></p><p> while(P3!=0xf0);&
87、lt;/p><p><b> key=0;</b></p><p><b> t2--;</b></p><p><b> }</b></p><p> if(key==2)</p><p><b> {</b></p&
88、gt;<p><b> flag5=0;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> } break;</b></p><p> case 5: //A選
89、手</p><p><b> { </b></p><p> if(flag1!=1) //違規(guī)搶答</p><p><b> {</b></p><p> P1=0; //關(guān)閉所有燈</p><p><b> ALARM1=1;</b>
90、</p><p><b> LEDA=1;</b></p><p> P0=led1[1];//顯示內(nèi)容</p><p> P2=led2[0]; //位選</p><p> delay(50);</p><p> P0=led1[10]; //顯示內(nèi)容</p>&l
91、t;p> P2=led2[1]; //位選</p><p> delay(50); </p><p> ALARM1=0;//形成閃爍</p><p> P0=led1[10]; //顯示內(nèi)容</p><p> P2=led2[2]; //位選</p><p> delay(50);<
92、;/p><p><b> }</b></p><p> else //A選手搶答成功</p><p><b> {</b></p><p> P1=0; //關(guān)閉所有的燈</p><p> LEDA=1; //點亮A選手的燈</p><
93、p><b> flag2=1;</b></p><p><b> key1=1;</b></p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[ke
94、y1];</p><p> delay(60); </p><p> P2=led2[1];</p><p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];</p><p> P0=led1[key3];</
95、p><p> delay(60);</p><p><b> }</b></p><p><b> } break;</b></p><p> case 6://B選手</p><p><b> {</b></p><p&
96、gt; if(flag1!=1) //違規(guī)搶答</p><p><b> {</b></p><p><b> P1=0;</b></p><p><b> ALARM1=1;</b></p><p><b> LEDB=1;</b><
97、;/p><p> P2=led2[0];</p><p> P0=led1[2]; </p><p> delay(50); </p><p> P2=led2[1];</p><p> P0=led1[10];</p><p> delay(50);</p><p
98、><b> ALARM1=0;</b></p><p> P2=led2[2];</p><p> P0=led1[10];</p><p> delay(50);</p><p><b> }</b></p><p><b> else</
99、b></p><p><b> {</b></p><p><b> P1=0;</b></p><p><b> LEDF=0;</b></p><p><b> LEDB=1;</b></p><p><b&
100、gt; flag2=1;</b></p><p><b> key1=2;</b></p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[key1];</p&
101、gt;<p> delay(60); </p><p> P2=led2[1];</p><p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];</p><p> P0=led1[key3];</p><
102、;p> delay(40);</p><p><b> }</b></p><p><b> } break;</b></p><p> case 7: //C選手</p><p><b> {</b></p><p> i
103、f(flag1!=1) //違規(guī)搶答</p><p><b> {</b></p><p> P1=0; //關(guān)閉所有的燈</p><p> ALARM1=1; //打開報警燈</p><p> LEDC=1; //打開C選手燈</p><p> P2=led2[0];&
104、lt;/p><p> P0=led1[3]; </p><p> delay(50); </p><p> P2=led2[1];</p><p> P0=led1[10];</p><p> delay(50); </p><p><b> ALARM1=0;</b&
105、gt;</p><p> P2=led2[2];</p><p> P0=led1[10];</p><p> delay(50);</p><p><b> }</b></p><p> else//正常答題</p><p><b> {<
106、;/b></p><p><b> P1=0;</b></p><p> LEDF=0; //關(guān)閉所有的燈</p><p> LEDC=1; //打開C選手的燈</p><p> flag2=1; </p><p><b> key1=3;</b&g
107、t;</p><p> key2=sec/10;</p><p> key3=sec%10;</p><p> P2=led2[0];</p><p> P0=led1[key1];</p><p> delay(60); </p><p> P2=led2[1];</p>
108、;<p> P0=led1[key2];</p><p> delay(60); </p><p> P2=led2[2];</p><p> P0=led1[key3];</p><p> delay(40);</p><p><b> }</b></p>
109、;<p><b> } break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b><
110、/p><p> PROTEUS系統(tǒng)電路原理圖</p><p> 電氣與信息工程系課程設(shè)計評分表</p><p> 指導(dǎo)教師簽名:________________</p><p> 日 期:________________ </p><p> 注:①表中標(biāo)*號項目是硬件制作或軟件編程類課題必填內(nèi)容;
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機搶答器課程設(shè)計
- 單片機課程設(shè)計-- 基于單片機的搶答器設(shè)計
- 單片機搶答器課程設(shè)計
- 基于單片機的搶答器課程設(shè)計
- 單片機搶答器課程設(shè)計
- 單片機課程設(shè)計---搶答器
- 搶答器 單片機課程設(shè)計
- 基于單片機的搶答器課程設(shè)計
- 單片機課程設(shè)計搶答器(16路搶答器)
- 智力搶答器單片機課程設(shè)計
- 基于單片機的多人搶答器課程設(shè)計
- 單片機課程設(shè)計多路搶答器
- 智力搶答器單片機課程設(shè)計
- 基于51單片機搶答器的課程設(shè)計
- 單片機課程設(shè)計--智力搶答器
- 單片機搶答器課程設(shè)計3
- 搶答器單片機課程設(shè)計報告
- 單片機課程設(shè)計--搶答器系統(tǒng)設(shè)計
- 四路搶答器單片機課程設(shè)計
- 四路搶答器單片機課程設(shè)計
評論
0/150
提交評論