久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4665|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MSP430G2553實(shí)現(xiàn)乒乓球游戲機(jī)實(shí)驗(yàn)報(bào)告

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:343004 發(fā)表于 2018-6-1 17:21 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
實(shí)驗(yàn)報(bào)告

實(shí)驗(yàn)名稱(chēng):采用MSP430G2553 實(shí)現(xiàn)乒乓球游戲機(jī)
姓    名:
學(xué)    號(hào):
指導(dǎo)教師:     張*         
實(shí)驗(yàn)時(shí)間:



目錄
一、實(shí)驗(yàn)?zāi)康?/font>
二、實(shí)驗(yàn)內(nèi)容與步驟
2.1實(shí)驗(yàn)內(nèi)容:
2.2實(shí)驗(yàn)步驟:
三、系統(tǒng)設(shè)計(jì)
3.1  總體設(shè)計(jì)
3.2硬件:
3.3軟件:
四、軟件單元電路設(shè)計(jì)
4.1  PWM波信號(hào)產(chǎn)生單元
4.2  串口發(fā)送模塊
4.3  定時(shí)中斷程序
4.4  按鍵中斷模塊
4.5  Flash模塊
六、硬件單路整體外觀與顯示效果
顯示效果
七、 個(gè)人感想
八、 參考文獻(xiàn) 與 附錄
8.1參考文獻(xiàn):
8.2附錄:
8.3全部代碼:

摘要
MSP430單片機(jī)通過(guò)兩條I/O 信號(hào)輸出兩組脈寬調(diào)制波,經(jīng)過(guò)低通濾波器提取脈寬調(diào)制的均值電壓,輸入到雙通道示波器中。示波器工作在X/Y 模式。示波器屏幕上的光電代表乒乓球。乒乓球在X/Y 電壓的控制下在屏幕上移動(dòng)。

實(shí)驗(yàn)題目:采用MSP430G2553 實(shí)現(xiàn)乒乓球游戲機(jī)
一、實(shí)驗(yàn)?zāi)康?/font>
1、通過(guò)此次實(shí)驗(yàn)掌握采用MSP430G2553編程的具體步驟;
2、串口編程中要掌握的包括串口的設(shè)置、串口的讀寫(xiě)操作等;
3、熟悉模電硬件電路的設(shè)計(jì)與焊接;
4、掌握如何調(diào)試電路和軟件編程的結(jié)合。
二、實(shí)驗(yàn)內(nèi)容與步驟2.1實(shí)驗(yàn)內(nèi)容:
1.構(gòu)造兩組無(wú)源低通濾波器,使得msp430 可以用脈寬調(diào)制方式控制球的位置
2.用給定的運(yùn)放制作一放大器,使光點(diǎn)運(yùn)動(dòng)范圍在示波器的X 軸,Y 軸方向上可調(diào)
3.乒乓球可按拋物線自動(dòng)在屏幕上左右彈射,球的落點(diǎn)為屏幕兩側(cè)邊的中間
4.使用兩個(gè)按鈕分別作為左側(cè)擊球按鈕和右側(cè)擊球鈕。當(dāng)乒乓球靠近屏幕左邊時(shí)
按下左側(cè)擊球鈕,可將球擊回右側(cè)。右側(cè)擊球鈕亦然
5.建立成敗機(jī)制。即球抵達(dá)邊沿而未按下?lián)羟虬粹o,記為擊球失敗,用LED 燈光表示
6.建立記分機(jī)制,用串口在電腦上上顯示雙方得分
7.特殊功能,在不調(diào)整放大器的情況下,連按兩下?lián)羟蜮o能擊出高拋球,軌跡拋物線曲率變大

8.利用片內(nèi)flash 加入比分?jǐn)嚯娮员4婀δ?/font>

2.2實(shí)驗(yàn)步驟:
  • 先確定方案和硬件電路設(shè)計(jì)圖。
  • 開(kāi)始軟件編程和硬件電路的焊接。
  • 下載程序,進(jìn)行調(diào)試,優(yōu)化程序。
三、系統(tǒng)設(shè)計(jì)
3.1  總體設(shè)計(jì)
      總體設(shè)計(jì)框圖

3.2硬件:            
杜邦線連接P1.3、P1.4口到兩個(gè)按鍵,P2.1和P2.5分別是兩個(gè)PWM波輸出分別連接到兩個(gè)低通濾波器,然后接放大器,最后輸入到雙通道顯示示波器,XY擋。

硬件設(shè)計(jì)圖
3.3軟件:
由單片機(jī)產(chǎn)生PWM波,寫(xiě)程序控制不同時(shí)間,給它不同的占空比,程序編寫(xiě)Flash程序,按鍵中斷程序,串口發(fā)送程序。

