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

📄 lcd_disp.lst

📁 俄罗斯方块 在Proteus仿真通过 有兴趣的自己下载看看
💻 LST
📖 第 1 页 / 共 3 页
字号:
 294   1      }
 295          
 296          /*--------------------------------------------------
 297          *函数名称:Sys_Star_Set
 298          *功    能:系统开始设定
 299          *参    数:无
 300          *返    回:无
 301          ---------------------------------------------------*/
 302          void Sys_Star_Set(void)
 303          {
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 6   

 304   1        
 305   1       
 306   1       LCD_Init();       //液晶初始化
 307   1       Disp_Buff_Init(); //系统背景初始化
 308   1       Disp_Update();
 309   1       Scr_Disp_Init();   //屏幕显示初始化
 310   1       Timer0_Init();    //定时器初始化
 311   1       Read_Sel_Figure(Fig_Type,Figure_Date); //读取形状
 312   1       Move_Down_Delay=(5-speed)*10; //赋值下落延时寄存器
 313   1      }
 314          /*--------------------------------------------------
 315          *函数名称:Disp_Buff_Init
 316          *功    能:缓存初始化
 317          *参    数:无
 318          *返    回:无
 319          ---------------------------------------------------*/
 320          void Disp_Buff_Init(void)
 321          {
 322   1       uchar i;
 323   1       for(i=0;i<32;i++)
 324   1              {
 325   2               Disp_Buff[i]=0x00000000;
 326   2              }
 327   1       
 328   1      }
 329          /*--------------------------------------------------
 330          *函数名称:Disp_Num
 331          *功    能:显示总分及速度
 332          *参    数:data   总分及速度值  disp_sel  显示选择  1 分数 0速度
 333          *返    回:无
 334          ---------------------------------------------------*/
 335          void Disp_Num(uchar dat ,uchar disp_sel)
 336          {
 337   1       uchar a,b,c;   //分别存储个位/百位/千位
 338   1       c=dat/100;
 339   1       b=(dat%100)/10;
 340   1       a=(dat%100)%10;
 341   1       if(disp_sel)
 342   1              {
 343   2               Write_One_Byte(100,20,c);
 344   2           Write_One_Byte(108,20,b);
 345   2           Write_One_Byte(116,20,a);
 346   2              }
 347   1       else
 348   1              {
 349   2               Write_One_Byte(108,40,a);
 350   2              }
 351   1              
 352   1       
 353   1      
 354   1      }
 355          
 356          
 357          
 358          /*--------------------------------------------------
 359          *函数名称:Scr_Disp_Init
 360          *功    能:屏幕显现初始化
 361          *参    数:无
 362          *返    回:无
 363          ---------------------------------------------------*/
 364          void Scr_Disp_Init(void)
 365          {
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 7   

 366   1       uchar i;
 367   1       for(i=0;i<64;i++)
 368   1              Write_OneDot(64,i,1);
 369   1       for(i=0;i<64;i++)
 370   1              Write_OneDot(127,i,1); 
 371   1       for(i=64;i<128;i++)
 372   1              Write_OneDot(i,0,1); 
 373   1       for(i=64;i<128;i++)
 374   1              Write_OneDot(i,63,1);
 375   1       Write_One_Word(65,20,fen);
 376   1       Write_One_Word(81,20,shu);
 377   1       Disp_Num(SUM,1);
 378   1       
 379   1       Write_One_Word(65,40,su);
 380   1       Write_One_Word(81,40,du);
 381   1       Disp_Num(speed,0);
 382   1      }
 383          
 384          /*--------------------------------------------------
 385          *函数名称:Disp_update
 386          *功    能:将显示缓存在液晶屏上显示
 387          *参    数:无
 388          *返    回:无
 389          ---------------------------------------------------*/
 390          void Disp_Update(void)
 391          {
 392   1       uchar i,j;
 393   1       ulong temp;
 394   1       for(i=0;i<32;i++)
 395   1              {
 396   2               temp=Disp_Buff[i];
 397   2               for(j=0;j<32;j++)
 398   2                      {
 399   3                       if(temp&0x01)
 400   3                              Write_OneLargeDot(j+10,i,1);
 401   3                       else
 402   3                              Write_OneLargeDot(j+10,i,0);
 403   3                       temp=temp>>1;
 404   3                      }
 405   2              }
 406   1      }
 407          /*--------------------------------------------------
 408          *函数名称:Update_Disp_Buff
 409          *功    能:缓存刷新
 410          *参    数:*P_figure  指向方块内容
 411          *返    回:无
 412          ---------------------------------------------------*/
 413          void Update_Disp_Buff(uchar *p_figuer)
 414          {
 415   1       uchar temp,i,j;
 416   1       ulong temp1;
 417   1       for(i=0;i<4;i++)
 418   1        {  
 419   2           if((Y_Coor-i)<32) 
 420   2           {
 421   3               temp=*p_figuer;    //暂存方块数据
 422   3               for(j=0;j<4;j++)
 423   3                      {
 424   4                       temp1=0x01;
 425   4                       if((X_Coor+j-10)<42)  //坐标范围外的数据舍弃
 426   4                              {
 427   5                               if(temp&0x01)                 //检测最低位状态
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 8   

 428   5                                      {
 429   6                                       temp1=temp1<<(X_Coor+j-10);
 430   6                                   Disp_Buff[Y_Coor-i]=Disp_Buff[Y_Coor-i]|temp1;  //将相对应的位置一
 431   6                                      }
 432   5                              }
 433   4                       temp=temp>>1;
 434   4                      }
 435   3           }
 436   2              p_figuer++;
 437   2        }
 438   1      }
 439          /*--------------------------------------------------
 440          *函数名称:Check_Interfc
 441          *功    能:检测两个缓存区域是否存在干涉
 442          *参    数:X  横坐标  Y  纵坐标
 443                            *p_figuer  指向方块的内容
 444                    
 445          *返    回:1  存在干涉
 446                    0  不准在干涉
 447          ---------------------------------------------------*/
 448          uchar Check_Interfc(uchar X,uchar Y,uchar *p_figuer)
 449          {
 450   1       uchar temp,i,j,reval;                  
 451   1       reval=0;
 452   1       if(X>9)
 453   1          i=X-10;
 454   1       else
 455   1              i=0; 
 456   1       for(j=0;j<4;j++)
 457   1       {
 458   2       if((Y-j)<32)
 459   2       {
 460   3       temp=((Disp_Buff[Y-j]>>i)&0x0f);
 461   3       switch (X)
 462   3              {
 463   4               case 9 : temp=((temp<<1)|0x01); break;
 464   4               case 8 : temp=((temp<<2)|0x03); break;
 465   4               case 7 : temp=((temp<<3)|0x07); break;
 466   4               case 39: temp=(temp|0x08); break;
 467   4               case 40: temp=(temp|0x0c); break;
 468   4               case 41: temp=(temp|0x0e); break;
 469   4              }
 470   3       }
 471   2       else if(((Y-j)>31)&&((Y-j)<35))
 472   2              temp=0x0f;
 473   2       else temp=0x00;
 474   2       
 475   2       if(*p_figuer&temp)
 476   2              reval=1;
 477   2       p_figuer++;
 478   2       }
 479   1       return reval;  
 480   1      }
 481          
 482          /*--------------------------------------------------
 483          *函数名称:Clr_figure
 484          *功    能:清除当前方块
 485          *参    数:*p_figure     方块数据
 486                    X             横坐标
 487                    Y             纵坐标
 488          *返    回:无
 489          ---------------------------------------------------*/
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 9   

 490          void Clr_Figure(uchar X,uchar Y,uchar *p)
 491          {
 492   1       uchar i,j,temp;
 493   1       for(i=0;i<4;i++)
 494   1              {
 495   2               temp=*p;
 496   2               for(j=0;j<4;j++)
 497   2                      {
 498   3                       if(temp&0x01)
 499   3                              Write_OneLargeDot( X+j,  Y-i, 0);
 500   3                       temp=temp>>1;           
 501   3                      }
 502   2           p++;        
 503   2              } 
 504   1      
 505   1      }
 506          /*--------------------------------------------------
 507          *函数名称:Rand
 508          *功    能:产生一个1-11的随机数
 509          *参    数:无       
 510          *返    回:无          
 511          ---------------------------------------------------*/
 512          uchar Ran(void)
 513          {
 514   1       srand(TL0);
 515   1       return (rand()%11+1); 
 516   1      }
 517          
 518          /*--------------------------------------------------
 519          *函数名称:Exchange
 520          *功    能:一个数组的内容赋值给另外一个数组
 521          *参    数:*p1  源数组
 522                    *p2  目标数组          
 523          *返    回:无          
 524          ---------------------------------------------------*/
 525          void Exchange(uchar *p1,uchar *p2)
 526          {
 527   1       uchar i;
 528   1       for(i=0;i<4;i++)
 529   1              {
 530   2               *p2=*p1;
 531   2               p2++;
 532   2               p1++;
 533   2              }
 534   1      }
 535          
 536          /*--------------------------------------------------
 537          *函数名称:Read_Figure
 538          *功    能:从ROM中读取方块,存放到Figure_Date[]中
 539          *参    数:*p1  *p2       
 540          *返    回:无
 541          ---------------------------------------------------*/
 542          void Read_Figure(uchar code *p1,uchar *p2)
 543          {
 544   1       uchar i;
 545   1       for(i=0;i<4;i++)
 546   1              {
 547   2               *p2=*p1;
 548   2               p1++;
 549   2               p2++;
 550   2              }
 551   1      }
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 10  

 552          /*--------------------------------------------------
 553          *函数名称:Read_Sel_Figure
 554          *功    能:从ROM中读取选定的方块,存放到Figure_Date[]中
 555          *参    数:type 方块的形状代码(1-11)
 556                    *p  存放读取内容的数组
 557          *返    回:无
 558          ---------------------------------------------------*/
 559          void Read_Sel_Figure(uchar type,uchar *p)
 560          {
 561   1       switch (type)
 562   1              {
 563   2               case 1:Read_Figure(a, p); break;  // 田
 564   2               
 565   2               case 2:Read_Figure(b, p); break;  // |
 566   2               case 3:Read_Figure(c, p); break;  //一
 567   2               
 568   2               case 4:Read_Figure(d, p); break;  // 一I一
 569   2               case 5:Read_Figure(e, p); break;
 570   2               case 6:Read_Figure(f, p); break;
 571   2               case 7:Read_Figure(g, p); break;
 572   2               
 573   2               case 8:Read_Figure(h, p); break;
 574   2               case 9:Read_Figure(i, p); break;
 575   2               
 576   2               case 10:Read_Figure(j, p); break;
 577   2               case 11:Read_Figure(k, p); break;       
 578   2              }
 579   1      }
 580          /*--------------------------------------------------
 581          *函数名称:Trans
 582          *功    能:方块变形程序
 583          *参    数:type 方块当前形状代码       
 584          *返    回:无
 585          ---------------------------------------------------*/
 586          void Trans(uchar type)
 587          {
 588   1       if(Y_Coor>1)
 589   1       {
 590   2       switch (type)
 591   2              {
 592   3               case 1: ; break;
 593   3               case 2:{

⌨️ 快捷键说明

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