⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机乒乓球游戏机 可以再proteus仿真
💻 C
📖 第 1 页 / 共 2 页
字号:
		 a[gamenum.game1]=gamenum.mark1;
		 b[gamenum.game1]=gamenum.mark2;
		 gamenum.game2++;
		 gamenum.mark1=0;
 		 gamenum.mark2=0;
		 put_chinese(chinese[21],0,64,1);
         put_chinese(chinese[13],0,80,1);
		 enter();LCD_CLR(R);
	    }	 
   if(gamenum.game2>=2) {flag=1;break;}
   else if(gamenum.game1>=2) {flag=0;break;}
   }
   infoflash(a,b,flag);
   Delay_x10ms(1000);
   return 1;
 }

uchar Read_P2()
{
  P2=0xFF;
  return(P2&0x0F);
}
void infoflash(uchar* a,uchar* b,uchar flag)
{
   uchar i;
   put_picture_half(Bmp1,R);
   LCD_CLR(L);
   put_chinese(chinese[20],4,0,0);//甲
   put_chinese(chinese[21],6,0,0);//乙
   if(flag)  put_chinese(chinese[21],0,8,1);
   else put_chinese(chinese[20],0,8,1);
   put_chinese(chinese[13],0,24,1);put_chinese(chinese[14],0,40,1);//shengli
   put_num(num10[1],2,20,1);
   put_num(num10[2],2,36,1);
   put_num(num10[3],2,52,1);
   for(i=0;i<3;i++){
		if(a[i]>9)
		  put_num(num10[1],4,16+i*16,0);//甲
		else put_num(num10[0],4,16+i*16,0);
		if(a[i]>9)
		  put_num(num10[a[i]-10],4,16+i*16+8,0);
		else put_num(num10[a[i]],4,16+i*16+8,0);
		if(b[i]>9)
		  put_num(num10[1],6,16+i*16,0);//乙
		else put_num(num10[0],6,16+i*16,0);
		if(b[i]>9)
		  put_num(num10[b[i]-10],6,16+i*16+8,0);
		else put_num(num10[b[i]],6,16+i*16+8,0);}
   enter();
}
void double_modle_1(uchar send_id)
{
    uchar state=0;
	bit moveflag;
    uchar direction;
	put_chinese(chinese[17],4,24,0);//发球
	put_chinese(chinese[16],4,40,0);
	P3=0xFF;
	switch(send_id)
	{
	 case 0://甲1发球
	       moveflag=P3^4;
		   if(moveflag) direction=2;
		   else direction=0;
           put_num(num10[10],0,53,0);//甲
		   put_num(num10[11],2,53,0);
		   put_chinese(chinese[20],4,0,0);
           put_num(num10[1],4,16,0);
		   do
		   {
			button=Read_P2();
		   }while(!(button==0x04));
	       break;
	 case 1://甲2发球
	       moveflag=P3^4;
		   if(moveflag) direction=5;
		   else direction=6;
           put_num(num10[10],0,53,0);//甲
		   put_num(num10[11],2,53,0);
		   put_chinese(chinese[20],4,0,0);
		   put_num(num10[2],4,16,0);
		   do
		   {
			 button=Read_P2();
		   }while(!(button==0x08));
		   break;
	 case 2://乙1发球
	       moveflag=P3^7;
		   if(moveflag) direction=4;
		   else direction=1;
           put_num(num10[10],2,53,0);//乙
		   put_num(num10[11],0,53,0);
		   put_chinese(chinese[21],4,0,0);
		   put_num(num10[1],4,16,0);
		   do
		   {
			 button=Read_P2();
		   }while(!(button==0x02));
		   break;
	 case 3://乙2发球
	       moveflag=P3^7;
		   if(moveflag) direction=3;
		   else direction=7;
           put_num(num10[10],2,53,0);//乙
		   put_num(num10[11],0,53,0);
		   put_chinese(chinese[21],4,0,0);
		   put_num(num10[2],4,16,0);
		   do
		   {
			 button=Read_P2();
		   }while(!(button==0x01));
		   break;
	}
    while(!state)
	{
	    
	    switch(direction)
		{
	      case 0:
		         state=Ball_MoveP(0x03,1,0,speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=4;
					  else direction=1;
					  break;
					//case 1://甲犯规,乙得分  
					//	gamenum.mark2++;
		            //   put_chinese(chinese[20],6,10,1);
					//	break;
					case 2://乙犯规,甲得分 
						gamenum.mark1++;
						put_chinese(chinese[21],6,10,1);//yi
						break;
				 } 
				 break;
	      case 1:
		         state=Ball_MoveP(0x03,0,0,speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=2;
					  else direction=0;
					  break;
					case 1://甲犯规,乙得分  
						gamenum.mark2++;
		                put_chinese(chinese[20],6,10,1);//jia
						break;
					//case 2://乙犯规,甲得分 
					//	gamenum.mark1++;
					//	put_chinese(chinese[21],6,10,1);
					//	break;
				 }
				 break;
		  case 2:
		         state=Ball_MoveRightDown(speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=3;
					  else direction=7;
					  break;
					//case 1://甲犯规,乙得分  
					//	gamenum.mark2++;
		            //    put_chinese(chinese[20],6,10,1);
					//	break;
					case 2://乙犯规,甲得分 
						gamenum.mark1++;
						put_chinese(chinese[21],6,10,1);//yi
						break;
				 }
				 break;
	   	  case 3:
		         state=Ball_MoveLeftUp(speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=2;
					  else direction=0;
					  break;
					case 1://甲犯规,乙得分  
						gamenum.mark2++;
		                put_chinese(chinese[20],6,10,1);
						break;
					//case 2://乙犯规,甲得分 
					//	gamenum.mark1++;
					//	put_chinese(chinese[21],6,10,1);
					//	break;
				 }
				 break;
		  case 4:
		         state=Ball_MoveLeftDown(speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=5;
					  else direction=6;
					  break;
					case 1://甲犯规,乙得分  
						gamenum.mark2++;
		                put_chinese(chinese[20],6,10,1);
						break;
					//case 2://乙犯规,甲得分 
					//	gamenum.mark1++;
					//	put_chinese(chinese[21],6,10,1);
					//	break;
				 }
				 break;
		  case 5:
		         state=Ball_MoveRightUp(speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=4;
					  else direction=1;
					  break;
					//case 1://甲犯规,乙得分  
					//	gamenum.mark2++;
		            //    put_chinese(chinese[20],6,10,1);
					//	break;
					case 2://乙犯规,甲得分 
						gamenum.mark1++;
						put_chinese(chinese[21],6,10,1);
						break;
				 }
				 break;
		  case 6:
		         state=Ball_MoveP(0xc0,1,7,speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=3;
					  else direction=7;
					  break;
					//case 1://甲犯规,乙得分  
					//	gamenum.mark2++;
		            //    put_chinese(chinese[20],6,10,1);
					//	break;
					case 2://乙犯规,甲得分 
						gamenum.mark1++;
						put_chinese(chinese[21],6,10,1);
						break;
				 }
				 break;
		  case 7:
		         state=Ball_MoveP(0xc0,0,7,speed);
				 P3=0xFF;
                 moveflag=P3^7;
				 switch(state)
				 {
					case 0:
					  if(moveflag) direction=5;
					  else direction=6;
					  break;
					case 1://甲犯规,乙得分  
						gamenum.mark2++;
		                put_chinese(chinese[20],6,10,1);
						break;
					//case 2://乙犯规,甲得分 
					//	gamenum.mark1++;
					//	put_chinese(chinese[21],6,10,1);
					//	break;
				 }
				 break;
		}

    }
    put_chinese(chinese[18],6,26,1);//犯规
    put_chinese(chinese[19],6,42,1);
}
/*******************************
单人游戏
********************************/
uchar singlaplay()
{
   uchar i,flag;
   uchar a[3]={0,0,0},b[3]={0,0,0};
   send_num singlaplay_send={0,0,0};//默认开始甲发球
   LCD_CLR(L);LCD_CLR(R);
   //画边框
   for(i=0;i<8;i++){//球与信息分割线
    LCD_WriteData(0xFF,i,63);}
   for(i=0;i<64;i++){//上线
    LCD_WriteData(0x03,0,64+i);}
   for(i=0;i<64;i++){//下线
    LCD_WriteData(0xc0,7,64+i);}
   for(i=0;i<8;i++){
    LCD_WriteData(0xFF,i,127);}//右边线

   put_chinese(chinese[20],0,4,0);//甲
   put_chinese(chinese[21],2,4,0);//乙
   for(;;){

    infodisplay();
    singlaplay_send=send_ball(singlaplay_send);
    singla_modle_1(singlaplay_send.send_id);
    infodisplay();
	//比分局分控制
    if((gamenum.mark1>=11)&&((gamenum.mark1-gamenum.mark2)>=2))
	    {
		 a[gamenum.game1]=gamenum.mark1;
		 b[gamenum.game1]=gamenum.mark2;
		 gamenum.game1++;
		 gamenum.mark1=0;
 		 gamenum.mark2=0;
		 singlaplay_send.send1=0;
		 singlaplay_send.send2=0;
		 put_chinese(chinese[20],0,64,1);
         put_chinese(chinese[13],0,80,1);
		 enter();LCD_CLR(R);
		 }
	  else if((gamenum.mark2>=11)&&((gamenum.mark2-gamenum.mark1)>=2))
 	    {
		 a[gamenum.game1]=gamenum.mark1;
		 b[gamenum.game1]=gamenum.mark2;
		 gamenum.game2++;
		 gamenum.mark1=0;
 		 gamenum.mark2=0;
		 singlaplay_send.send1=0;
		 singlaplay_send.send2=0;
		 put_chinese(chinese[21],0,64,1);
         put_chinese(chinese[13],0,80,1);
		 enter();LCD_CLR(R);
	    }	 
   if(gamenum.game2>=2) {flag=1;break;}
   else if(gamenum.game1>=2) {flag=0;break;}
   }

   infoflash(a,b,flag);
   Delay_x10ms(1000);
   return 1;
}
void enter()
{
   do{
      button=P2&0xF0;
   }while(!(button==ENTER));
}