四、軟件單元電路設(shè)計(jì)4.1  PWM波信號(hào)產(chǎn)生單元
由Grace定時(shí)器生成代碼,用Timer1可以出兩路PWM波,由MatLab生成拋物線碼表,根據(jù)要求不同X位置付給Y不同碼表,三角波由x隨Y線性自增實(shí)現(xiàn)。
    MatLab里生成拋物線的函數(shù)為
t=0:pi/4:201;
y=254*sin(pi/200.3*t);;%二次函數(shù)表達(dá)式(你改成自己的拋物線就行了)
stem(t,y);%畫(huà)圖
    得到256個(gè)數(shù),在CCS開(kāi)頭即可定義一個(gè)碼表,即
Const float y[256]={0,3.1288269,6.257179,9.384581,12.510560,15.634640,18.756348,21.875209,24.9907517633125,28.1025016646739,31.209987,34.312736,37.410279,40.502145,43.587865,46.666971,49.738995,52.803472,55.859936,58.907924,61.94697,64.976622,67.996411,71.0058819526576,74.004578,76.992044,79.967827,82.931476,85.882540,88.820572,91.745126,94.655758,97.552027,100.433493,103.299719,106.150269,108.984712,111.802617,114.603556,117.387106,120.15284,122.90034,125.62920,128.338991,131.029308,133.699741,136.349886523822,138.979341373364,141.587706913092,144.174587338650,146.739590105921,149.282325990597,151.802409147240,154.299457167832,156.773091139803,159.222935703532,161.648619109298,164.049773273701,166.426033835507,168.777040210944,171.102435648417,173.401867282641,175.674986188189,177.921447432436,180.140910127905,182.333037483992,184.497496858071,186.633959805973,188.742102131824,190.821603937241,192.872149669873,194.893428171287,196.885132724180,198.846961098927,200.778615599439,202.679803108336,204.550235131431,206.389627841501,208.197702121359,209.974183606210,211.718802725280,213.431294742727,215.111399797810,216.758862944320,218.373434189270,219.954868530829,221.502925995499,223.017371674528,224.497975759559,225.944513577501,227.356765624622,228.734517599854,230.077560437320,231.385690338050,232.658708800910,233.896422652726,235.098644077590,236.265190645368,237.395885339377,238.490556583247,239.549038266961,240.571169772056,241.556795995998,242.505767375717,243.417939910307,244.293175182869,245.131340381521,245.932308319553,246.695957454719,247.422171907687,248.110841479623,248.761861668909,249.375133687003,249.950564473430,250.488066709901,250.987558833567,251.448965049393,251.872215341657,252.257245484581,252.603997052071,252.912417426586,253.182459807121,253.414083216310,253.607252506641,253.761938365796,253.878117321089,253.955771743039,253.994889848037,253.995465700137,253.957499211956,253.880996144690,253.765968107235,253.612432554430,253.420412784405,253.189937935048,252.921042979582,252.613768721258,252.268161787165,251.884274621152,251.462165475874,251.001898403946,250.503543248230,249.967175631234,249.392876943636,248.780734331935,248.130840685224,247.443294621099,246.718200470693,245.955668262840,245.155813707386,244.318758177625,243.444628691884,242.533557894247,241.585684034429,240.601150946798,239.580108028544,238.522710217014,237.429117966199,236.299497222389,235.134019398984,233.932861350494,232.696205345691,231.424239039959,230.117155446816,228.775152908624,227.398435066492,225.987210829376,224.541694342377,223.062104954248,221.548667184106,220.001610687362,218.421170220877,216.807585607335,215.161101698851,213.481968339819,211.770440328998,210.026777380847,208.251244086115,206.444109871692,204.605648959725,202.736140326006,200.835867657637,198.905119309987,196.944188262929,194.953372076390,192.932972845190,190.883297153206,188.804656026851,186.697364887869,184.561743505483,182.398115947864,180.206810532957,177.988159778663,175.742500352378,173.470173019910,171.171522593766,168.846897880830,166.496651629432,164.121140475824,161.720724890061,159.295769121299,156.846641142526,154.373712594723,151.877358730469,149.357958356999,146.815893778722,144.251550739210,141.665318362662,139.057589094854,136.428758643596,133.779225918677,131.109392971336,128.419664933254,125.710449955077,122.982159144481,120.235206503788,117.470008867146,114.686985837276,111.886559721796,109.069155469145,106.235200604094,103.385125162874,100.519361627920,97.6383448622435,94.7425120434471,91.8323025973826,88.9081581314717,85.9705223676945,83.0198410752579,80.0565620029519,77.0811348112064,74.0940110038585,71.0956438596384,68.0864883633880,65.0670011370189,62.0376403702228,58.9988657509443,55.9511383956251,52.8949207792330,49.8306766650837,46.7588710344675,43.6799700160909,40.5944408153444,37.5027516434067,34.4053716461967,31.3027708331826,28.1954200060616,25.0837906873179,21.9683550486719,18.8495858394310,15.7279563147526,12.6039401638308,9.47801143801569,6.35064447888023,3.22231384624036,0};//256個(gè)數(shù)
產(chǎn)生三角波的部分:
  1. if(w_ctl1==0)

  2. {

  3. TA1CCR1++;

  4. }

  5. if(w_ctl1==1)

  6. {

  7.     TA1CCR1--;

  8. }

  9. 其中w_ctl1為一個(gè)標(biāo)志位,當(dāng)其為0時(shí)代表球往右移,當(dāng)其為1時(shí)代表球往左移。

  10. 產(chǎn)生拋物線的部分:

  11. int h=1;//曲率,雙擊時(shí)h=2

  12. TA1CCR2=h*y[j];//上升

  13. j=j+1;

  14. if(j==256) j=0;

  15. __delay_cycles(250000);

  16. 產(chǎn)生兩路PWM波的函數(shù)為

  17. void Set_PWM(void)//無(wú)需中斷輸出兩路PWM

  18. {

  19.               //使用系統(tǒng)初始化時(shí)的默認(rèn)時(shí)鐘1MHz,定時(shí)器A1專(zhuān)門(mén)用于產(chǎn)生PWM 波形。

  20.               TA1CTL = TASSEL_2 + MC_1 + ID_0;//使用系統(tǒng)次主機(jī)SMCLK、增計(jì)數(shù)模式、無(wú)分頻

  21. //              TA1CCR0 = 256;//在16MHz的主頻率下,16*10^6/TA1CCR0

  22.               TA1CCR0 = 800;//在16MHz的主頻率下,16*10^6/TA1CCR0

  23.               TA1CCR1 = 0;

  24.               TA1CCR2 = 0;

  25.               TA1CCTL1 = OUTMOD_7;

  26.               TA1CCTL2 = OUTMOD_7;

  27.               P2SEL |= BIT1 + BIT5;//做第二功能使用(PWM輸出)

  28.               P2DIR |= BIT1 + BIT5;//輸出

  29. }
復(fù)制代碼



4.2  串口發(fā)送模塊
串口發(fā)送同樣由Grace生成,直接調(diào)用Send_char()函數(shù)
根據(jù)判斷不同標(biāo)志位,判斷何時(shí)發(fā)送比分,若球到達(dá)兩端,沒(méi)有擊球,則停在邊緣,判斷停在邊緣則計(jì)數(shù)。計(jì)數(shù)值改變時(shí)發(fā)送比分。
  1.            if(TA1CCR1==256)
  2.                                 {   w_ctl1=1;
  3.                                               P1OUT|=BIT6;
  4.                                               P1OUT&=~BIT0;
  5.                                               __delay_cycles(2000000);
  6.                                               P1OUT&=~BIT6;
  7.                                               ascore=ascore+1;
  8.                                               flash();
  9.                                               score[0]=ascore/10+'0';
  10.                                               score[1]=ascore%10+'0';
  11.                                               Send_Str(score);
  12.                                 }
  13.                                 if(TA1CCR1==0)
  14.                                 {  w_ctl1=0;
  15.                                    P1OUT|=BIT0;
  16.                                    P1OUT&=~BIT6;
  17.                                    __delay_cycles(2000000);
  18.                                    P1OUT&=~BIT0;
  19.                                    bscore=bscore+1;
  20.                                    flash();
  21.                                    score[3]=bscore/10+'0';
  22.                                    score[4]=bscore%10+'0';
  23.                                    Send_Str(score);
  24.                                 }                 
  25.        score[0]=a/10+0x30;
  26.                   score[1]=a%10+0x30;
  27.                   score[3]=b/10+0x30;
  28.                   score[4]=b%10+0x30;
  29.        Send_Str(score);
  30.     }
復(fù)制代碼
4.3  高拋的實(shí)現(xiàn)

