职场文秘网

首页 > 文秘写作 > 谈判技巧 / 正文

基于单片机的乒乓球游戏系统的设计

2020-11-06 03:01:35

 

 基于单片机的乒乓球游戏系统的设计

 姓

 名:

 学

 号:

 专业班级:

  院(系):

  设计时间:

  设计地点:

  指导教师评语:

  成绩:

 签名:

  年

 月

  日

 目录

  一、 题目要求…………………………………………………………………………

 二、 方案设计…………………………………………………………………………

 三、 硬件原理…………………………………………………………………………

 四、 软件设计…………………………………………………………………………

 五、 结论与体会………………………………………………………………………

  附:硬件原理图

  基于单片机的乒乓球游戏系统的设计 一、题目要求 以STC12C5410AD单片机为核心设计一款“乒乓球游戏机”。用8支连续排列的发光二极管,通过发光二极管的依次点亮代表乒乓球的运动。再用2个按键模拟左右2个球拍,键按下代表球拍击球。“左拍”按下可使发光二极管从左向右依次点亮,模拟乒乓球从左向右飞来;反之,“右拍”按下则可使发光二极管从右向左依次点亮,代表球从右向左运动。

 本游戏供两人玩,以一方按键(发球)开始,这时乒乓球就向对方运动,接球方应在乒乓球到达终点之前击球。如果击球时机合适,则把球击回,否则就算失误,由对方重新发球。在游戏过程中用LED数码管显示双方比分。

 二、方案设计 (1) 本游戏开始时球在左方甲手中,数码管显示双方最初比分00。

 (2)当甲方按下按键T1时,球开始往右边移动,此时8位LED灯从左至右逐次点亮。乒乓球移动速度是固定的,每0.5S左右的速度移动一位。

  (3)若接球方乙提前或迟后按下按键T2击球,则判已失误,由甲得分,乒乓球停止运动(发光二极管熄灭),数码管显示得分。球重新回到甲手中,由甲方再次发球,游戏进入下一回合。

 (4)若接球方乙击球时机合适,即在LED灯到达最右端之前按下按键T2,则把球击回,LED灯即刻以0.5S每位左右的速度从右向左依次移动,等待甲方接球。若甲方接球失误,则判乙方得分,乒乓球停止运动(LED灯灭),数码管显示得分。球回到乙方手中,由乙方发球,游戏继续,开始进入下一回合。

 (5)当甲乙中有一人得分为9后,游戏进入下一轮,得分较少方一端的LED灯亮,数码管重新显示00。此时发球权交给在上轮比赛中落后(得分较少)的一方,当其按下按键后下一轮游戏正式开始。

 三、硬件原理 1.STC12C5410AD单片机的主电路 a

 复位电路

 复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图3.1.a所示。

  图3.1.a

 复位电路

 b

 振荡电路 单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容一般取30Pf)这样就构成了一个稳定的自激振荡器,振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。

 振荡电路如图3.1.b所示:

 图3.1.b

 晶体振荡电路

  2. LED灯接口电路 8个LED灯的阳极与电源相连,阴极通过限流电阻与单片机的P1口相连,当单片机的P1口为低电平时,相应LED灯就被点亮,而当为高电平时相应LED灯就表现为熄灭状态。其接口电路如图3.2所示

  图3.2

 LED灯接口电路 3. LED数码管显示电路 LED数码显示管的数据段通过限流电阻分别与单片机的P2口相接,位选段分别接NPN三极管的两个集电极,三极管的两个发射极共地,基极通过限流电阻分别与P3.2、P3.3相接。其硬件电路如图3.3所示

  图3.3

  LED数码管显示电路

 4.

 按键设定电路 独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。本设计中键盘接口电路如图3.4所示:

  图3.4 按键设定电路 四、软件设计 软件设计流程图大体为:

  开始 初始化 按键K1(甲发球) K2适时? N Y 显示甲得分 K1适时? 显示乙得分 N 按键K2(乙发球) Y 乙得分为9? Y N 甲得分为9? Y N

 软件设计原代码为:

 #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define led P1 #define shuma P2

 sbit k1=P3^0; sbit k2=P3^1; sbit dig1=P3^2; sbit dig2=P3^3;

 uchar code table[]={ 0x3f,0x06,0x5b,0x4f,

 0x66,0x6d,0x7d,0x07,

 0x7f,0x6f,0x77,0x7c,

 0x39,0x5e,0x79,0x71

 };

 uchar flag1,flag2,pair1,pair2,score1,score2,wait;

 void delay(uint); void ledmove(); void keyscan(); void score(); void showscore();

  void delay(uint time) {

 uint i,j;

  for(i=time;i>0;i--)

  for(j=100;j>0;j--); }

 void main() { A0: led=0x7f;

 score1=0;

 score2=0;

 flag1=0;

 flag2=0;

 dig1=1;

 dig2=1;

 shuma=table[0];

 delay(2000);

  B0: while(1)

 {

  keyscan();

  ledmove();

 score();

 showscore();

 if(score1==9||score2==9)

 {

 break;

  }

 }

  if(score2==9)

  {

  showscore();

 delay(1000);

  goto A0;

 }

 if(score1==9)

 {

  showscore();

 delay(1000);

 led=0xfe;

  score1=0;

 score2=0;

 flag1=0;

 flag2=0;

 dig1=1;

 dig2=1;

 shuma=table[0];

 delay(2000);

 goto B0;

 } }

 void ledmove() {

 if((led==0x7f)&&(pair1==1))

 {

  flag1=1;

  flag2=0;

 }

  if(flag1==1)

 {

  led=(led>>1)|(0x80);

  delay(300);

  wait=1;

 }

  if((led==0xfe)&&(pair2==1))

 {

  flag2=1;

  flag1=0;

 }

  if(flag2==1)

 {

  led=(led<<1)|(0x01);

  delay(300);

  wait=1;

 }

 }

 void keyscan() {

 if(k1==0)

 {

  delay(20);

  if(k1==0)

  {

 pair1=1;

  }

  else pair1=0;

 }

 else pair1=0;

  if(k2==0)

 {

  delay(20);

  if(k2==0)

  {

 pair2=1;

  }

  else pair2=0;

 }

 else pair2=0;

 }

 void score() {

 if((led==0xfe)&&(pair2==0)&&(wait==1))

  {

  score1++;

  led=0x7f;

  flag1=0;

  flag2=0;

  wait=0;

 }

  if((led==0x7f)&&(pair1==0)&&(wait==1))

 {

  score2++;

 led=0xfe;

  flag1=0;

  flag2=0;

  wait=0;

 } }

  void showscore() {

 dig1=1;

 dig2=0;

 shuma=table[score1];

 delay(20);

  dig1=0;

 dig2=1;

 shuma=table[score2];

 delay(20);

 }

  五、结论与体会 本设计的乒乓球游戏系统是由STC单片机、共阴数码显示管、控制按键、三极管等器件构成的,设有双位数据显示、两个游戏按键以及一个系统整机复位按钮。设计精简,使用简单易懂。系统设计合理,线路简单、功能先进,性能稳定,程序精简。并给出了详细的电路设计方法。本系统是以单片机为核心,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

 通过一个星期的努力,我终于完成了单片机的课程设计。在设计的过程中,我发现了自身的许多不足,比如自己的编程能力薄弱,软件不够熟悉、焊接技术有待提高等等。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的,更重要的是如何把自己平时所学的东西应用到实际中。通过这次课程设计,加强了我们动手、思考和解决问题的能力。通过本次设计,复习巩固我们以前所学习的数电、模电、单片机原理及应用等课程知识,加深对各门课程及相互关系的理解,并成功使用了Wave、Protel 2004和Proteus三款电子软件,使理论知识系统化、实用化,系统地掌握微机应用系统的一般设计方法,培养较强的编程能力、开发能力。

 在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。动手实践让我们对各个元件各个单元的组成及其相应的功能映象深刻。认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个课程设计对我的作用是非常大的。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

 最后衷心感谢老师的悉心授课和同学门的热心帮助!

  附:基于单片机的乒乓球游戏系统的硬件设计原理图

 

Tags:

搜索
网站分类
标签列表