void int0() interrupt 0 using 1
{  
   P2=0xFF;
   buttonplay=1;
   button=P2&0x0F;
}

/*******************************
发球控制。换发球每人两个
********************************/

send_num send_ball(send_num singlaplay_send)
{
  if(singlaplay_send.send2==2) {singlaplay_send.send_id=0;singlaplay_send.send2=0;}
  if(singlaplay_send.send1==2) {singlaplay_send.send_id=1;singlaplay_send.send1=0;}

  if(singlaplay_send.send_id) singlaplay_send.send2++;
  else singlaplay_send.send1++;

  return singlaplay_send;
}

/*******************************
单人游戏-----
********************************/
void singla_modle_1(uchar send_id)
{
    uchar state=0;
    uchar direction;
	put_chinese(chinese[17],4,26,0);//发球
	put_chinese(chinese[16],4,42,0);
	switch(send_id)
	{
	 case 0://甲发球
		   direction=1;
           put_num(num10[10],0,53,0);//甲
		   put_num(num10[11],2,53,0);
		   put_chinese(chinese[20],4,10,0);
		   do//yifa
		   {
			 button=Read_P2();
		   }while(!(button==0x04));
	       break;
	 case 1://乙发球
		   direction=0;
           put_num(num10[10],2,53,0);//乙
		   put_num(num10[11],0,53,0);
		   put_chinese(chinese[21],4,10,0);
		   do//jiafa
		   {
			button=Read_P2();
		   }while(!(button==0x02));
		   break;
	}
	while(!state)
	 {
		state=Ball_MoveP(0x18,direction,3,speed);
		switch(state)
		{
			case 0:
			  if(direction==0) direction=1;
			  else direction=0;
			  break;
			case 1://甲犯规,乙得分  
				gamenum.mark2++;
                put_chinese(chinese[20],6,10,1);
				break;
			case 2://乙犯规,甲得分 
				gamenum.mark1++;
				put_chinese(chinese[21],6,10,1);
				break;
		}
		put_chinese(chinese[18],6,26,1);//犯规
		put_chinese(chinese[19],6,42,1);
     }
}

void infodisplay()
{
    put_num(num10[gamenum.game1],0,24,1);//局分甲
	put_num(num10[gamenum.game2],2,24,1);//局分乙
	if(gamenum.mark1>9)
	  put_num(num10[1],0,36,0);
	else put_num(num10[0],0,36,0);

	if(gamenum.mark1>9)
	  put_num(num10[gamenum.mark1-10],0,44,0);
	else put_num(num10[gamenum.mark1],0,44,0);

	if(gamenum.mark2>9)
	  put_num(num10[1],2,36,0);
	else put_num(num10[0],2,36,0);

	if(gamenum.mark2>9)
	  put_num(num10[gamenum.mark2-10],2,44,0);
	else put_num(num10[gamenum.mark2],2,44,0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -