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

📄 main.lst

📁 推箱子游戏]基于AT89S51+62256+12864LCD
💻 LST
📖 第 1 页 / 共 3 页
字号:
 466   3                                      else if (Map[pos-2]==2)
 467   3                                      {
 468   4                                          Map[pos-2]= 5;//显示十字形
 469   4                                              Map[pos-1]= 4;//娃娃脸的新位置
 470   4                                              Map[pos] = 0; //清空娃娃脸位置
 471   4                                      }
 472   3                                      break;
 473   3                }
 474   2            Refyuan();//刷新圆形并判断是否满足(过关!)
 475   2                MapCreate(); //刷新地图
 476   2                GameDisplay();//显示游戏界面
 477   2              
 478   2         }
 479   1      }
 480          /**********************************************************
 481          *函数名:RightMove() 
 482          *功  能:娃娃脸向右移动 +1
 483          **********************************************************/
 484          void RightMove()
 485          {
 486   1         uchar pos;
 487   1         pos = ReadPosition(); //获得娃娃脸的位置
 488   1         if (Map[pos+1]!=1)//判断移动方向前面是否是墙
 489   1         {
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 9   

 490   2                switch (Map[pos+1]) 
 491   2                {
 492   3                         case 0: //移动方向前面是空的执行这里
 493   3                                      Map[pos+1] = 4;//娃娃脸的新位置
 494   3                                      Map[pos] =0; //清空娃娃脸位置
 495   3                                      break;
 496   3                         case 2: //是圆形执行这里
 497   3                                      Map[pos+1] = 4;//娃娃脸的新位置
 498   3                                      Map[pos] =0; //清空娃娃脸位置
 499   3                                      break;
 500   3                         case 3: //移动方向前面是箱子执行这里
 501   3                                      //箱子的前面不是墙或箱子或十字就可以移动
 502   3                                      if (Map[pos+2]==0)
 503   3                                      {
 504   4                                              Map[pos+2]= 3;//显示箱子
 505   4                                              Map[pos+1]= 4;//娃娃脸的新位置
 506   4                                              Map[pos] = 0; //清空娃娃脸位置
 507   4                                      }
 508   3                                      else if(Map[pos+2]==2)
 509   3                                      {
 510   4                                              Map[pos+2]= 5; //显示十字形
 511   4                                              Map[pos+1]= 4;//娃娃脸的新位置
 512   4                                              Map[pos] = 0; //清空娃娃脸位置
 513   4                                      }
 514   3                                      break;
 515   3                         case 5: //移动方向前面是十字执行这里
 516   3                                      //十字形的前面不是墙或箱子或十字就可以移动
 517   3                                      if (Map[pos+2]==0)
 518   3                                      {
 519   4                                              Map[pos+2]= 3;//显示箱子
 520   4                                              Map[pos+1]= 4;//娃娃脸的新位置
 521   4                                              Map[pos] = 0; //清空娃娃脸位置
 522   4                                      }
 523   3                                      else if(Map[pos+2]==2)
 524   3                                      {
 525   4                                              Map[pos+2]= 5; //显示十字形
 526   4                                              Map[pos+1]= 4;//娃娃脸的新位置
 527   4                                              Map[pos] = 0; //清空娃娃脸位置
 528   4                                      }
 529   3                                      break;
 530   3                }
 531   2         Refyuan();//刷新圆形并判断是否满足(过关!)
 532   2         MapCreate(); //刷新地图
 533   2         GameDisplay();//显示游戏界面
 534   2         }
 535   1      }
 536          /**********************************************************
 537          *延时400us
 538          **********************************************************/
 539          void Delay400us() //晶振=12MHz 延时时间=404us
 540           {                                //晶振=11.0592MHz 延时时间≈438us
 541   1              uchar i,j;        //总的延时时间=[(2*i)+1]*j+1+1
 542   1              for (j=2;j>0;j--)
 543   1                      for (i=100;i>0;i--);
 544   1       }
 545          /**********************************************************
 546          *函数名:Sound()
 547          *功  能:音效子程序
 548          **********************************************************/
 549          void Sound()
 550          {
 551   1       uchar k;
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 10  

 552   1       for (k=40;k>0;k--)
 553   1       {
 554   2               Beep=~Beep;
 555   2               Delay400us();
 556   2       }
 557   1      }
 558          
 559          /**********************************************************
 560          *函数名:IR()
 561          *功  能:外中断遥控解码程序
 562          **********************************************************/
 563          void IR() interrupt 0 
 564          {
 565   1        uchar i,k;
 566   1        EA = 0;                       //关外中断0
 567   1        if (P3_2==0)          //P3.2低电平继续
 568   1        {
 569   2              for (i=8;i>0;i--)       //循环检测10次,低电平引导信号干扰检测(9ms)
 570   2              {
 571   3                      Delay400us(); //延时438us
 572   3                      if (P3_2==1)  //低电平引导信号出现高电平就跳出
 573   3                      { 
 574   4                              EA = 1; //开外中断
 575   4                              return;
 576   4                      }
 577   3              }
 578   2              while(P3_2==0); //等待高电平引导信号到了.
 579   2              for (i=8;i>0;i--)  //循环检测10次,高电平引导信号干扰检测(4.5ms)
 580   2              {
 581   3                      Delay400us();
 582   3                      if (P3_2==0) //高电平引导信号出现低电平就跳出
 583   3                      { 
 584   4                              EA = 1; //开外中断
 585   4                              return;
 586   4                      }
 587   3              }
 588   2              while(P3_2==1); //等待高电平引导信号结束.
 589   2              //接收4个字节的数据
 590   2              for (k=0;k<4;k++)                                                                                                   
 591   2              {
 592   3                      for (i=8;i>0;i--)  //8位数据
 593   3                      {
 594   4                              while(P3_2==0);         //等待第一个地址码的高电平到了.(保证判断每位数据的起点一致)
 595   4                              Delay400us();
 596   4                              Delay400us();           //延时0.876ms去判断P3.2的状态(0.56ms<延时时间<1.125ms)
 597   4                              KeyCoding[k]>>= 1; //右移1位
 598   4                              if(P3_2==1)             //仍是1,最高位写入1,0跳过
 599   4                                      KeyCoding[k]|= 0x80;
 600   4                              while(P3_2==1);         //等待高电平结束
 601   4                      }
 602   3              }
 603   2              //比较地址码和地址反码,不同解码错误退出
 604   2              if (KeyCoding[0]!=~KeyCoding[1]&&KeyCoding[2]!=~KeyCoding[3])
 605   2              { 
 606   3                      EA = 1; //开外中断
 607   3                      return;
 608   3              }
 609   2        }
 610   1        switch (KeyCoding[2])
 611   1              {//按键判断
 612   2                case  0x51:  //确定键
 613   2                              guanka++;
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 11  

 614   2                              if (guanka==10) guanka=0;
 615   2                              CopyMap(guanka);  //复制地图数据
 616   2                              MapCreate(); //地图生成程序
 617   2                              GameDisplay();//游戏界面显示程序
 618   2                              Readyuan();//
 619   2                              KeyCoding[2] = 0;
 620   2                              Sound();        //解码成功声音提示.
 621   2                              break;
 622   2                case  0x06:  //向上键
 623   2                              UpMove();
 624   2                              KeyCoding[2] = 0;
 625   2                              Sound();        //解码成功声音提示.
 626   2                              break;
 627   2                case  0x44:  //向下键
 628   2                              DownMove();
 629   2                              KeyCoding[2] = 0;
 630   2                              Sound();        //解码成功声音提示.
 631   2                              break;
 632   2                case  0x47:  //向左键
 633   2                              LeftMove();
 634   2                              KeyCoding[2] = 0;
 635   2                              Sound();        //解码成功声音提示.
 636   2                              break;
 637   2                case  0x40:  //向右键
 638   2                              RightMove();
 639   2                              KeyCoding[2] = 0;
 640   2                              Sound();        //解码成功声音提示.
 641   2                              break;
 642   2                case  0x02:  //第一次按进入设置,第二次退出设置状态
 643   2                              KeyCoding[2] = 0;
 644   2                              Sound();        //解码成功声音提示.
 645   2                              break;
 646   2                case  0x07:  //系统设定键
 647   2                              KeyCoding[2] = 0;
 648   2                              Sound();        //解码成功声音提示.
 649   2                              break;
 650   2              }
 651   1        EA = 1;       //开外中断
 652   1      }
 653          
 654          /**********************************************************
 655          *函数名:Init(void)
 656          *功能:初始化
 657          **********************************************************/
 658          void Init()
 659          {
 660   1              EA  = 1; //开总中断
 661   1              IT0 = 1; //外中断0边沿触发
 662   1              EX0 = 1; //开外中断0
 663   1      }
 664          
 665          /**********************************************************
 666          *函数名:main (void)
 667          *功能:主函数
 668          **********************************************************/
 669          void main (void)
 670          {
 671   1        uint i;
 672   1        Delay400us();//等待电源稳定
 673   1        Init();          //
 674   1        LCDInit();   //液晶初始化程序
 675   1        for (i=0;i<1024;i++)
C51 COMPILER V8.08   MAIN                                                                  06/14/2007 15:33:59 PAGE 12  

 676   1        {
 677   2              GamePic[i] = 0; //外部RAM清0
 678   2        }
 679   1        CopyMap(0);  //复制地图数据
 680   1        MapCreate(); //地图生成程序
 681   1        GameDisplay();//游戏界面显示程序
 682   1        Readyuan();   //读得圆形的坐标位置
 683   1        while(1);
 684   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1247    ----
   CONSTANT SIZE    =    816    ----
   XDATA SIZE       =   1030    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       5
   IDATA SIZE       =     64    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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