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

📄 main.lst

📁 基于at89c52的乒乓球游戏系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 312   3         }
 313   2         LCD_WriteData(0x00,i-1,64+i*8-j+2);
 314   2         LCD_WriteData(0x00,i-1,64+i*8-j+1);
 315   2      
 316   2       }
 317   1       return 1;
 318   1      }
 319          
 320          //=============================================
 321          //斜线移动:向右下移动  
 322          //============================================= 
 323          uchar Ball_MoveRightDown(uint speed)
 324          {
 325   1        uchar i,j,wdata;
 326   1        for(i=0;i<8;i++)//向右下移动
 327   1        {
 328   2         wdata=0x03;
 329   2         for(j=0;j<8;j+=2)
 330   2         {
 331   3          if(j)
 332   3                {
 333   4            LCD_WriteData(0x00,i,64+i*8+j-2);//CLR
 334   4            LCD_WriteData(0x00,i,64+i*8+j-1);
 335   4                }
 336   3          LCD_WriteData(wdata,i,64+i*8+j);
 337   3          LCD_WriteData(wdata,i,64+i*8+j+1);
 338   3          wdata=wdata<<2;
 339   3          Delay_x10ms(speed*10);
 340   3              if(i==7&&j>=4) j=10;
 341   3              pause();
 342   3         }
 343   2         if(buttonplay)
 344   2           {
 345   3                      buttonplay=0;
 346   3                  if((button==0x04)&&(i>=7)) return 0; //p2.0
 347   3                  else if(button==0x04||button==0x08) return 2;
 348   3              }
 349   2         LCD_WriteData(0x00,i,64+i*8+j-2);
 350   2         LCD_WriteData(0x00,i,64+i*8+j-1);
 351   2        }
 352   1        return 2;
 353   1      }
 354          
 355          //=============================================
 356          //水平移动 
 357          //0:-->
 358          //1:<--
 359          //============================================= 
 360          uchar Ball_MoveP(uchar Data,uchar direction,uchar hang,uint speed,uchar value)
 361          { 
 362   1        int i;
 363   1        if(direction)
 364   1          {
 365   2                for(i=0;i<62;i++)//-->
C51 COMPILER V7.06   MAIN                                                                  10/03/2008 17:28:23 PAGE 7   

 366   2                { 
 367   3                  if(i){
 368   4                        LCD_WriteData(0,hang,64+i-2);LCD_WriteData(0,hang,64+i-1);}
 369   3             if(buttonplay)
 370   3                {
 371   4                            buttonplay=0;
 372   4                            if((button==value)&&(i>=51)) return 0; 
 373   4                                else if(button==value) return 2;
 374   4                        }
 375   3                  LCD_WriteData(Data,hang,64+i);LCD_WriteData(Data,hang,64+i+1);
 376   3                  Delay_x10ms(speed*10);
 377   3                      i++;
 378   3                      pause();
 379   3                }
 380   2                LCD_WriteData(0,hang,64+i-2);LCD_WriteData(0,hang,64+i-1);
 381   2                return 2;
 382   2          }
 383   1        else
 384   1          {
 385   2                for(i=62;i>0;i--)//<--
 386   2                { 
 387   3                  if(i!=62){
 388   4                        LCD_WriteData(0,hang,64+i+2);LCD_WriteData(0,hang,64+i+1);}
 389   3                      if(buttonplay)
 390   3                {
 391   4                            buttonplay=0;
 392   4                            if((button==value)&(i<=10))  return 0;
 393   4                                else if(button==value)      return 1;
 394   4                        }
 395   3                  LCD_WriteData(Data,hang,64+i);LCD_WriteData(Data,hang,64+i-1);
 396   3                  Delay_x10ms(speed*10);
 397   3                      i--;
 398   3                      pause();
 399   3                }
 400   2                LCD_WriteData(0,hang,64+i+2);LCD_WriteData(0,hang,64+i+1);  
 401   2                return 1;
 402   2          }
 403   1      }
 404          
 405          void Delay_x10ms(uchar DelayTime)   //*******ms延时*****//
 406          {
 407   1             unsigned char i,j,k;
 408   1             for(i=0;i<DelayTime;i++){
 409   2                if(buttonplay) break;
 410   2                for(j=0;j<10;j++){
 411   3                   if(buttonplay) break;
 412   3                   for(k=0;k<45;k++) {if(buttonplay) break;}
 413   3             }  }
 414   1      }
 415          
 416          /*******************************
 417          双人游戏
 418          ********************************/
 419          uchar doubleplay()
 420          {
 421   1         uchar i,flag,sendball=0,j=0;
 422   1         uchar a[3]={0,0,0},b[3]={0,0,0};
 423   1         LCD_CLR(L);LCD_CLR(R);
 424   1         //画边框
 425   1         for(i=0;i<8;i++){//球与信息分割线
 426   2            LCD_WriteData(0xFF,i,63);}
 427   1         for(i=1;i<7;i++){
C51 COMPILER V7.06   MAIN                                                                  10/03/2008 17:28:23 PAGE 8   

 428   2            LCD_WriteData(0xFF,i,127);}//右边线
 429   1         put_chinese(chinese[20],0,4,0);//甲
 430   1         put_chinese(chinese[21],2,4,0);//乙
 431   1         for(;;)  {
 432   2          LCD_CLR(R);
 433   2              LCD_WriteData(0xFF,0,127);
 434   2              LCD_WriteData(0xFF,7,127);
 435   2              for(i=0;i<8;i++){//球与信息分割线
 436   3            LCD_WriteData(0xFF,i,63);}
 437   2          for(i=0;i<8;i++){
 438   3            LCD_WriteData(0xFF,i,127);}//右边线
 439   2          infodisplay();
*** WARNING C209 IN LINE 439 OF MAIN.C: 'infodisplay': too few actual parameters
 440   2          if(double_modle_1(sendball)) return 1;
 441   2              sendball++;
 442   2              if(sendball>=4) sendball=0;
 443   2          infodisplay();
*** WARNING C209 IN LINE 443 OF MAIN.C: 'infodisplay': too few actual parameters
 444   2              //比分局分控制
 445   2          if((gamenum.mark1>=11)&&((gamenum.mark1-gamenum.mark2)>=2))
 446   2                  {
 447   3                       a[j]=gamenum.mark1;
 448   3                       b[j]=gamenum.mark2;
 449   3                       gamenum.game1++;
 450   3                       gamenum.mark1=0;
 451   3                       gamenum.mark2=0;
 452   3                       put_chinese(chinese[20],0,64,1);
 453   3               put_chinese(chinese[13],0,80,1);
 454   3                       enter();LCD_CLR(R);j++;
 455   3                       }
 456   2                else if((gamenum.mark2>=11)&&((gamenum.mark2-gamenum.mark1)>=2))
 457   2                  {
 458   3                       a[j]=gamenum.mark1;
 459   3                       b[j]=gamenum.mark2;
 460   3                       gamenum.game2++;
 461   3                       gamenum.mark1=0;
 462   3                       gamenum.mark2=0;
 463   3                       put_chinese(chinese[21],0,64,1);
 464   3               put_chinese(chinese[13],0,80,1);
 465   3                       enter();LCD_CLR(R);j++;
 466   3                  }    
 467   2         if(gamenum.game2>=2) {flag=1;break;}
 468   2         else if(gamenum.game1>=2) {flag=0;break;}
 469   2         }
 470   1         infoflash(a,b,flag);
 471   1         Delay_x10ms(1000);
 472   1         return 1;
 473   1       }
 474          
 475          uchar Read_P2()
 476          {
 477   1        P2=0xFF;
 478   1        return(P2&0x0F);
 479   1      }
 480          
 481          void infoflash(uchar* a,uchar* b,uchar flag)
 482          {
 483   1         uchar i;
 484   1         put_picture_half(Bmp1,R);
 485   1         LCD_CLR(L);
 486   1         put_chinese(chinese[20],4,0,0);//甲
 487   1         put_chinese(chinese[21],6,0,0);//乙
C51 COMPILER V7.06   MAIN                                                                  10/03/2008 17:28:23 PAGE 9   

 488   1         if(flag)  put_chinese(chinese[21],0,8,1);
 489   1         else put_chinese(chinese[20],0,8,1);
 490   1         put_chinese(chinese[13],0,24,1);put_chinese(chinese[14],0,40,1);//shengli
 491   1      
 492   1         put_num(num10[1],2,20,1);
 493   1         put_num(num10[2],2,36,1);
 494   1         put_num(num10[3],2,52,1);
 495   1      
 496   1         for(i=0;i<3;i++){
 497   2                      if(a[i]>9)
 498   2                        put_num(num10[1],4,16+i*16,0);//甲
 499   2                      else put_num(num10[0],4,16+i*16,0);
 500   2                      if(a[i]>9)
 501   2                        put_num(num10[a[i]-10],4,16+i*16+8,0);
 502   2                      else put_num(num10[a[i]],4,16+i*16+8,0);
 503   2      
 504   2                      if(b[i]>9)
 505   2                        put_num(num10[1],6,16+i*16,0);//乙
 506   2                      else put_num(num10[0],6,16+i*16,0);
 507   2                      if(b[i]>9)
 508   2                        put_num(num10[b[i]-10],6,16+i*16+8,0);
 509   2                      else put_num(num10[b[i]],6,16+i*16+8,0);}
 510   1         enter();
 511   1      }
 512          uchar double_modle_1(uchar send_id)
 513          {
 514   1          uchar state=0,value;
 515   1          uchar direction;
 516   1              put_chinese(chinese[17],4,24,0);//发球
 517   1              put_chinese(chinese[16],4,40,0);
 518   1              P3=0xFF;
 519   1              switch(send_id)
 520   1              {
 521   2               case 0://甲1发球
 522   2                 put_num(num10[10],0,53,0);//甲
 523   2                         put_num(num10[11],2,53,0);
 524   2                         put_chinese(chinese[20],4,0,0);
 525   2                 put_num(num10[1],4,16,0);
 526   2                         do
 527   2                         {
 528   3                              button=Read_P2();
 529   3                              pause();
 530   3                              if(pauseflag==EXIT) return 1;
 531   3                         }while(!(button==0x01));
 532   2                         if(moveflag==ENTER) direction=0;
 533   2                         else direction=2;
 534   2                     break;
 535   2               case 1://甲2发球
 536   2                 put_num(num10[10],0,53,0);//甲
 537   2                         put_num(num10[11],2,53,0);
 538   2                         put_chinese(chinese[20],4,0,0);
 539   2                         put_num(num10[2],4,16,0);
 540   2                         do
 541   2                         {
 542   3                               button=Read_P2();
 543   3                               pause();
 544   3                              if(pauseflag==EXIT) return 1;
 545   3                         }while(!(button==0x02));
 546   2                         if(moveflag==ENTER) direction=6;
 547   2                         else direction=5;
 548   2                         break;
 549   2               case 2://乙1发球
C51 COMPILER V7.06   MAIN                                                                  10/03/2008 17:28:23 PAGE 10  

 550   2                         direction=4;
 551   2                 put_num(num10[10],2,53,0);//乙
 552   2                         put_num(num10[11],0,53,0);
 553   2                         put_chinese(chinese[21],4,0,0);
 554   2                         put_num(num10[1],4,16,0);
 555   2                         do
 556   2                         {
 557   3                               button=Read_P2();
 558   3                               pause();
 559   3                               if(pauseflag==EXIT) return 1;
 560   3                         }while(!(button==0x08));
 561   2                         if(moveflag==UP) direction=1;
 562   2                         else direction=4;
 563   2                         break;
 564   2               case 3://乙2发球
 565   2                 put_num(num10[10],2,53,0);//乙
 566   2                         put_num(num10[11],0,53,0);
 567   2                         put_chinese(chinese[21],4,0,0);
 568   2                         put_num(num10[2],4,16,0);
 569   2                         do
 570   2                         {
 571   3                               button=Read_P2();
 572   3                               pause();
 573   3                               if(pauseflag==EXIT) return 1;
 574   3                         }while(!(button==0x04));
 575   2                         if(moveflag==UP) direction=7;
 576   2                         else direction=3;
 577   2                         break;
 578   2              }
 579   1      
 580   1          while(!state)
 581   1              {
 582   2                  moveflag=0;
 583   2                  if(direction==1) value=0x01;
 584   2                  else if(direction==0) value=0x08;
 585   2                      else if(direction==6) value=0x04;
 586   2                      else if(direction==7) value=0x02;
 587   2                  switch(direction)
 588   2                      {
 589   3                    case 0:
 590   3                               state=Ball_MoveP(0x03,1,0,speed,value);
 591   3                                       switch(state)
 592   3                                       {
 593   4                                              case 0:
 594   4                                                if(moveflag==ENTER) direction=1;
 595   4                                                else direction=4;
 596   4                                                moveflag=0;
 597   4                                                break;
 598   4                                              case 2://乙犯规,甲得分 
 599   4                                                      gamenum.mark1++;
 600   4                                                      put_chinese(chinese[21],6,10,1);//yi
 601   4                                                      break;
 602   4                                       } 
 603   3                                       break;
 604   3                    case 1:
 605   3                               state=Ball_MoveP(0x03,0,0,speed,value);
 606   3                                       switch(state)
 607   3                                       {
 608   4                                              case 0:
 609   4                                                if(moveflag==ENTER) direction=0;
 610   4                                                else direction=2;
 611   4                                                break;
C51 COMPILER V7.06   MAIN                                                                  10/03/2008 17:28:23 PAGE 11  

 612   4                                              case 1://甲犯规,乙得分  
 613   4                                                      gamenum.mark2++;
 614   4                                      put_chinese(chinese[20],6,10,1);//jia
 615   4                                                      break;
 616   4                                              case 2://乙犯规,甲得分 
 617   4                                                      gamenum.mark1++;
 618   4                                                      put_chinese(chinese[21],6,10,1);
 619   4                                                      break;
 620   4                                       }
 621   3                                       break;
 622   3                        case 2:
 623   3                               state=Ball_MoveRightDown(speed);
 624   3                                       switch(state)
 625   3                                       {
 626   4                                              case 0:
 627   4                                                if(moveflag==UP) direction=7;
 628   4                                                else direction=3;
 629   4                                                break;

⌨️ 快捷键说明

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