主函數(shù)while(1)里

  1. if(a==1)

  2.                                 {a=0;h=1;}

  3.                                 if(b==1)

  4.                                 {b=0;h=1;}

  5.                                   if(a==2)// p1.3雙擊

  6.                                              {a=0;h=2;}

  7.                                 if(b==2)//p1.4雙擊

  8.                                 {b=0;h=2;}

  9.             TA1CCR2=h*y[j];//上升

  10.             j=j+1;

  11.                                 if(j==256) j=0;

  12.                                 __delay_cycles(250000);
復(fù)制代碼
  1. 4.4  按鍵中斷模塊

  2. 用按鍵中斷,用P1.3   P1.4口開(kāi)啟按鍵中斷,進(jìn)入中斷時(shí)判斷是哪個(gè)I/O 口,然后置不同的標(biāo)志位,以便定時(shí)中斷查詢(xún),進(jìn)入不同的狀態(tài)。在中斷里再定義一個(gè)按鍵Push_Key1,若在一定時(shí)間內(nèi)按下兩次按鍵,則判斷為高拋,h的值變?yōu)?。
  3. unsigned int Push_Key1 = 0;
  4. unsigned int Push_Key = 0;
  5. #pragma vector=PORT1_VECTOR
  6. __interrupt void PORT1_ISR(void)
  7. {
  8. P1_IODect();//檢測(cè)通過(guò),則會(huì)調(diào)用事件處理函數(shù)
  9. P1IFG=0;              //退出中斷前必須手動(dòng)清除IO口中斷標(biāo)志
  10. }
  11. void P1_IODect()
  12. {
  13. //              unsigned int Push_key = 0;
  14. Push_Key = P1IFG&(~P1DIR); //排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標(biāo)志位
  15. __delay_cycles(10000); //延時(shí)一段時(shí)間,避開(kāi)機(jī)械抖動(dòng)區(qū)域(延時(shí)消抖)
  16. if((P1IN&Push_Key) == 0) //判斷按鍵狀態(tài)是否與延時(shí)前一致,若該次按鍵確實(shí)有效,繼續(xù)往下執(zhí)行
  17. {
  18. //----判斷具體哪個(gè)IO被按下,調(diào)用該IO的事件處理函數(shù)----
  19. switch(Push_Key)
  20. {
  21. case BIT3: P13_Onclick();break; //調(diào)用中斷事件處理函數(shù)
  22. case BIT4: P14_Onclick();break;
  23. default: break; //任何情況下均加上default
  24. }
  25. }
  26. }
  27. VoidP13_Onclick()
  28. {
  29. a=1;
  30. __delay_cycles(3200000);
  31. Push_Key1=P1IFG&(~P1DIR);
  32. __delay_cycles(10000);
  33. if((P1IN&Push_Key1)==0)
  34. {
  35. if(Push_Key==Push_Key1)
  36. a=2;
  37. }
  38. if(w_ctl1==0)//球往右移且過(guò)界
  39. {
  40. If
  41. ((j<255)&(j>127))
  42. {
  43. w_ctl1=1;//往左打
  44. j=256-j;
  45. }
  46. }
  47. }
  48. voidP14_Onclick()
  49. {
  50. b=1;
  51. __delay_cycles(3200000);
  52. Push_Key1=P1IFG&(~P1DIR);
  53. __delay_cycles(10000);
  54. if((P1IN&Push_Key1)==0)
  55. {
  56. if(Push_Key==Push_Key1)
  57. b=2;
  58. }
  59. if(w_ctl1==1)//球往左移且過(guò)界
  60. {
  61. if((j<255)&(j>127))
  62. {w_ctl1=0;//往右打
  63. j=256-j;
  64. }

  65. }

  66. }

  67. 4.5 Flash模塊
  68. 定義一個(gè)函數(shù),包括了Flash的擦寫(xiě)任務(wù)。

  69. /***************寫(xiě)flash***************/
  70. void flash()
  71. {
  72.               FCTL1=FWKEY+ERASE;
  73.                             FCTL2=FWKEY+FSSEL1+2;
  74.                             FCTL3=FWKEY;
  75.                             *(Addr1)=0x00;
  76.                             *(Addr2)=0x00;
  77.                             FCTL1=FWKEY;
  78.                             FCTL3=FWKEY+LOCK;

  79.                             FCTL1=FWKEY+WRT;
  80.                             FCTL2=FWKEY+FSSEL1+2;
  81.                   FCTL3=FWKEY;
  82.                   *(Addr1)=ascore;
  83.                   *(Addr2)=bscore;
  84.                   FCTL1=FWKEY;
  85.                   FCTL3=FWKEY+LOCK;
  86. }
  87. 調(diào)用函數(shù):
  88. if(TA1CCR1==256)
  89.                                 {   w_ctl1=1;
  90.                                               P1OUT|=BIT6;
  91.                                               P1OUT&=~BIT0;
  92.                                               __delay_cycles(2000000);
  93.                                               P1OUT&=~BIT6;
  94.                                               ascore=ascore+1;
  95.                                               flash();
  96.                                               score[0]=ascore/10+'0';
  97.                                               score[1]=ascore%10+'0';
  98.                                               Send_Str(score);
  99.                                 }
  100.                                 if(TA1CCR1==0)
  101.                                 {  w_ctl1=0;
  102.                                    P1OUT|=BIT0;
  103.                                    P1OUT&=~BIT6;
  104.                                    __delay_cycles(2000000);
  105.                                    P1OUT&=~BIT0;
  106.                                    bscore=bscore+1;
  107.                                    flash();
  108.                                    score[3]=bscore/10+'0';
  109.                                    score[4]=bscore%10+'0';
  110.                                    Send_Str(score);
  111.                                 }
  112. Main函數(shù)里:
  113. ascore = *Addr1;//要想掉電保存,flash不僅要寫(xiě),還要讀
  114. bscore = *Addr2;
  115. score[0]=ascore/10+'0';
  116. score[1]=ascore%10+'0';
  117. score[3]=bscore/10+'0';
  118. score[4]=bscore%10+'0';
  119. Send_Str(score);
  120. 初始化里:
  121. #define Addr1 ((volatile unsigned short*)0x1000)
  122. #define Addr2 ((volatile unsigned short*)0x1008)
  123. unsigned int ascore=0,bscore=0,t=0;
