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

📄 iic_bit.lst

📁 一款用51单片机写的俄罗斯方块游戏完整项目下载
💻 LST
📖 第 1 页 / 共 2 页
字号:
 321   1       SEN=0;
 322   1       if(!STE)
 323   1       {
 324   2       SEN=1;
 325   2       SCL=1;
 326   2       SDA=1;
 327   2       return;
 328   2       }
 329   1       start();    //开始信号
 330   1       outbyte(IIC_WRITE|(temph<<1));   //写命令
 331   1       nack(1);   //等待应答
 332   1       outbyte(templ);  //写地址
 333   1       nack(1);
 334   1       outbyte(wbyte);   //写数据
 335   1       nack(1);   //等待应答
 336   1       stop();    //停止信号
 337   1       SCL=1;
 338   1       SDA=1;
 339   1       SEN=1;
 340   1      }
 341          //=====================================================
 342          //FUNCTION:RANDOM READ.'add' IS THE ADDRESS WANT TO READ
 343          uchar readbyte (uint add)//add为读地址
 344          {
 345   1      uchar temp,temph,templ; 
 346   1       temph=(uchar)(add/256);
 347   1       templ=(uchar)(add%256);
 348   1       if(!STE)
 349   1       return 0XFF;
 350   1       SEN=0;
 351   1       if(!STE)
 352   1       {
 353   2        SCL=1;
 354   2       SDA=1;
 355   2       SEN=1;
 356   2       return 0XFF;
 357   2       }
 358   1       start();   //开始信号
 359   1       outbyte(IIC_WRITE|(temph<<1));   //写命令
 360   1       nack(1);   //等待应答
 361   1       outbyte(templ);  //写地址
 362   1       nack(1);
 363   1       start();   //开始信号
 364   1       outbyte(IIC_READ|(temph<<1));   //读命令
 365   1       nack(1);   //等待应答
C51 COMPILER V7.50   IIC_BIT                                                               10/30/2007 19:00:59 PAGE 7   

 366   1       temp=inbyte();   //读数据
 367   1       nack(0);   //无应答
 368   1       stop();    //停止信号
 369   1       SEN=1;
 370   1       SCL=1;
 371   1       SDA=1;
 372   1       return(temp);
 373   1      }
 374          //=================================================
 375          //连写函数
 376          //add为读起始地址,ptr数据保存指针,writelen为写入数据长度
 377          uchar writebyteseq(uint add,uchar *ptr,uint writelen)
 378          {
 379   1       //uchar temp;
 380   1       uchar temph,templ;
 381   1      uint i;
 382   1       temph=(uchar)(add/256);
 383   1       templ=(uchar)(add%256);
 384   1        if(!STE)
 385   1       return 0XFF;
 386   1       SEN=0;
 387   1       if(!STE)
 388   1       {
 389   2        SCL=1;
 390   2       SDA=1;
 391   2       SEN=1;
 392   2       return 0XFF;
 393   2       }
 394   1       start();   
 395   1       outbyte(IIC_WRITE|(temph<<1));  
 396   1       nack(1);  
 397   1       outbyte(templ);
 398   1       nack(1);
 399   1       for(i=0;i<writelen;i++)
 400   1       {
 401   2        outbyte(*(ptr+i));
 402   2        nack(1);
 403   2       }
 404   1      
 405   1       stop(); 
 406   1         SCL=1;
 407   1       SDA=1;
 408   1       SEN=1;
 409   1        return 0;
 410   1      }
 411          //=================================================
 412          //连读函数
 413          //add为读起始地址,ptr数据保存指针,writelen为读出数据长度
 414          uchar readbyteseq(uint add,uchar *ptr,uint readlen)
 415          {
 416   1      
 417   1      xdata uchar temph,templ;
 418   1       uint i;
 419   1       EA=0;
 420   1      
 421   1       temph=(uchar)(add/256);
 422   1       templ=(uchar)(add%256);
 423   1         if(!STE)
 424   1         {
 425   2           SCL=1;
 426   2       SDA=1;
 427   2       SEN=1;
C51 COMPILER V7.50   IIC_BIT                                                               10/30/2007 19:00:59 PAGE 8   

 428   2       return 0XFF;
 429   2       }
 430   1       SEN=0;
 431   1       if(!STE)
 432   1       {
 433   2        SCL=1;
 434   2       SDA=1;
 435   2       SEN=1;
 436   2       return 0XFF;
 437   2       }
 438   1       start();
 439   1       outbyte(IIC_WRITE|(temph<<1));
 440   1       nack(1);
 441   1       outbyte(templ);
 442   1       nack(1);
 443   1       start();
 444   1       outbyte(IIC_READ|(temph<<1));
 445   1       nack(1);
 446   1       for(i=0;i<readlen-1;i++)
 447   1       {
 448   2        *(ptr+i)=inbyte();
 449   2        ack();
 450   2        
 451   2       }
 452   1       *(ptr+readlen-1)=inbyte();
 453   1       nack(0);
 454   1       stop();
 455   1         SCL=1;
 456   1       SDA=1;
 457   1       SEN=1;
 458   1       return 0;
 459   1      }
 460          //=======================================================
 461          //THIS IS A TEST OPERATION 
 462          
 463          delay(void)
 464          {
 465   1      xdata uchar i;
 466   1      for(i=0;i<100;i++)
 467   1      ;
 468   1      }
 469          //=======================================================
 470          //THIS IS A TEST OPERATION 
 471          delay10ms()
 472          {
 473   1      xdata uint a,b;
 474   1      for(a=0;a<200;a++)
 475   1       for(b=0;b<20;b++)
 476   1       ;
 477   1      }
 478          xdata uchar recc[1028];
 479          xdata uchar re_time[8];
 480          xdata uchar set[50];
 481          xdata uchar write_c[1024]={0,0,3,4,5,6,7,8,9,10,11};
 482          xdata uchar read_c[1024]={0,0,3,4,5,6,7,8,9,10,11};
 483          void display();
 484          uchar *pp;
 485          uchar dd=0;
 486          uchar chan=0;
 487          main()
 488          {
 489   1      uint i=0;
C51 COMPILER V7.50   IIC_BIT                                                               10/30/2007 19:00:59 PAGE 9   

 490   1      uint k=0;
 491   1      uint b=0;
 492   1      uchar len=0;
 493   1      /*
 494   1      while(1)
 495   1      {
 496   1      write_c[0]=i+2;
 497   1      write_c[1023]=i+3;
 498   1      while(writebyteseq(1024,write_c,1024)); 
 499   1      delay10ms();
 500   1      while(readbyteseq(1024,read_c,1024) );
 501   1      if((read_c[0]==i+2)&&(read_c[1023]==i+3))
 502   1      k++;
 503   1      else
 504   1      b++;
 505   1      i++;
 506   1      delay10ms();
 507   1      if(i>100)
 508   1      while(1);
 509   1      }
 510   1      */
 511   1      
 512   1      
 513   1      set[0]=0x62;
 514   1      set[1]=0x62;
 515   1      set[2]=0x62;
 516   1      set[3]=0x62;   //前四字节为清空指令码
 517   1      set[4]=0x02;   
 518   1      set[5]=0xd0;   //清空的列数  最大720列  
 519   1      set[6]=0x01;
 520   1      set[7]=0xe0;   //清空的行数   最大480列
 521   1      set[8]=0x00;
 522   1      set[9]=000;    //从X 位置开始清空
 523   1      set[10]=0x00;
 524   1      set[11]=000;   //从Y位置开始清空
 525   1      set[12]=0xff;  //清空后填充的颜色  0XFF 为白色
 526   1      set[13]=0x02;  //清空方式   0X02重新打开图象缓冲   0X01 一般清屏幕
 527   1      delay10ms();                                 
 528   1      while(writebyteseq(0,set,16));
 529   1      while(1)
 530   1      {
 531   2      set[0]=0x67;
 532   2      set[1]=0x67;
 533   2      set[2]=0x67;
 534   2      set[3]=0x67;                   //前四个字节为写图象缓冲指令码
 535   2      set[4]=0x00;
 536   2      set[5]=24;                     //要写图象的宽度         
 537   2      set[6]=0x00;
 538   2      set[7]=240;                     //要写图象的高度
 539   2      set[8]=0x01;
 540   2      set[9]=50;                    //图象显示在缓冲区的X 位置
 541   2      set[10]=0x00;
 542   2      set[11]=180;                   //图象显示在缓冲区的Y 位置
 543   2      set[12]=0x01;                  
 544   2      set[13]=0x00;                  //数据传输状态标志
 545   2      delay10ms();                        
 546   2      while(writebyteseq(0,set,18));  
 547   2      len=(test_y_z[0]*test_y_z[1]/(1024*(8/set[12]))+1);
 548   2                      do
 549   2                      {
 550   3                      delay10ms(); 
 551   3              while(!STE); 
C51 COMPILER V7.50   IIC_BIT                                                               10/30/2007 19:00:59 PAGE 10  

 552   3              readbyteseq(0,set,18);
 553   3              }while(set[13]!=0xaa); 
 554   2              //不断检测状态标志位置是否有完成标志 0XAA 如果是0XAA证明MAX5399已经将指定的数据读到
 555   2                      if(chan==0x00)
 556   2                      {
 557   3                      chan=0xff;
 558   3              pp=test_y_z;
 559   3                      }
 560   2                      else
 561   2                      {
 562   3                      chan=0;
 563   3                      pp=test_y_z;
 564   3                      }
 565   2              for(i=0;i<len;i++)
 566   2                      {
 567   3              while(!STE);
 568   3                      while(writebyteseq(1024,pp,1024));
 569   3                      set[13]=0x00;                                                  //将读取完成状态反送给MIX5399
 570   3                      while(writebyteseq(0,set,16));
 571   3                      pp=pp+1024;
 572   3                      do
 573   3                      {
 574   4              while(readbyteseq(0,set,18));
 575   4              }
 576   3                      while(set[13]!=0xaa); 
 577   3              }
 578   2                      delay10ms(); 
 579   2          }
 580   1      
 581   1      }
 582          void display()
 583          {
 584   1      uchar i=0;
 585   1              for (i = 0; i < 6; i++)
 586   1              {                           //循环显示6位数据
 587   2                  switch (i)
 588   2                  {
 589   3                    case 0:
 590   3                    P0=0Xdf;
 591   3                    P1=P1|0X03;
 592   3                    break;
 593   3                    case 1:
 594   3                    P0=0XBF;
 595   3                    P1=P1|0X03;
 596   3                    break;
 597   3                    case 2:
 598   3                    P0=0X7F;
 599   3                    P1=P1|0X03;
 600   3                    break;
 601   3                    case 3:
 602   3                    P0=0XFF;
 603   3                    P1=0xfe;
 604   3                    break;
 605   3                    case 4:
 606   3                    P0=0XFF;
 607   3                    P1=0XFd;
 608   3                    break;
 609   3                    case 5:
 610   3                    P0=0Xef;
 611   3                    P1=0xff;
 612   3                    break;
 613   3                  }
C51 COMPILER V7.50   IIC_BIT                                                               10/30/2007 19:00:59 PAGE 11  

 614   2                       dis[5]=(getclk[2]>>4);            //显示接收到的百位
 615   2                       dis[0]=(getclk[2]&0x0f);            //显示接收到的十位
 616   2      
 617   2                       dis[1]=(getclk[1]>>4);            //显示接收到的百位
 618   2                       dis[2]=(getclk[1]&0x0f);            //显示接收到的十位
 619   2      
 620   2                       dis[3]=(getclk[0]>>4);            //显示接收到的百位
 621   2                       dis[4]=(getclk[0]&0x0f);            //显示接收到的十位
 622   2      
 623   2                               
 624   2      
 625   2                       //dis[4]=gh%10;             //显示接收到的个位
 626   2      
 627   2                 
 628   2                              if((i==1)||(i==3))
 629   2                  P2=seg[dis[i]]&0xdf;            //送数据到显示位    
 630   2                      else
 631   2                  P2=seg[dis[i]];
 632   2              }
 633   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1338    ----
   CONSTANT SIZE    =   4000    ----
   XDATA SIZE       =   5416      21
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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