

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 第1章 概述2</b></p><p> 1.1 課題的要求2</p><p> 1.2 課題的目的及意義2</p><p> 第2章 系統(tǒng)總體方案的說明3</p><p> 2.1單片
2、機芯片的選取3</p><p> 2.2硬件設計框圖3</p><p> 2.3硬件電路工作原理3</p><p> 第3章 硬件電路設計5</p><p> 3.1 I/O接口分配表5</p><p> 3.2 時鐘電路5</p><p> 3.3 復位電路5&l
3、t;/p><p> 3.4 指示燈顯示電路6</p><p><b> 3.5按鍵電路7</b></p><p> 3.7 數(shù)碼管顯示電路7</p><p> 3.8蜂鳴報警電路8</p><p> 第4章 軟件設計9</p><p> 4.1主程序設計
4、9</p><p> 4.2 子程序設計9</p><p> 第5章 系統(tǒng)仿真與實物調試11</p><p> 5.1仿真測試11</p><p> 5.2 實物調試15</p><p> 第6章 課題總結16</p><p><b> 參考文獻17</
5、b></p><p> 附錄A 系統(tǒng)原理圖18</p><p> 附錄B 程序19</p><p><b> 第1章 概述</b></p><p><b> 1.1 課題的要求</b></p><p> 本課題要求設計一個以單片機為核心的電子搶答器,
6、電子搶答器具有三個人的搶答控制盒答題時的倒計時顯示功能。具體要求如下:一位主持人與3位搶答者,復位后,甲乙丙的綠、紅燈全亮,開始鍵、復位鍵的指示燈全暗;主持人按復位鍵則僅復位指示燈亮,其他都暗,準備開始;主持人按開始鍵,開始燈亮,允許甲乙丙搶答,此時優(yōu)先者則相應成功指示燈亮,如允許前搶就相應犯規(guī)燈亮;答題開始進行倒計時,到規(guī)定時間不允許答題,并返回復位狀態(tài)??梢酝ㄟ^鍵盤操作修改答題限制時間和槍答限制時間。</p><
7、p> 1.2 課題的目的及意義</p><p> 在許多競賽活動匯總,為了準確,公正,直觀地判斷出第一搶答者,通常設置一臺搶答器,通過數(shù)碼顯示管,燈管,及音響等多種手段指示出第一搶答者。同時可以設置計分,犯規(guī)等多種功能,該系統(tǒng)是針對上述要求設計出的供3名選手參賽試用的數(shù)字式競賽搶答器,而且可以通過本次的課程設計我們可以學到關于單片機在實際生活中的設計應用,也可以深入地學習到單片機的編程。</p&g
8、t;<p> 通過該課程的學習使我們對計算機控制系統(tǒng)有一個全面的了解、掌握常規(guī)控制算法的使用方法、掌握簡單微型計算機應用系統(tǒng)軟硬的設計方法,進一步鍛煉同學們在微型計算機應用方面的實際工作能力。</p><p> 第2章 系統(tǒng)總體方案的說明</p><p> 2.1單片機芯片的選取</p><p> 采用STC89C52RC單片機作為硬件核心,該
9、單片機指令代碼完全兼容傳統(tǒng)的8051單片機。STC89C52RC的工作電壓為5.5-3.4V,工作頻率范圍0-80MHz,程序存儲器flash容量為8KB,隨機存儲器RAM空間為512字節(jié)。</p><p><b> 2.2硬件設計框圖</b></p><p> 根據(jù)設計要求,確定系統(tǒng)的設計方案,圖2.2所示為該系統(tǒng)方案的硬件電路設計框圖,硬件電路由6個部分組成,
10、即晶振控制,按鍵電路,電源電路,數(shù)碼管顯示,指示燈顯示,蜂鳴器報警電路。</p><p> 圖2.2 硬件電路設計框圖</p><p> 2.3硬件電路工作原理</p><p> 系統(tǒng)由單片機最小系統(tǒng)、顯示電路、按鍵和報警電路等組成本電路是由STC89C52RC單片機為控制核心,具有與8051系列單片機完全兼容,程序加密等功能,8KB字節(jié)可編程閃存,工作電壓
11、范圍為2.7~6V,全靜態(tài)工作頻率為0~24MHZ。用查詢式鍵盤進行搶答。采用動態(tài)顯示組號。主持人按下開始搶答鍵才可以搶答。有人搶答則搶答違規(guī),報警并顯示組號,主持人按下開始搶答開關重新?lián)尨?。主持人按下開始搶答按紐,對應的選手號及倒計時在數(shù)碼管顯示,相應選手號的燈亮。主持人按下復位開關為下一題的搶答做準備。單片機最小系統(tǒng)、搶答按鍵模塊、顯示模塊、顯示驅動模塊、搶答開關模塊、LED。工作時,用按鍵通過開關電路輸入各路的搶答信號,經(jīng)單片機的
12、處理, 輸出控制信號,單片機控制的智能搶答器。</p><p> 第3章 硬件電路設計</p><p> 3.1 I/O接口分配表</p><p><b> 3.2 時鐘電路</b></p><p> 單片機各功能部件的運行是以時鐘控制信號為基準的。所以,時鐘頻率直接影響單片機的速度,時鐘電路的質量也直接影響
13、單片機的穩(wěn)定性,常用的時鐘電路設計有內部時鐘方式和外部時鐘方式,本設計采用內部時鐘方式。警惕震蕩頻率是采用12MHZ的石英晶體。</p><p><b> 圖3.2時鐘電路</b></p><p><b> 3.3 復位電路</b></p><p> 單片機的第9腳RST為硬件復位端,只要將該端持續(xù)4個機器周期的高電
14、平即可實現(xiàn)復位,復位后單片機的各狀態(tài)都恢復到初始化狀態(tài),該系統(tǒng)是采用的按鍵上電復位電路,其電路圖如圖3.4所示:</p><p> 圖3.3按鍵上電復位電路</p><p> 3.4 指示燈顯示電路</p><p> 一開始3位選手的燈全亮,主使人按下開始鍵,開始燈亮,按下復位鍵復位燈亮,搶答選手按下?lián)尨疰I,對應的3位搶答燈亮。P1.3,P1.4,P1.5做甲
15、乙丙三位選手的搶答燈,P1.6,P1.7做復位燈和開始燈。其電路圖如圖3.5所示。</p><p> 圖3.4 指示燈顯示電路</p><p><b> 3.5按鍵電路</b></p><p> 主要用到89C52RC的P3.0和P3.1做開始和復位按鍵,用P2.5,P2.6,P2.7做3位選手的搶答按鍵,P3.2,P3.3做設置搶答時間
16、以及答題時間的按鍵,P3.4和P3.5做加減時間的按鍵。其電路如圖3.6所示。</p><p><b> 圖3.6按鍵電路</b></p><p> 3.7 數(shù)碼管顯示電路</p><p> LED顯示器的驅動是一個非常重要的問題,顯示電路由LED顯示器,段驅動電路和位驅動電路組成。由于單片機的并行接口不能直接驅動LED顯示器,所以要加驅
17、動,使之產(chǎn)生足夠大的電流才能正常工作。本設計方案選擇的是動態(tài)控制方式。由于一位數(shù)據(jù)的顯示器的顯示是由段碼和位碼信號共同配合完成的。圖是本設計的顯示數(shù)碼管的驅動電路。</p><p> 圖3.7 數(shù)碼管顯示電路</p><p><b> 3.8蜂鳴報警電路</b></p><p> 當選手犯規(guī)的時候,系統(tǒng)要求產(chǎn)生報警信號,可以選擇一個蜂鳴
18、器來實現(xiàn)這一功能。由P3.7引出,接蜂鳴器,當有選手犯規(guī)時,蜂鳴器會自動報警。圖3.8為蜂鳴器報警電路.</p><p> 圖3.8蜂鳴器報警電路</p><p><b> 第4章 軟件設計</b></p><p><b> 4.1主程序設計</b></p><p> 在搶答開始之前設置好搶
19、答時間,以及答題時間,設置好時間之后,初始化。在主持人按下開始搶答鍵之前判斷是否有人犯規(guī),沒人犯規(guī)按下開始鍵,開始搶答,如果有人犯規(guī),報警,并提醒犯規(guī)選手,然后復位繼續(xù)操作。開始搶答,搶答倒計時,如果有人搶答,查詢哪位選手最先搶答成功,然后該選手回答問題,答題倒計時,回答完畢,計時器復位;如果搶答時間到,沒人搶答,計時器復位,繼續(xù)下一道題搶答。主程序流程圖如圖4.1所示。</p><p> 圖4.1 主程序流程
20、圖</p><p><b> 4.2 子程序設計</b></p><p> 4.2.1 時間程序設置</p><p> 根據(jù)規(guī)定,設置搶答時間和答題時間,流程圖如圖4.2.1所示。</p><p> 4.2.1 設置時間流程圖</p><p> 4.2.2 犯規(guī)程序設計</p>
21、;<p> 在主持人未宣布開始搶答前,有選手按下?lián)尨疰I,視為犯規(guī),犯規(guī)后選手的搶答燈會亮,并在數(shù)碼管顯示該選手的編號,蜂鳴器會開始報警。 流程圖如圖4.2.2所示。</p><p> 4.2.2 犯規(guī)程序流程圖</p><p> 第5章 系統(tǒng)仿真與實物調試</p><p><b> 5.1仿真測試</b></p>
22、;<p> 5.1.1初始化仿真</p><p> 把keil編譯產(chǎn)生的HEX文件導入Proteus里面的單片機中,初始化時,3位選手指示燈亮,復位燈,開始燈滅,數(shù)碼管顯示FFF。仿真圖如圖5.1.1所示。</p><p> 圖5.1.1 復位電路</p><p> 5.1.2 犯規(guī)仿真</p><p> 在按下復位按
23、鈕以后主持人還沒有按開始按鈕,第三位選手搶答,選手犯規(guī),他的指示燈亮,數(shù)碼管顯示他的序號,蜂鳴器報警。仿真圖如圖5.1.2所示。</p><p> 5.1.2 丙選手犯規(guī)仿真圖</p><p><b> 5.1.3開始搶答</b></p><p> 主持人按下開始鍵,開始燈亮,數(shù)碼管開始倒計時,仿真圖如圖5.1.3所示。</p>
24、;<p> 5.1.3 開始搶答仿真圖</p><p> 5.1.4 搶答成功,答題</p><p> 開始搶答以后,乙選手搶答成功,答題倒計時,數(shù)碼管顯示選手編號及倒計時,仿真圖如5.1.4所示。</p><p> 5.1.4 乙選手搶答成功開始答題仿真圖</p><p> 5.1.5設置搶答時間與答題時間</
25、p><p> 設置搶答時間,本次設計仿真是將搶答時間增加了至16秒,仿真圖如5.1.5.1所示。</p><p> 設置答題時間,本次設計仿真是將答題時間減少了至24秒,仿真圖如5.1.5.2所示。</p><p> 5.1.5.1 搶答時間增加了至16秒仿真圖</p><p> 5.1.5.2 答題時間減少到26秒仿真圖</p&g
26、t;<p><b> 5.2 實物調試</b></p><p> 運行keil軟件新建一個工程把程序輸進去,然后進行編譯,再點擊工具條上的Debug按鈕,程序被下載到單片機中,仿真如下圖所示。</p><p> 圖5.2.1 初始化</p><p> 圖5.2.2 乙選手倒計時答題</p><p>
27、 5.2.3 乙選手犯規(guī)</p><p><b> 第6章 課題總結</b></p><p> 兩周的課程設計轉眼也要結束了,通過這次課程設計期間使我對單片機課上所學到的知識有了更深的認識,并且把我們平時在電子這一方面所學到的知識有了一個綜合的運用。非常感謝王老師的悉心督促和耐心指導。</p><p> 本次電子課程設計實習將理論與實
28、踐有機地結合,既考查了同學對理論知識的掌握程度,由反映了實際動手能力,更主要的是考查了同學對知識的綜合運用以及創(chuàng)新設計思維能力,為今后的發(fā)展提供了一次良好的學習環(huán)境。 在完成單片機課程設計后,我們發(fā)現(xiàn)我們還有許多不足,所學到的知識還遠遠不夠,以至于還有一些功能不能被動完成。思維局限性,編程語言可以用多種方式進行實現(xiàn),要充分利用書本知識進行發(fā)散性思維,創(chuàng)新的理念有待提高。不懂得將所學知識充分利用,要形成知識結構體系
29、,這樣不會將知識給孤立,從而不能得到太多的擴展。但通過學習這一次實踐,增強了我們的動手能力,提高和鞏固了單片機方面的知識,特別是軟件方面。</p><p> 兩周的課程設計轉眼也要結束了,通過這次課程設計期間使我對單片機課上所學到的知識有了更深的認識,并且把我們平時在電子這一方面所學到的知識有了一個綜合的運用。非常感謝王老師的悉心督促和耐心指導以及給予我?guī)椭耐瑢W們。</p><p>&
30、lt;b> 參考文獻</b></p><p> [1] 王迎旭 單片機原理與應用 [M] 北京:機械工業(yè)出版社,2012[2] 三恒星科技 MCS-51 單片機原理與應用實例 [M] 北京:電子工業(yè)出版社,2008[3] 王守中 51單片機開發(fā)入門與典型實例 [M] 北京:人民郵電出版社,2007[4] 李全利 單片機原理及應用技術 [M] 北京:高等教育出版社,2004[5] 林毓
31、梁 單片機原理及應用 [M] 北京:機械工業(yè)出版社,2005</p><p> 附錄A 系統(tǒng)原理圖</p><p><b> 附錄B 程序</b></p><p> #include<reg51.h></p><p> typedef unsigned char uchar;</p>
32、<p> sbit FW=P3^1; //復位按鍵</p><p> sbit le1=P2^0; // 數(shù)碼管位選</p><p> sbit le2=P2^1; //數(shù)碼管位選</p><p> sbit le3=P2^2; //
33、數(shù)碼管位選</p><p> sbit led1=P1^3; //甲選手指示燈</p><p> sbit led2=P1^4; //乙選手指示燈</p><p> sbit led3=P1^5; //丙選手指示燈</p><p> sbit kaishi=P1
34、^6; //開始指示燈</p><p> sbit fuwei=P1^7; //復位指示燈</p><p> int daoshu=10,time=30; //初始化搶答和答題時間</p><p> void chushi(); //定義初始化程序</p
35、><p> void display(uchar,ucahr,uchar); //定義動態(tài)掃描程序</p><p> void delay(int); //定義延時程序</p><p> void fangui(); //定義犯規(guī)程序</p><p>
36、 void jishi(); //定義計時搶答程序</p><p> void shezhi1(); //定義設置搶答時間程序</p><p> void shezhi2(); //定義設置答題時間程序</p><p> void display1(uchar)
37、; //定義答題程序</p><p> uchar tab[12]={0x0c0,0x0F9,0x0A4,0x0B0,0x099,0x092,0x082,0x0F8,0x080,0x090,0x0FF,0x8E};</p><p> void main()</p><p><b> {</b></p>
38、<p><b> uchar c;</b></p><p> chushi(); //調用初始化程序</p><p><b> while(1)</b></p><p><b> {</b></p><p> d
39、isplay(11,11,11); //動態(tài)掃描</p><p> fangui();調用犯規(guī)程序,判斷是否犯規(guī)</p><p><b> c=P3;</b></p><p> if(c==0x0ff)</p><p><b> continue;</b><
40、/p><p><b> else</b></p><p><b> {</b></p><p><b> delay(2);</b></p><p><b> c=P3;</b></p><p> if(c==0x0ff)&l
41、t;/p><p><b> continue;</b></p><p><b> else</b></p><p><b> {</b></p><p><b> switch(c)</b></p><p><b>
42、 {</b></p><p> case 0x0fe: jishi();break; //開始搶答</p><p> case 0x0fd: P1=0xbf;break; //復位</p><p> case 0x0fb: shezhi1();break; //搶答時間設置</p>&
43、lt;p> case 0x0f7: shezhi2();break; //答題時間設置</p><p> default:continue;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b
44、></p><p><b> }</b></p><p><b> }</b></p><p> void chushi()</p><p><b> {</b></p><p><b> P0=0x0FF;</b>
45、</p><p><b> P1=0x0FF;</b></p><p><b> P2=0x0FF;</b></p><p><b> P3=0x0FF;</b></p><p> led1=0; //選手燈亮</p><p>
46、;<b> led2=0;</b></p><p><b> led3=0;</b></p><p><b> }</b></p><p> void display(uchar a1,uchar a2,uchar a3)</p><p><b> {<
47、;/b></p><p> //P2=0xFB; //第3位數(shù)碼管動態(tài)掃描顯示</p><p><b> le3=0;</b></p><p> P0=tab[a1];</p><p><b> delay(0);</b></p><p&
48、gt;<b> le3=1;</b></p><p> //P2=0xFD; //第2位數(shù)碼管動態(tài)掃描顯示</p><p><b> le2=0;</b></p><p> P0=tab[a2];</p><p><b> delay(0);</b>
49、</p><p><b> le2=1;</b></p><p> //P2=0xFE; //第1位數(shù)碼管動態(tài)掃描顯示</p><p><b> le1=0;</b></p><p> P0=tab[a3];</p><p><b> d
50、elay(0);</b></p><p><b> le1=1;</b></p><p><b> }</b></p><p> void delay(int a)</p><p><b> {</b></p><p> int i
51、,j,k;</p><p> for(k=a;k>=0;k--)</p><p> for(i=0;i<=125;i++)</p><p> for(j=0;j<=5;j++)</p><p><b> {}</b></p><p><b> } </b
52、></p><p> void fangui()</p><p><b> {</b></p><p><b> uchar b;</b></p><p><b> b=P2;</b></p><p> b=b&0xf0;
53、 </p><p> if(b==0xf0) //看是否有人搶答</p><p><b> return;</b></p><p><b> else</b></p><p><b> {</b></p><
54、p><b> delay(2);</b></p><p><b> b=P2;</b></p><p><b> b=b&0xf0;</b></p><p> if(b==0x0f0)</p><p><b> return;</b>
55、;</p><p><b> else</b></p><p><b> {</b></p><p><b> P1=0xff;</b></p><p><b> switch(b)</b></p><p><b>
56、; {</b></p><p> case 0xd0:do{ display(1,11,11);led1=0;}while(FW==1);led1=1;break; //第一位選手犯規(guī)</p><p> case 0xb0:do{ display(2,11,11);led2=0;}while(FW==1);led2=1;break; //第2位選手犯規(guī)<
57、/p><p> case 0x70:do{ display(3,11,11);led3=0;}while(FW==1);led3=1;break; // 第3位選手犯規(guī)</p><p> default: ; </p><p><b> }</b></p><p><b> }&l
58、t;/b></p><p><b> }</b></p><p><b> return;</b></p><p><b> }</b></p><p> void jishi()</p><p><b> {</b>
59、;</p><p> int i,j,k,a,b;</p><p> uchar key;</p><p> kaishi=0; //開始搶答,開始倒計時</p><p> for(i=daoshu;i>=0;i--)</p><p><b> {</b>&
60、lt;/p><p><b> P1=0x7f;</b></p><p><b> a=i/10;</b></p><p><b> b=i%10;</b></p><p> for(k=15;k>=0;k--)</p><p><b>
61、; {</b></p><p><b> if(FW==0)</b></p><p><b> {</b></p><p><b> delay(2);</b></p><p><b> if(FW==0)</b></p>
62、<p> {P1=0xbf; return;}</p><p><b> }</b></p><p> display(0,b,a);</p><p><b> key=P2;</b></p><p> key=key&0xf0;</p><p&g
63、t; if(key==0x0f0)</p><p><b> continue;</b></p><p><b> else</b></p><p><b> {</b></p><p><b> delay(2);</b></p>
64、<p><b> key=P2;</b></p><p> key=key&0xf0;</p><p> if(key==0x0f0)</p><p><b> continue;</b></p><p><b> else</b></p&g
65、t;<p> switch(key)</p><p><b> {</b></p><p> case 0xd0:P1=0xf7;display1(1);return;break; //第1位選手搶答成功</p><p> case 0xb0:P1=0xef;display1(2);return;break;
66、 //第2位選手搶答成功</p><p> case 0x70:P1=0xdf;display1(3);return;break; //第3位選手搶答成功</p><p> default:; </p><p><b> }</b></p><p><b> }</b><
67、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void display1(uchar gg)</p><p><b> {</b></
68、p><p> int i,j,k,a,b;</p><p> for(i=time;i>=0;i--)</p><p><b> {</b></p><p> a=i/10; //取十位</p><p> b=i%10; //取個位</p>
69、<p> for(k=15;k>=0;k--)</p><p><b> {</b></p><p> display(gg,b,a); //數(shù)碼管顯示</p><p><b> if(FW==0)</b></p><p> {P1=0xbf;return;}
70、</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void shezhi1()</p><p><b> { </b></p>
71、;<p> uchar key;</p><p><b> int a,b;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> a=daoshu/10;</p><p&
72、gt; b=daoshu%10;</p><p> display(0,b,a);</p><p><b> key=P3;</b></p><p> if(key==0x0ff)</p><p><b> continue;</b></p><p><b&g
73、t; else</b></p><p><b> {</b></p><p> if(key==0x0ff)</p><p><b> continue;</b></p><p><b> else</b></p><p> sw
74、itch(key)</p><p><b> {</b></p><p> case 0x0ef:if(daoshu<30)daoshu++;while(P3==0x0ef){};break; //搶答時間增加,最大增加到30秒</p><p> case 0x0df:if(daoshu>5)daosh
75、u--;while(P3==0x0df){};break; //搶答時間減少,最少減少到5秒</p><p> case 0x0fd:P1=0xbf;return;break;</p><p> default:continue;</p><p><b> }</b></p><p><
76、b> }</b></p><p><b> }</b></p><p><b> return;</b></p><p><b> }</b></p><p> void shezhi2()</p><p><b>
77、 { </b></p><p> uchar key;</p><p><b> int a,b;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> a=time
78、/10;</p><p> b=time%10;</p><p> display(0,b,a);</p><p><b> key=P3;</b></p><p> if(key==0x0ff)</p><p><b> continue;</b></p&g
79、t;<p><b> else</b></p><p><b> {</b></p><p> if(key==0x0ff)</p><p><b> continue;</b></p><p><b> else</b></
80、p><p> switch(key)</p><p><b> {</b></p><p> case 0x0ef:if(time<60)time++;while(P3==0x0ef){};break; //答題時間增加,最多增加到60秒</p><p> case 0x0df:if(time>20)ti
81、me--;while(P3==0x0df){};break; //答題時間減少,最少減少到20秒</p><p> case 0x0fd:P1=0xbf;return;break;</p><p> default:continue;</p><p><b> }</b></p><p><b> }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論