目錄
一、實(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)生三角波的部分:
- if(w_ctl1==0)
- {
- TA1CCR1++;
- }
- if(w_ctl1==1)
- {
- TA1CCR1--;
- }
- 其中w_ctl1為一個(gè)標(biāo)志位,當(dāng)其為0時(shí)代表球往右移,當(dāng)其為1時(shí)代表球往左移。
- 產(chǎn)生拋物線的部分:
- int h=1;//曲率,雙擊時(shí)h=2
- TA1CCR2=h*y[j];//上升
- j=j+1;
- if(j==256) j=0;
- __delay_cycles(250000);
- 產(chǎn)生兩路PWM波的函數(shù)為
- void Set_PWM(void)//無(wú)需中斷輸出兩路PWM
- {
- //使用系統(tǒng)初始化時(shí)的默認(rèn)時(shí)鐘1MHz,定時(shí)器A1專(zhuān)門(mén)用于產(chǎn)生PWM 波形。
- TA1CTL = TASSEL_2 + MC_1 + ID_0;//使用系統(tǒng)次主機(jī)SMCLK、增計(jì)數(shù)模式、無(wú)分頻
- // TA1CCR0 = 256;//在16MHz的主頻率下,16*10^6/TA1CCR0
- TA1CCR0 = 800;//在16MHz的主頻率下,16*10^6/TA1CCR0
- TA1CCR1 = 0;
- TA1CCR2 = 0;
- TA1CCTL1 = OUTMOD_7;
- TA1CCTL2 = OUTMOD_7;
- P2SEL |= BIT1 + BIT5;//做第二功能使用(PWM輸出)
- P2DIR |= BIT1 + BIT5;//輸出
- }
復(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ā)送比分。