版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課程名稱 微機原理與接口技術(shù)課程設(shè)計</p><p> 設(shè)計題目 兵乓球比賽 </p><p><b> 目錄</b></p><p><b> 一、設(shè)計題目2</b></p><p> 1.1設(shè)計的題目:2</p>&l
2、t;p> 二、設(shè)計要求與目的2</p><p> 2.1設(shè)計的要求:2</p><p> 2.2設(shè)計的目的2</p><p><b> 三、設(shè)計方案2</b></p><p><b> 3.1設(shè)計原理2</b></p><p> 3.2 設(shè)計思路
3、3</p><p> 3.2.1提出方案3</p><p> 3.2.2方案論證3</p><p><b> 四、原理分析4</b></p><p><b> 五、硬件設(shè)計5</b></p><p><b> 六、軟件分析6</b>&
4、lt;/p><p><b> 6.1軟件流程6</b></p><p><b> 6.2源程序:7</b></p><p> 七、總結(jié)與展望14</p><p><b> 八、參考文獻15</b></p><p><b> 一、設(shè)
5、計題目</b></p><p><b> 1.1設(shè)計的題目:</b></p><p><b> 兵乓球比賽。</b></p><p><b> 二、設(shè)計要求與目的</b></p><p><b> 2.1設(shè)計的要求:</b></p
6、><p> 用8個LED發(fā)光管(4紅4綠)的來回滾動顯示模擬打乒乓球時,乒乓球在兩邊球臺上的來回運動。比賽雙方用按按鈕(雙方各用一個按鈕)的方法來模擬發(fā)球與接球,即發(fā)球方按動其控制的按鈕,球從發(fā)球方一側(cè)向?qū)Ψ竭\動(LED發(fā)光管從發(fā)球方到對方逐個點亮,滾動顯示)。當(dāng)球運動至接球方時,接球方立即按動其控制的按鈕,“擊球”使球“彈回”發(fā)球方一側(cè)。如此周而復(fù)始,直至在規(guī)定的擊球時間內(nèi)有一方未能完成擊球動作,從而對方得一分;
7、然后繼續(xù)比賽。比賽規(guī)則可參照一般的乒乓球比賽。</p><p><b> 2.2設(shè)計的目的:</b></p><p> 通過課程設(shè)計及研究論文,使學(xué)生對計算機系統(tǒng)尤其對計算機硬件系統(tǒng)有更深入的理解,并具有較簡單的計算機應(yīng)用的設(shè)計能力。</p><p><b> 三、設(shè)計方案</b></p><p&
8、gt;<b> 3.1設(shè)計原理</b></p><p> 根據(jù)課程設(shè)計任務(wù)書的內(nèi)容與要求,要實現(xiàn)模擬打乒乓球的運動過程,首先使比賽開始,假定甲先發(fā)球,小球向乙方向運動,然后乙揮拍擊球?qū)⑶虼蚧?,小球向甲方向運動,如此循環(huán),當(dāng)某一方擊球失誤(過早或是超時擊球),則為對方加分,最后將比分顯示出來。</p><p><b> 3.2 設(shè)計思路</b>
9、;</p><p> 編寫匯編語言程序,并結(jié)合AEDK實驗箱上的相關(guān)芯片設(shè)計電路,實現(xiàn)模擬打乒乓球的過程(開始,揮拍,球移動,加分,顯示分?jǐn)?shù)等功能)。</p><p><b> 3.2.1提出方案</b></p><p> 用8255A的A口作為輸出端,分別與機箱上的8個小燈相連,向A口輸出一個值,使相應(yīng)的一個小燈亮,然后利用循環(huán)左移和右
10、移發(fā)光的小燈來模擬實現(xiàn)乒乓球的實際運動軌跡。每當(dāng)小燈亮?xí)r,就檢測有無鍵按下,如果無鍵按下,小燈繼續(xù)移動并繼續(xù)檢測有無鍵按下;如果有鍵按下并且鍵碼值等于所按下的對應(yīng)鍵,則讀出8255A的A口的值,看其是否等于小球到達正確位置時對應(yīng)的值,如果相等小球自動返回,如果不等則調(diào)用加分程序,為對方加分。 </p><p> 設(shè)置適當(dāng)大小的緩沖區(qū),將所有比賽的比分放在此緩沖區(qū)內(nèi),利用8279A將比分輸出顯示在LED
11、上(分兩部分:1)每局的比分 2)比賽的局分)。</p><p><b> 3.2.2方案論證</b></p><p> 利用8279A芯片的鍵盤輸入來實現(xiàn)比賽開始和甲、乙的揮拍(F鍵為開始鍵,0鍵為甲,7鍵為乙),用8279A的LED顯示來實現(xiàn)比分的顯示。利用8255A的A口作為輸出來模擬小球的運動情況,假定甲先發(fā)球,為其設(shè)置一個初始值,低電平燈亮,使
12、最左邊的燈亮,調(diào)用循環(huán)右移程序,小燈依次向右亮,按下7鍵,判斷是否是在小球到達最右邊時按下的,如果是,調(diào)用循環(huán)左移程序,小燈依次 向左亮,如果乙擊球提前或是超時,則給對方加分,同理循環(huán)下去。甲和乙的比 分放在不同緩沖區(qū)內(nèi)累加,當(dāng)有一方得分滿11分時,總局比分加一,此時比賽中止,再次按下開始鍵后,單局比分清零,總局分不變,另一方發(fā)球,重新積分。經(jīng)實際連線操作,所得現(xiàn)象與預(yù)期的相一致,方案成功。</p>&
13、lt;p><b> 四、原理分析</b></p><p> 1.8253定時器選用方式0,實現(xiàn)定時功能。兩個七段數(shù)碼管要實現(xiàn)連續(xù)顯示,必須每隔5~10ms刷新一次,而燈移動速度為300~500ms。設(shè)定定時周期為5ms,當(dāng)計數(shù)停止,8253輸出高電平時,分別顯示比分的高位和低位。經(jīng)過一定數(shù)量的定時周期后,再進行燈移動的操作。</p><p> 2.8255
14、并行接口A口B口分別用來控制LED流水燈及數(shù)碼管的顯示,C口則用于讀入各開關(guān)狀態(tài)及輸出數(shù)碼管片選信號。</p><p> 3.單脈沖開關(guān)模擬擊球,當(dāng)8255讀入脈沖信號為高電平時,通過判斷燈當(dāng)前移動方向和擊球者,來確定燈下一次的移動方向。</p><p> 4.LED流水燈表示乒乓球移動,燈每次移動應(yīng)留有足夠的時間給操作者撥動調(diào)速開關(guān),或按下脈沖開關(guān)。</p><p
15、> 5.七段數(shù)碼管與比賽同步顯示比分,顯示0~f相應(yīng)的16進制控制數(shù)為0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x71。</p><p><b> 五、硬件設(shè)計</b></p><p><b> 六、軟件分析</b></
16、p><p><b> 6.1軟件流程</b></p><p><b> 6.2源程序:</b></p><p><b> 程序源代碼如下:</b></p><p><b> (含注解)</b></p><p> //-----
17、---------------------------------------------------------------------------------------------</p><p> // File Name: table tennis.cpp</p><p> // Version: 1.0標(biāo)準(zhǔn)版</p>
18、<p> // Created By: 楓飛</p><p> // Created date: 01/12/2010</p><p> // Description: 實現(xiàn)可記分、判斷勝負,可速度調(diào)整的乒乓球?qū)Υ?</p><p> //----------
19、----------------------------------------------------------------------------------------</p><p> #include <stdio.h></p><p> #include <conio.h></p><p> #include
20、<string.h></p><p> #include <iostream.h></p><p> #include "ApiEx.h"</p><p> #pragma comment(lib,"ApiEx.lib")</p><p> int pa=0x2
21、80;</p><p> int pb=0x281;</p><p> int pc=0x282;</p><p> int pn1=0x283;</p><p> int p0=0x288;</p><p> int p1=0x289;</p><p> int p2=
22、0x28a;</p><p> int pn2=0x28b;</p><p> int s[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x7b,0x71};</p><p> // 0 1 2 3 4 5 6
23、 7 8 9 a b c d e f </p><p> void leddic(unsigned char &led, int f) //燈移動函數(shù)</p><p><b> {</b></p><p> int x=led;</p><p> if(f==
24、0) x=x/2; //若方向向右,燈向右移動一個</p><p> else if(f==1) x=x*2; //若方向向左,燈向左移動一個</p><p> else printf("Error!");</p><p><b> led=x;</b>&
25、lt;/p><p><b> }</b></p><p> void speed(int &s) //球速控制,從8255C口讀入開關(guān)狀態(tài),</p><p> { //若為高電平,調(diào)整速度為高速</p><p&g
26、t; unsigned char data;</p><p><b> int x;</b></p><p> PortReadByte(pc,&data);</p><p><b> x=data;</b></p><p><b> x=x&4;</b&g
27、t;</p><p> if(x==0) s=100; //默認(rèn)5*100ms</p><p> if(x==1) s=60; //高速5*60ms</p><p><b> }</b></p><p> void scorem(int m)
28、 //通過數(shù)碼管顯示比分</p><p><b> {</b></p><p> unsigned char data;</p><p> data=s[m];</p><p> PortWriteByte(pc,0x20); //選擇數(shù)碼管高位</p&g
29、t;<p> PortWriteByte(pa,data); //顯示甲得分</p><p><b> }</b></p><p> void scoren(int n)</p><p><b> {</b></p><p> unsigned char
30、data;</p><p> data=s[n];</p><p> PortWriteByte(pc,0x10); //選擇數(shù)碼管低位</p><p> PortWriteByte(pa,data); //顯示乙得分</p><p><b> }</b></p&g
31、t;<p> void start(unsigned char &led, int &f,int &s,int m,int n) //發(fā)球子函數(shù)</p><p><b> {</b></p><p> unsigned char data;</p><p><b> int x;<
32、/b></p><p> PortWriteByte(pn2,0x57); //8253計數(shù)器1初始化,低八位,方式3,控制字01010111B</p><p> PortWriteByte(p1,0x10); //8253計數(shù)器1計數(shù)初值10</p><p> for(;1<2;)</p><p><
33、;b> {</b></p><p><b> speed(s);</b></p><p> PortReadByte(pc,&data);</p><p><b> x=data;</b></p><p><b> x=x&1;</b>
34、;</p><p> if(x==1) //若甲發(fā)球,燈從左往右</p><p><b> {</b></p><p><b> led=0x80;</b></p><p><b> f=0;</b></p><
35、;p><b> break;</b></p><p><b> }</b></p><p><b> x=data;</b></p><p><b> x=x&2;</b></p><p> if(x==1)
36、 //若乙發(fā)球,燈從右往左</p><p><b> {</b></p><p><b> led=0x1;</b></p><p><b> f=1;</b></p><p><b> break;</b></p>
37、<p><b> }</b></p><p><b> x=data;</b></p><p><b> x=x&8;</b></p><p> if(x==1) //當(dāng)8253輸出為高電平時,顯示甲得分</p><p
38、><b> {</b></p><p> scorem(m);</p><p><b> }</b></p><p> else //當(dāng)8253輸出為低電平時,顯示乙得分 scoren(n);</p><p><b
39、> }</b></p><p><b> }</b></p><p> void out(unsigned char &led, int &f,int &m,int &n) //判斷球是否出界,即選手得分</p><p><b> {</b></p>
40、<p> if(f==1) //球向左運動時</p><p><b> {</b></p><p> if(led==0x0) //球超出左邊界</p><p><b> {</b>&l
41、t;/p><p> printf("乙得分!\n");</p><p><b> n++;</b></p><p> printf("比分:");</p><p> printf("%d-%d",m,n);</p><p> pri
42、ntf("\n\n");</p><p><b> }</b></p><p><b> }</b></p><p> else //球向右運動時</p><p><b> {</b
43、></p><p> if(led==0x0) //球超出右邊界</p><p><b> {</b></p><p> printf("甲得分!\n");</p><p><b> m++;</b></p&
44、gt;<p> printf("比分:");</p><p> printf("%d-%d",m,n);</p><p> printf("\n\n");</p><p><b> }</b></p><p><b> }<
45、;/b></p><p> if(((m==11)&&(m-n>=2))||((m>11)&&(m-n>=2))) //判斷整局比賽的勝負</p><p><b> {</b></p><p> printf("此局甲獲勝!重新計分!\n\n\n");
46、</p><p><b> m=n=0;</b></p><p><b> }</b></p><p> else if(((n==11)&&(n-m>=2))||((n>11)&&(n-m>=2)))</p><p><b> {
47、</b></p><p> printf("此局乙獲勝!重新計分!\n\n\n");</p><p><b> m=n=0;</b></p><p><b> }</b></p><p><b> }</b></p><
48、;p> void attack(unsigned char &led,int &s, int &f,int &m,int &n) //擊球子函數(shù)</p><p><b> {</b></p><p> unsigned char data;</p><p><b> int x,y
49、;</b></p><p><b> STA:</b></p><p> printf("請發(fā)球!\n");</p><p> start(led,f,s,m,n);</p><p> PortWriteByte(pn2,0x51); //8253計數(shù)器1初始化,低八位,方式
50、0,控制字01010001B</p><p><b> Red:</b></p><p> PortWriteByte(pb,led);</p><p> for(int i=1;i<=s;i++)</p><p><b> {</b></p><p> Po
51、rtWriteByte(p1,5); //8253計數(shù)器1計數(shù)初值5</p><p><b> Goo:</b></p><p> PortReadByte(pc,&data);</p><p><b> x=data;</b></p><p><b>
52、 y=data;</b></p><p><b> y=y&8;</b></p><p> if(y==0) goto Goo; //當(dāng)8253未輸出高電平時,繼續(xù)讀入</p><p> if(i%2==1)scorem(m);</p><p> else scor
53、en(n);</p><p> if(f==1) //球向左運動</p><p><b> {</b></p><p><b> x=x&1;</b></p><p> if((x==1)&&(led>=0x10)
54、) //球靠近甲且甲擊球</p><p><b> {</b></p><p> f=0; //調(diào)整球的運動方向為向右</p><p><b> }</b></p><p><b> }</b></p>&l
55、t;p> else //球向右運動</p><p><b> {</b></p><p><b> x=data;</b></p><p><b> x=x&2;</b></p><p> if((x
56、==2)&&(led<=0x8)) //球靠近乙且乙擊球</p><p><b> {</b></p><p> f=1; //調(diào)整球的運動方向為向左</p><p><b> }</b></p><p><b&
57、gt; }</b></p><p><b> }</b></p><p> leddic(led,f);</p><p> out(led,f,m,n);</p><p> if(led==0x0)</p><p><b> {</b></p&g
58、t;<p> PortWriteByte(pb,led);</p><p><b> goto STA;</b></p><p><b> }</b></p><p><b> goto Red;</b></p><p><b> }</
59、b></p><p> void main()</p><p><b> {</b></p><p> unsigned char led;</p><p> int f=1,s=0; //f為燈移動方向,默認(rèn)向右;s為燈移動速度</p><p>
60、int m=0,n=0; //m為甲得分,n為乙得分</p><p> Startup(); //打開設(shè)備</p><p> PortWriteByte(pn1,0x81); //8255初始化,A口B口輸出,</p><p> //C口高位輸出,低位輸入,控制字10000001B</p
61、><p> PortWriteByte(pn2,0x27); //8253計數(shù)器0初始化,高八位,方式3,控制字00100111B</p><p> PortWriteByte(p0,0x20); //8253計數(shù)器0計數(shù)初值2000</p><p> attack(led,s,f,m,n); //調(diào)用擊球子函數(shù)</p&
62、gt;<p> Cleanup(); //關(guān)閉設(shè)備</p><p><b> }</b></p><p><b> 七、總結(jié)與展望</b></p><p> 通過這次課程設(shè)計,我對8255A、8279A等芯片有了更進一步的認(rèn)識,對它們的功能也有了更深的了解。 </
63、p><p> 通過這次課程設(shè)計,讓我對上學(xué)期《微機原理與接口技術(shù)》的課程內(nèi)容得到了具體的應(yīng)用,也更加深了對這門課的理解,尤其是計算機的工作原理,計算機的數(shù)據(jù)通路和指令系統(tǒng)等方面。 </p><p> 同時,通過這次實驗,我對如何做硬件實驗有了更進一步的感性認(rèn)識,特別是對用軟件來設(shè)計硬件這一部分增加了實際操作的經(jīng)驗。我體會到了用軟件設(shè)計硬件的優(yōu)點,人們可以把軟件和硬件的特點結(jié)合起來
64、,從而加快硬件升級的速度并降低硬件設(shè)計的成本,并使得硬件開發(fā)更加容易維護。 </p><p> 忽然想到《大學(xué)》云:“知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得?!闭n程設(shè)計亦不出其外。首先,知止,明確目的,明確要做出來的是怎樣一個產(chǎn)品;然后,就有了定,有了開發(fā)的方向,有了前進的目標(biāo),有了基本點來使自己設(shè)計不致走偏離;從而,能夠靜,因為不怕自己所走的方向不是自己的最終目的,因為明確了自
65、己要做的東西到底是怎樣一回事,所謂“知己知彼,百戰(zhàn)不殆”,所以能夠靜心;而后,能夠安,靜心之后,心中無生非念,故而可以安心;而后,能夠慮,因為安心之后,才能沉下來思索,安心之后,才能透過現(xiàn)象看本質(zhì),安心之后,才能頓悟深刻道理,安心之后,才能想象勾畫出自己的流程圖;最后,必然能夠得,因為能夠安靜地沉下心來覃思,能夠想出畫出流程圖來,盡心力而為之,必然可以按照流程圖上的得著自己的目的。 </p><p>
66、 與此同時我還要感謝老師和同學(xué)們在課設(shè)過程中對我的指導(dǎo)和幫助,如果沒有他們的幫助,也許我的這次課設(shè)并不會這么完美。通過這次課設(shè)我也了解到自己的基礎(chǔ)知識還很不夠,所以我以后要更加努力的學(xué)習(xí)專業(yè)知識技能。</p><p><b> 八、參考文獻</b></p><p> [1]龔尚福.微機原理與接口技術(shù)[M].西安:西安電子科技大學(xué)出版社, 20
67、03</p><p> [2]王中民.微型計算機原理[M] .西安:西安電子科技大學(xué)出版社, 2003 </p><p> [3]葛桂平.微機原理學(xué)習(xí)與實踐指導(dǎo)[M] .北京:清華大學(xué)出版社, 2010 </p><p> [4]周杰英.微機原理、匯編語言與接口技術(shù)[M].北京
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微型計算機接口技術(shù)課程設(shè)計---雙機通信
- 單片微型計算機原理與接口技術(shù)課程設(shè)計報告——溫度測量
- 現(xiàn)代微型計算機原理與接口技術(shù)課后答案
- 微型計算機原理與接口技術(shù)課后答案張榮標(biāo)
- 《微型計算機原理與接口技術(shù)》(尹建華)習(xí)題答案
- 計算機控制與接口技術(shù)課程設(shè)計
- 微型計算機控制技術(shù)課件 第二章 微型計算機接口技術(shù)_ppt.txt
- 微型計算機控制技術(shù)課件 第二章 微型計算機接口技術(shù)_ppt.txt
- 2011年6月微型計算機原理與接口技術(shù)試題
- (10)微型計算機的io接口技術(shù)
- 單片微型計算機原理與接口技術(shù)高鋒版課后答案全集
- 《微型計算機接口技術(shù)及應(yīng)用》考試大綱
- 微型計算機及其接口技術(shù)試題答案
- 《微型計算機原理與接口技術(shù)》(第三版)習(xí)題答案
- 北語19春《微型計算機原理及其接口技術(shù)》作業(yè)3
- 微型計算機及接口技術(shù)04732學(xué)習(xí)資料1
- 微型計算機接口技術(shù)考試及答案3套
- 計算機控制技術(shù)課程論文-微型計算機與中國
- 微型機與接口技術(shù)課程設(shè)計
- 微機原理與接口技術(shù)課程設(shè)計---計算機并行處理機制的研究
評論
0/150
提交評論