復(fù)制代碼


五、硬件單路整體外觀與顯示效果

6.2顯示效果
、 個(gè)人感想
通過(guò)此次實(shí)驗(yàn)使我們對(duì)MSP430單片機(jī)控有了更加深刻的認(rèn)識(shí),各個(gè)功能有了更深的了解,熟悉運(yùn)用了CCS開(kāi)發(fā)軟件,整個(gè)過(guò)程有很多不是很清楚的地方,但是通過(guò)查資料的方式,問(wèn)題都迎刃而解,模電電路方面也有了很多提高,在調(diào)試電路方面也學(xué)到了很多東西,復(fù)習(xí)了模電知識(shí),還學(xué)到了很多相關(guān)的知識(shí)。但是我們也存在很多問(wèn)題,比如:
1.高拋方面在設(shè)置時(shí)間內(nèi)試了很多次,延時(shí)過(guò)長(zhǎng)會(huì)影響靈敏性。
2.模電方面焊接電路有些盲目,沒(méi)有想好布局,就很容易亂,所以總是拆電路,要吸取教訓(xùn),下次要細(xì)心想好布局,計(jì)算好數(shù)值。
3.有時(shí)候不要固定思維,要轉(zhuǎn)換一下思考方式,好多東西都能迎刃而解。


1、原件清單
原件
個(gè)數(shù)
LM430放大器
一個(gè)(四個(gè)運(yùn)放)
2.2μF電容
兩個(gè)
20K電阻
四個(gè)
20K滑動(dòng)變阻器
兩個(gè)
按鍵
一個(gè)
探針
若干
電路板
一個(gè)
導(dǎo)線
若干
杜邦線
若干

完整的Word格式文檔51黑下載地址:
msp430乒乓球游戲機(jī).doc (505.4 KB, 下載次數(shù): 10)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91九色麻豆 | 粉嫩av久久一区二区三区 | 国产高清精品一区二区三区 | 国产精品有限公司 | 9191在线播放 | 日韩视频免费看 | 好好的日在线视频 | 中文精品视频 | a在线视频 | 日本一二区视频 | 国户精品久久久久久久久久久不卡 | 99精品99久久久久久宅男 | 日日噜 | 91精品国产综合久久久久久丝袜 | 久久久久亚洲精品 | 亚洲最大的黄色网址 | 99精品国产一区二区青青牛奶 | 97久久久 | 天天干天天干 | 欧美一区二区三区在线播放 | 日本一区二区在线视频 | 看羞羞视频免费 | 久久精品色欧美aⅴ一区二区 | 国产精品免费av | 久久久九九九九 | 国产午夜精品一区二区三区嫩草 | 久久午夜精品 | 免费的一级视频 | 伊人狼人影院 | 国产美女精品 | 中文字幕日本一区二区 | 在线看片网站 | 欧美国产一区二区 | 在线免费观看成年人视频 | 久久午夜视频 | 在线视频国产一区 | 精品网站999 | 免费成人午夜 | 国产成人精品亚洲日本在线观看 | 天天干夜夜拍 | 我爱操|