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

📄 snake.lst

📁 51单片机上的贪吃蛇游戏
💻 LST
📖 第 1 页 / 共 4 页
字号:
 554   4                else My_snake.Game_Mode=GAME_OVER;
 555   4             return ;
 556   4          }
 557   3             break;
 558   3           case LEFT:
 559   3            {
 560   4           if(Press_Oppsite_Direction())
 561   4               {
 562   5            My_snake.direction=RIGHT;
 563   5               return ;      //如果是按了相反方向那么就返回并把方向转过来
 564   5            }
 565   4            else if(Sure_No_Stock()) //看看有障碍物
 566   4                Go_Ahead();
 567   4              else My_snake.Game_Mode=GAME_OVER;
 568   4             return ;
 569   4         }
 570   3             break;
 571   3        case UP:
 572   3                  {
 573   4             if(Press_Oppsite_Direction())
 574   4               {
 575   5            My_snake.direction=DOWN;
 576   5               return ;      //如果是按了相反方向那么就返回并把方向转过来
 577   5            }
 578   4            else if(Sure_No_Stock()) //看看有障碍物
 579   4                Go_Ahead();
 580   4              else My_snake.Game_Mode=GAME_OVER;
 581   4             return ;
 582   4             }
 583   3             break;
 584   3           case DOWN:
 585   3                {    
 586   4                if(Press_Oppsite_Direction())
 587   4               {
 588   5            My_snake.direction=UP;
 589   5               return ;      //如果是按了相反方向那么就返回并把方向转过来
 590   5            }
 591   4            else if(Sure_No_Stock()) //看看有障碍物
 592   4                Go_Ahead();
 593   4              else My_snake.Game_Mode=GAME_OVER;
 594   4             return ;
 595   4          }
 596   3             break;
 597   3         default:
 598   3              break;
 599   3           return;            
 600   3          }
 601   2          return;
 602   2        
 603   2       }
 604   1       return ;
 605   1        
 606   1      }
 607           
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 11  

 608           
 609          /*-------------------写数据或指令到LCD-------------*/
 610          void wr_lcd (bit dat_comm,uchar content) /*-------------------写数据或指令到LCD-------------*/
 611          {
 612   1        chk_busy ();
 613   1        if(dat_comm)
 614   1         {
 615   2          rs=1;   //data
 616   2          rw=0;   //write
 617   2         }
 618   1        else
 619   1         {
 620   2          rs=0;   //command
 621   2          rw=0;   //write
 622   2         }
 623   1        P0=content;   //output data or comm
 624   1        e=1;
 625   1        ;
 626   1        ;
 627   1        e=0;
 628   1      }
 629           
 630           void init_lcd (void) //初始化定时器
 631          {
 632   1       
 633   1       
 634   1        wr_lcd (comm,0x30);  /*--30---基本指令动作--*/  
 635   1        wr_lcd (comm,0x01);  /*--清屏,地址指针指向00H--*/
 636   1        wr_lcd (comm,0x06);  /*---光标的移动方向--*/
 637   1        wr_lcd (comm,0x0c);  /*---开显示,关游标--*/
 638   1      }
 639           
 640           
 641           
 642           
 643            /*------------显示一个整屏----------*/
 644           void display_all_screen (uchar screen_num)
 645           { 
 646   1        uchar counter;
 647   1       wr_lcd (comm,0x30);  /*30---基本指令动作*/
 648   1          wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
 649   1          
 650   1          wr_lcd (comm,0x34);
 651   1       wr_lcd (comm,0x30);
 652   1        
 653   1         wr_lcd (comm,clear_screen);//这里是写入清屏指令
 654   1         wr_lcd (comm,0x80);    //置AC为0
 655   1         for(counter=0;counter<64;counter++)
 656   1          {
 657   2           wr_lcd (dat,screen_data[screen_num][counter]);
 658   2          }
 659   1      // screen_num
 660   1      
 661   1       }
 662           
 663          
 664           /*---------------检测忙信号----------------*/
 665          void chk_busy (void)  /*---------------检测忙信号----------------*/
 666          {
 667   1        P0=0xff;
 668   1        rs=0;
 669   1        rw=1;
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 12  

 670   1        e =1;
 671   1        while(busy==1);
 672   1        e =0;
 673   1      }
 674          void Erasure()  //擦除屏幕函数 这是在绘图模式下 (uchar data1,uchar data2)
 675          {
 676   1        uchar i,j,k,x;
 677   1         wr_lcd (comm,0x30);  /*30---基本指令动作*/
 678   1        wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
 679   1        x=0x80;
 680   1        for(k=0;k<2;k++)
 681   1        {
 682   2          for(j=0;j<16;j++)
 683   2          {
 684   3            for(i=0;i<8;i++)
 685   3            {
 686   4              wr_lcd (comm,0x34);
 687   4              wr_lcd (comm,0x80+j*2);
 688   4              wr_lcd (comm,x+i);
 689   4              wr_lcd (comm,0x30);
 690   4              wr_lcd (dat,0x00);
 691   4              wr_lcd (dat,0x00);
 692   4            }
 693   3            for(i=0;i<8;i++)
 694   3            {
 695   4              wr_lcd (comm,0x34);
 696   4              wr_lcd (comm,0x80+j*2+1);
 697   4              wr_lcd (comm,x+i);
 698   4              wr_lcd (comm,0x30);
 699   4              wr_lcd (dat,0x00);
 700   4              wr_lcd (dat,0x00);
 701   4            }
 702   3          }
 703   2          x=0x88;
 704   2        }
 705   1        wr_lcd (comm,0x36);
 706   1      }
 707          
 708          void Write_Screen_Data_To_Screen(uchar x,uchar y)//这个函数是用来将缓存数据定入LCD的其中两个参数是缓存坐标
 709          {
 710   1         uchar Screen_x=0,Screen_y=0,i,j;
 711   1       
 712   1         if(y<8) {
 713   2                 Screen_x=0x80+x;
 714   2           Screen_y=0x80+y*4;
 715   2           }
 716   1            else
 717   1         {
 718   2         Screen_x=0x88+x;
 719   2         Screen_y=0x80+(y-8)*4;
 720   2         } //游戏中的坐标和屏上的坐标不一样,要换一下
 721   1         for(i=0;i<4;i++)
 722   1         {
 723   2          j=0;
 724   2              wr_lcd (comm,0x34);
 725   2              wr_lcd (comm,Screen_y+i);
 726   2              wr_lcd (comm,Screen_x);
 727   2              wr_lcd (comm,0x30);
 728   2              wr_lcd (dat,My_snake.Screen_data[j++][i]);
 729   2              wr_lcd (dat,My_snake.Screen_data[j++][i]);
 730   2        j=0;    
 731   2         }
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 13  

 732   1           wr_lcd (comm,0x36);
 733   1         
 734   1      }
 735          void Re_Build_Buffer(uchar x,uchar y)//这个是用来重构缓存数据
 736          {
 737   1        uchar i,j,k;
 738   1         for(i=0;i<2;i++)
 739   1            for(j=0;j<4;j++)
 740   1          {
 741   2          My_snake.Screen_data[i][j]=0x00;
 742   2          }
 743   1         
 744   1        for(i=0;i<SNAKE_LONG;i++)
 745   1        {
 746   2           if(My_snake.Snake_body[i][X_POT]/4==x&&My_snake.Snake_body[i][Y_POT]==y)
 747   2        {
 748   3        j=My_snake.Snake_body[i][X_POT]%4;
 749   3        switch(j)
 750   3          {
 751   4           case 0:
 752   4             {
 753   5         for(k=0;k<4;k++)   
 754   5                {
 755   6                       My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0xf0;
 756   6                      }
 757   5              }
 758   4         break;
 759   4           case 1:
 760   4            {
 761   5         for(k=0;k<4;k++)   
 762   5                    {
 763   6                            My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0x0f;
 764   6                          }
 765   5            }
 766   4         break;
 767   4        case 2:
 768   4            {
 769   5         for(k=0;k<4;k++)   
 770   5                   {
 771   6                              My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0xf0;
 772   6                                 }
 773   5                   }
 774   4         break;
 775   4          case 3:
 776   4            {
 777   5         for(k=0;k<4;k++)   
 778   5                   {
 779   6                                  My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0x0f;
 780   6                                 }
 781   5             }
 782   4         break;
 783   4         default:
 784   4               break;          
 785   4          }
 786   3        }
 787   2         }
 788   1         if(My_snake.Food_Postion.x/4==x&&My_snake.Food_Postion.y==y)
 789   1         {
 790   2         j=My_snake.Food_Postion.x%4;
 791   2        switch(j)
 792   2          {
 793   3           case 0:
C51 COMPILER V7.20   SNAKE                                                                 12/23/2007 22:27:19 PAGE 14  

 794   3             {
 795   4         for(k=0;k<4;k++)   
 796   4                {
 797   5                       My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0xf0;
 798   5                      }
 799   4              }
 800   3         break;
 801   3           case 1:
 802   3            {
 803   4         for(k=0;k<4;k++)   
 804   4                    {
 805   5                            My_snake.Screen_data[0][k]=My_snake.Screen_data[0][k]|0x0f;
 806   5                          }
 807   4            }
 808   3         break;
 809   3        case 2:
 810   3            {
 811   4         for(k=0;k<4;k++)   
 812   4                   {
 813   5                              My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0xf0;
 814   5                                 }
 815   4                   }
 816   3         break;
 817   3          case 3:
 818   3            {
 819   4         for(k=0;k<4;k++)   
 820   4                   {
 821   5                                  My_snake.Screen_data[1][k]=My_snake.Screen_data[1][k]|0x0f;
 822   5                                 }
 823   4             }
 824   3         break;
 825   3         default:
 826   3               break;          
 827   3          }
 828   2          }
 829   1      }
 830           
 831          void delay_ms(unsigned int ms)////延时毫秒级的
 832          {  unsigned int i,j;
 833   1         uchar timer;
 834   1       for(i=0;i<ms;i++)
 835   1        for(j=0;j<30;j++)
 836   1           { for(timer=10;timer>1;timer--)
 837   2        {
 838   3        ;

⌨️ 快捷键说明

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