目录
一、实验目的
二、实验内容与步骤
2.1实验内容:
2.2实验步骤:
三、系统设计
3.1 总体设计
3.2硬件:
3.3软件:
四、软件单元电路设计
4.1 PWM波信号产生单元
4.2 串口发送模块
4.3 定时中断程序
4.4 按键中断模块
4.5 Flash模块
六、硬件单路整体外观与显示效果
显示效果
七、 个人感想
八、 参考文献 与 附录
8.1参考文献:
8.2附录:
8.3全部代码:
摘要
MSP430单片机通过两条I/O 信号输出两组脉宽调制波,经过低通滤波器提取脉宽调制的均值电压,输入到双通道示波器中。示波器工作在X/Y 模式。示波器屏幕上的光电代表乒乓球。乒乓球在X/Y 电压的控制下在屏幕上移动。
实验题目:采用MSP430G2553 实现乒乓球游戏机
一、实验目的1、通过此次实验掌握采用MSP430G2553编程的具体步骤;
2、串口编程中要掌握的包括串口的设置、串口的读写操作等;
3、熟悉模电硬件电路的设计与焊接;
4、掌握如何调试电路和软件编程的结合。
二、实验内容与步骤2.1实验内容:1.构造两组无源低通滤波器,使得msp430 可以用脉宽调制方式控制球的位置
2.用给定的运放制作一放大器,使光点运动范围在示波器的X 轴,Y 轴方向上可调
3.乒乓球可按抛物线自动在屏幕上左右弹射,球的落点为屏幕两侧边的中间
4.使用两个按钮分别作为左侧击球按钮和右侧击球钮。当乒乓球靠近屏幕左边时
按下左侧击球钮,可将球击回右侧。右侧击球钮亦然
5.建立成败机制。即球抵达边沿而未按下击球按钮,记为击球失败,用LED 灯光表示
6.建立记分机制,用串口在电脑上上显示双方得分
7.特殊功能,在不调整放大器的情况下,连按两下击球钮能击出高抛球,轨迹抛物线曲率变大
8.利用片内flash 加入比分断电自保存功能
2.2实验步骤:- 先确定方案和硬件电路设计图。
- 开始软件编程和硬件电路的焊接。
- 下载程序,进行调试,优化程序。
三、系统设计
3.1 总体设计
总体设计框图
3.2硬件: 杜邦线连接P1.3、P1.4口到两个按键,P2.1和P2.5分别是两个PWM波输出分别连接到两个低通滤波器,然后接放大器,最后输入到双通道显示示波器,XY挡。
硬件设计图
3.3软件:由单片机产生PWM波,写程序控制不同时间,给它不同的占空比,程序编写Flash程序,按键中断程序,串口发送程序。
四、软件单元电路设计4.1 PWM波信号产生单元由Grace定时器生成代码,用Timer1可以出两路PWM波,由MatLab生成抛物线码表,根据要求不同X位置付给Y不同码表,三角波由x随Y线性自增实现。
MatLab里生成抛物线的函数为
t=0:pi/4:201;
y=254*sin(pi/200.3*t);;%二次函数表达式(你改成自己的抛物线就行了)
stem(t,y);%画图
得到256个数,在CCS开头即可定义一个码表,即
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个数
产生三角波的部分:
- if(w_ctl1==0)
- {
- TA1CCR1++;
- }
- if(w_ctl1==1)
- {
- TA1CCR1--;
- }
- 其中w_ctl1为一个标志位,当其为0时代表球往右移,当其为1时代表球往左移。
- 产生抛物线的部分:
- int h=1;//曲率,双击时h=2
- TA1CCR2=h*y[j];//上升
- j=j+1;
- if(j==256) j=0;
- __delay_cycles(250000);
- 产生两路PWM波的函数为
- void Set_PWM(void)//无需中断输出两路PWM
- {
- //使用系统初始化时的默认时钟1MHz,定时器A1专门用于产生PWM 波形。
- TA1CTL = TASSEL_2 + MC_1 + ID_0;//使用系统次主机SMCLK、增计数模式、无分频
- // 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;//输出
- }
复制代码
4.2 串口发送模块串口发送同样由Grace生成,直接调用Send_char()函数
根据判断不同标志位,判断何时发送比分,若球到达两端,没有击球,则停在边缘,判断停在边缘则计数。计数值改变时发送比分。