版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 1 引言</b></p><p> 單片機作為微型計算機發(fā)展的一個重要分支,以其高可靠、高性能價格比、低電壓、低功耗等優(yōu)勢,贏得了廣泛的應用。單片機是一門實用性很強的應用學科,在目前和今后相當長的一段時間內仍有著廣泛的應用前景。作為自動化專業(yè)的學生,更應該熟練掌握各種電路編輯軟件,作為專業(yè)必需的技能更要及時地對這一類軟件的更新版本進行學習,其日趨強大的功能是對
2、我們專業(yè)技能的補充。之前由于培養(yǎng)過自己的動手能力,在本次課程設計中,本人使用單片機作為這次作業(yè)的核心。課程設計通過使用90C51單片機和共陽極二位數碼管,綜合應用基礎電子電路和單片機的知識,來實現該電路的制作。</p><p> 通過實際程序設計和調試,逐步掌握塊化程序設計方法和調試技術,通過課程設計,掌握一單片機核心的電路設計的基本方法和技術,了解有關電路參數的計算方法,通過完成一個包括電路設計和程序設計開發(fā)
3、的完整過程,了解開發(fā)單片機應用系統(tǒng)的全過程,為今后從事相應工作打下基礎。</p><p> 2 設計方案及原理 </p><p><b> 2.1 題目要求</b></p><p> 8支連續(xù)排列的發(fā)光二極管,發(fā)光二極管的依次點亮代表乒乓球的運動。用兩個按鍵模擬左右兩個球拍,鍵按下代表球拍擊球?!白笈摹卑聪驴墒拱l(fā)光二極管從左向右依次點亮,
4、如同乒乓球從左向右飛來;反之,“右拍”按下則可使發(fā)光二極管從右向左依次點亮,代表乒乓球從右向左運動。</p><p> 本游戲供兩人玩耍,以一方按鍵開始,這時“乒乓球”就向對方運動,接球方應在“乒乓球”到達終點時刻擊球。如擊球時機合適,則把球擊回,算得分;否則就算失誤,由對方重新發(fā)球。在游戲過程中,以LED顯示器顯示雙方比分。</p><p><b> 2.2 題目分析<
5、;/b></p><p> (1) “乒乓球”移動速度是固定的,假定每秒鐘移動1位LED。</p><p> (2) 在“乒乓球”移位一次的過程中,進行50次測試,查詢接球方是否有擊球動作。</p><p> (3) 接球方的擊球動作應發(fā)生在“乒乓球”到達最后一位LED1秒鐘時間之內。如接球方在此1秒鐘時間之內按鍵,則接球成功,接球方得分?!捌古仪颉?/p>
6、轉為相反方向運動。此后,原接球方變?yōu)榘l(fā)球方,原發(fā)球方變?yōu)榻忧蚍?。游戲繼續(xù)進行。</p><p> (4) 如接球方提前或滯后擊球,則接球方失誤,雙方都不得分。這時“乒乓球”熄滅,LED顯示器顯示出雙方比分,然后仍由原發(fā)球方發(fā)球。</p><p><b> 2.3 解決方案</b></p><p> 本設計采用90C51單片機系統(tǒng),任何軟
7、件的設計首先都應該對模型進行抽象畫,使用實用化語言對對任務進行描述,對于具體到本實驗的設計,最需要描述和處理的事件是擊球動作,比賽雙方的任何一方按下鍵都是一個擊球動作,需要判斷是發(fā)球還是擊球,是提前擊球還是滯后擊球還是準確擊球,這是本設計把乒乓球游戲抽象為系統(tǒng)模型的關鍵點。</p><p> 是否準確擊球是具體體現為:若有鍵按下時則先判斷A還是B擊球,再根據球所在位置就可以判斷擊球準確還是失球。比如現在A按鍵擊
8、球,而同時LED當前顯示值為01H,則判斷A正確擊球,反之若LED點亮處于其他任何狀態(tài)都判A失球B得分,同樣B的有效擊球時間應為LED顯示值為80H額時間段內,其他時間段B有擊球動作都判B時分。</p><p> 球移動的動作抽象到系統(tǒng)模型即為LED的逐個點亮,而具體設計程序時,需要設計一個LED顯示的子程序,再用不同的亮燈數值通過調用LED顯示子程序刷新LED顯示即可完成。另外定時中斷在本實驗中也有相當大的
9、比重,LED逐個點亮的時間間隔,擊球是否在規(guī)定時間內完成,這些都需要使用定時器來產生所需要的時間標度。</p><p><b> 3 硬件設計</b></p><p> 3.1 I/O地址分配</p><p> 由90C51組成的單片機系統(tǒng)通常情況下,P0口分時復用作為地址、數據總線,P2口提供A15-A8即高8位地址,P3口用作第二功能
10、,只有P1口通常用作I/O口。8051的P1口作為基本I/O口使用,P1口是8位準雙向口,它的每一位都可獨立地定義為輸入或輸出,因此,既可作為8位的并行I/O口,也可作為8為的輸入輸出端。</p><p> 3.2 系統(tǒng)硬件模擬圖</p><p> 本設計采用硬件與軟件相結合,對所求題目進行仿真,proteus仿真圖如圖3.1所示,硬件實物圖如圖3.2所示。</p>&l
11、t;p> 圖3.1 proteus硬件電路圖</p><p><b> 4 軟件設計</b></p><p> 主程序流程圖如圖4.1所示。</p><p> 具體程序見附錄。5 總結</p><p> 本課程設計經過了三個階段的程序設計,第一階段是了解打乒乓球的工作方式及其原理,確定設計的方向與方法以及
12、確定設計過程中需要的軟件及工具。第二階段是熟悉用keil軟件編寫C語言的方法,這一階段側重于對C語言的基本掌握,第三階段是學校單片機AT89C51芯片的工作原理,并設計原理圖,在Proteus里畫好原理圖然后加載程序后進行仿真驗證??傮w上,本設計已經達到了預期目標,在軟件上做了相關的功能仿真和時序仿真,最終實現了正常打乒乓球。</p><p> 在本課程設計中,最初遇到了很多的棘手問題,比如如何實現發(fā)球的控制。
13、通過查閱大量資料和虛心請教他人慢慢解決掉了設計過程中遇到的這一系列的問題。</p><p> 本設計也存在一些不足,比如記分板顯示并不清晰,只能單方發(fā)球。因此,這需要改進。</p><p><b> 參考文獻</b></p><p> [1] 李華,王思明.單片機應用及原理[M].蘭州大學出版社,2001:30-40.</p>
14、<p> [2] 李廣弟.單片機基礎[M].北京航空航天大學出版社,1994:45-48.</p><p> [3] 房小翠.單片機實用系統(tǒng)設計技術[M].國防工業(yè)出版社,1999:33-45.</p><p> [4] 張金敏,董海棠.單片機原理與應用系統(tǒng)設計[M].西南交通大學出版社,2010:35-56.</p><p><b>
15、 附錄</b></p><p> #include<reg52.h></p><p> /*******************************************宏定義***************************************************/</p><p> #define uint un
16、signed int</p><p> #define uchar unsigned char</p><p> sbit LSB=P1^0;</p><p> sbit RSB=P1^1;</p><p> uchar d_s=2;</p><p> bit HLSB=0;</p><
17、p> bit HRSB=0;</p><p> uchar code wei_code[]={0x0e,0x0d,0x0b,0x07};</p><p> uchar code duan_code[]={~0x3F, ~0x06, ~0x5B, ~0x4F, ~0x66, ~0x6D, ~0x7D, ~0x07, ~0x7F, ~0x6F};</p><p&
18、gt; uchar code dis_led[] = {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};</p><p> uchar i=0,num=0;</p><p> uchar Li=0,Ri=0;</p><p> uchar count=0;</p><p> uc
19、har LN=0,RN=0;</p><p> uchar dis[]={0x3f,0x3f,0x3f,0x3f};</p><p> void TimeInit(void)</p><p><b> {</b></p><p> TMOD=0X11;</p><p> TH0=(655
20、36-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> TH1=(65536-6000)/256;</p><p> TL1=(65536-6000)%256;</p><p><b> ET0=1;</b></p><p><
21、b> TR0=1;</b></p><p><b> ET1=1;</b></p><p><b> TR1=1;</b></p><p><b> EA=1;</b></p><p><b> }</b></p>
22、<p> void ReadLK(void)</p><p><b> {</b></p><p> if(HLSB==1&&LSB==0)</p><p><b> {</b></p><p><b> if(i==1)</b></
23、p><p><b> d_s=1;</b></p><p><b> if(i==9)</b></p><p><b> {</b></p><p><b> i=1;</b></p><p><b> d_s=1;
24、</b></p><p><b> }</b></p><p><b> }</b></p><p><b> HLSB=LSB;</b></p><p><b> }</b></p><p> void Re
25、adRK(void)</p><p><b> {</b></p><p> if(HRSB==1&&RSB==0)</p><p><b> {</b></p><p><b> if(i==8)</b></p><p><
26、;b> d_s=0;</b></p><p><b> if(i==0)</b></p><p><b> {</b></p><p><b> i=8;</b></p><p><b> d_s=0;</b></p>
27、;<p><b> }</b></p><p><b> }</b></p><p><b> HRSB=RSB;</b></p><p><b> }</b></p><p> void discode(void)</p&g
28、t;<p><b> {</b></p><p> dis[0]=LN/10;</p><p> dis[1]=LN%10;</p><p> dis[2]=RN/10;</p><p> dis[3]=RN%10;</p><p><b> }</b&g
29、t;</p><p><b> main()</b></p><p><b> {</b></p><p> TimeInit();</p><p><b> while(1)</b></p><p><b> {</b>
30、</p><p><b> ReadRK();</b></p><p><b> ReadLK();</b></p><p> P0=dis_led[i];</p><p> discode();</p><p><b> }</b></
31、p><p><b> }</b></p><p> void timer0() interrupt 1</p><p><b> {</b></p><p> TH0 = (65536 - 50000) / 256;</p><p> TL0 = (65536 - 50
32、000) % 256; //給T1裝初值</p><p><b> num++;</b></p><p> if(num==10)</p><p><b> {</b></p><p><b> Li=i;</b></p><p><
33、;b> Ri=i;</b></p><p> if(d_s==1)</p><p><b> i++;</b></p><p> else if(d_s==0)</p><p><b> i--;</b></p><p> else if(d_s
34、==2)</p><p><b> i=i;</b></p><p><b> num=0;</b></p><p> if(Li==8&&i==9)</p><p><b> {</b></p><p><b> d
35、_s=2;</b></p><p><b> LN++;</b></p><p><b> }</b></p><p> if(Li==1&&i==0)</p><p><b> {</b></p><p><b
36、> d_s=2;</b></p><p><b> RN++;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(i>9)i=9;</p><p> if(i&
37、lt;0)i=0;</p><p><b> }</b></p><p> /***************************************顯示數據*********************************************/</p><p> void timer1() interrupt 3</p
38、><p><b> {</b></p><p> TH1 = (65536 - 6000) / 256;</p><p> TL1 = (65536 - 6000) % 256;</p><p> P2=duan_code[dis[count]];</p><p> P3=wei_code[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論