355 基于单片机兵乓球游戏机仿真系统设计【毕设课设】

兵乓球游戏机设计任务为:

使用乒乓游戏

机的甲乙双方各在不同的位置发球或击球。
乒乓球的位置和移动方向由灯亮及依次点燃的方向决定,球移动的速度为0.1~1s移动一位。游戏者根据球的位置发出相应的动作,提前击球或出界均判失分。
比赛用11分为一局来进行,甲乙双方都应设置各自的记分牌,任何一方先记满11分,该方就算胜了此局。当记分牌清零后,又可开始新的一局比赛。
兵乓球游戏机设计概述:

        基于51单片机的乒乓游戏机设计,结果用LCD1602显示屏显示。软件方面,使用Keil uVision4进行编程。硬件设计包含单片机电路、模拟球台电路、按键电路、显示电路等电路的设计。软件设计包括:主程序、按键组程序(球拍模拟和暂停/开始子程序)、发球程序、线路程序(包括线路选择和LED点阵子程序)、回球程序、LCD显示程序。

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1KUdnyRgPf8Aw-tqIn0oh0A?pwd=8888

部分代码展示

#include<reg52.h>
#include"lcd1602.h"
sbit P1_7=P1^7;
sbit P1_6=P1^6;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;
void delay(int q);
void chang0(void);
void chang1(void);
void chang2(void);
void chang3(void);
void chang4(void);
void qiuquan(void);
void Ajiqiu(void);
void Bjiqiu(void);
void xianlu(void);
void huiqiu(void);
void Ahuiqiu(void);
void Bhuiqiu(void);
void Awin(void);
void Bwin(void);
void fuwei(void);
void delay_1(int t);
int a[10]={0,1,2,3,4,5,6,7,8,9};
int q[16]={11,10,9,8,12,13,14,15,131,130,129,128,132,133,134,135};//仿真
//int q[16]={9,13,11,15,8,12,10,14,129,133,131,135,128,132,130,134}; //实际
int b[16]={1164,1182,1437,1455,1710,1692,1983,1965,2112,2130,2385,2403,2658,2640,2931,2913};
int i1=0,i2=0,i3=0,i4=0,i=20,k=4,n=0,w=1,t,f=-1,x,m,s1,c1,s2,c2,v;
void main()
{	
	write_com(0x01);
	P2=0;
   	fuwei();
	EA=1;
	EX0=1;
	EX1=1;
	ET0=1;
	IT0=1;
	IT1=1;
	TMOD=0X01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	TR0=1;
	qiuquan();
	while(1)
	{	
	int t=1000+w*1000;
	P2=q[n];
	delay_1(t);
	xianlu();
	}
}
void ex0(void) interrupt 0
{
		 
}
 void it0(void) interrupt 1
{


	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	i--;
		if(P1_0==0)
		{
		while(P1_0==0);
		chang0();
		i=20; 
		} 
	 c1=P0_0&&P0_1&&P0_2;
	 c2=P0_4&&P0_5&&P0_6;
		if(n<8&&!c1&&v)
		  Ahuiqiu();
		else if(n>=8&&!c2&&v)
		  Bhuiqiu();

}
  
//暂停模块
void ex1(void)interrupt 2
{
	  if(P1_1==0)
	  {
	  P1_7=1;
	  chang0();
	   }
	
	 
} 
void chang0(void)
{
   	  P1_7=1;
  while(1)
   {
	  if(P1_1==0)
	  {
	  	 P1_7=0;
		return;
	  }
   }  
}
//回球模块
void delay_1(int t) 
{    int z;  
for(;t>0;t--)     
     for(z=50;z>0;z--)
	 {	

	 }     
}
//A回球
void Ahuiqiu(void)
{w=P0_3;
//D2 
 if(n==0)
 {
 if(x==13&&!P0_0)
 {
 if(!w)
 x=3;
 else
 x=0;
 while(!P0_0) ;
 m=b[x];
 }
   if(x==8)
 {
 if(!P0_0)
{ x=3;
 while(!P0_0);
 m=b[x];}
 else if(!P0_1)
   { x=0;
 while(!P0_1);
 m=b[x];}
 }
}
//D3
 else if(n==1)
 {
 if(x==10&&!P0_1)
 {
 x=2;
 while(!P0_1) ;
 m=b[x];
 }
 else if(x==15&&!P0_0)
 {
 x=2;
 while(!P0_1);
  m=b[x];
 }
} 
 //D4
 else if(n==2)
 {
 if(x==12&&!P0_1)
 {
 x=4;
 while(P0_1);
 m=b[x];
 }
 else if(x==9&&!P0_0)
 {
 if(!w)
 x=4;
 while(!P0_1);
 m=b[x];
 }
} 
//D5
 else  if(n==3)
 {
 if(x==11&&!P0_2)
 {
 if(!w)
 x=5;
 else
 x=6;
 while(!P0_2) ;
 m=b[x];
 }
  else if(x==14)
 {
 if(!P0_2)
{ x=5;
 while(!P0_2);
 m=b[x];}
 else if(!P0_1)
   { x=6;
 while(!P0_1);
 m=b[x];}
 }
}
//D6
 if(n==4)
 {
   if(x==8)
 {
 if(!P0_0)
{ x=1;
 while(!P0_0);
 m=b[x]%256;}
 else if(!P0_1)
   { x=0;
 while(!P0_1);
 m=b[x]%256;}
 }
 }

//D7
  else if(n==5)
 {
   if(x==10)
 {
 if(!P0_0)
{ x=3;
 while(!P0_0);
 m=b[x]%256;}
 else if(!P0_1)
   { x=2;
 while(!P0_1);
 m=b[x]%256;}
 }
  else if(x==13&&!P0_0)
 {
 x=2;
 while(!P0_0) ;
 m=b[x]%256;
 }
 }
 //D8
 else  if(n==6)
 {
 if(x==11&&!P0_2)
 {
 if(!w)
 x=5;
 else
 x=4;
 while(!P0_2) ;
 m=b[x]%256;
 }
  else if(x==12)
 {
 if(!P0_2)
{ x=5;
 while(!P0_2);
 m=b[x]%256;}
 else if(!P0_1)
   { x=4;
 while(!P0_1);
 m=b[x]%256;}
 }
}
//D9
 if(n==7)
 {
   if(x==14)
 {
 if(!P0_2)
{ x=7;
 while(!P0_2);
 m=b[x]%256;}
 else if(!P0_1)
   { x=6;
 while(!P0_1);
 m=b[x]%256;}
 }
 }
	//else
	//chang3();
	return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值