2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論