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

📄 t100.lst

📁 在51单片机上用C写的T100,T101TFT屏的控制程序,有OSD
💻 LST
📖 第 1 页 / 共 5 页
字号:
 569   2              Set_SCL_High;        /* make sure two line is release */
 570   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
 571   2              { };  /* Delay 12us */
 572   2      
 573   2              Set_SDA_Low;
 574   2              for(ix = 0; ix < TWD_LONG_TIME; ix++)
 575   2              { };  /* Delay 12us */
 576   2      
 577   2              if((SCL_High)&&(SDA_Low))
 578   2                  break;
 579   2          }
 580   1      
 581   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
 582   1          { };  /* Delay 12us */
 583   1      }
 584          
 585          //----------------------------------------
 586          // P_Condition for TWD protocol
 587          //----------------------------------------
 588          void StopCondition(void)
 589          {
 590   1          uCHAR ix;
 591   1          uCHAR cTWtrytime=0;
 592   1      
 593   1          Set_SDA_Low;
 594   1          Set_SCL_High;
 595   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
 596   1          { };  /* delay 12us */
 597   1      
 598   1          while(SCL_Low && ++cTWtrytime)
 599   1          { };
 600   1      
 601   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
 602   1          { };  /* delay 12us */
 603   1      
 604   1          Set_SDA_High;
 605   1          for(ix = 0; ix < TWD_SHORT_TIME; ix++)
 606   1          { };  /* delay 12us */
 607   1              EA=1;
 608   1      }
 609          
 610          //--------------------------------------------------
 611          // Send_Byte
 612          //    Send a byte to master with a acknowledge bit
C51 COMPILER V7.06   T100                                                                  09/21/2005 18:16:31 PAGE 11  

 613          //--------------------------------------------------
 614          uCHAR Send_Byte(uCHAR cData)
 615          {
 616   1          uCHAR ix, j, cAcknowledge;
 617   1          uCHAR cTWtrytime=0;
 618   1      
 619   1          cAcknowledge = 0;
 620   1      
 621   1          for(ix = 0; ix < 8; ix++)
 622   1          {
 623   2              Set_SCL_Low;
 624   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 625   2              { };
 626   2      
 627   2              if(cData&0x80)Set_SDA_High;
 628   2                          else Set_SDA_Low;
 629   2      
 630   2                          cData<<=1;
 631   2      
 632   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 633   2              { };
 634   2      
 635   2              Set_SCL_High;
 636   2              while(SCL_Low && ++cTWtrytime)
 637   2              { };
 638   2      
 639   2              for(j = 0; j < TWD_SHORT_TIME; j++)
 640   2              { };
 641   2          }
 642   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 643   1          { };
 644   1      
 645   1          Set_SCL_Low;
 646   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 647   1          { };
 648   1      
 649   1          Set_SDA_High;                /* release data line for acknowledge */
 650   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 651   1          { };
 652   1      
 653   1          Set_SCL_High;                /* Send a clock for Acknowledge */
 654   1          while(SCL_Low)
 655   1          { };
 656   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 657   1          { };
 658   1      
 659   1          if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
 660   1          Set_SCL_Low;                   /* Finish Acknoledge */
 661   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 662   1          { };
 663   1      
 664   1          return(cAcknowledge);
 665   1      }
 666          
 667          //--------------------------------------------------
 668          // Read_Byte
 669          //    Read a byte from master with a acknowledge bit
 670          //--------------------------------------------------
 671          uCHAR Read_Byte(uCHAR cNum)
 672          {
 673   1          uCHAR ix, j;
 674   1          uCHAR cRetval=0;
C51 COMPILER V7.06   T100                                                                  09/21/2005 18:16:31 PAGE 12  

 675   1      
 676   1          for(ix=0;ix<8;ix++){
 677   2                Set_SCL_High;
 678   2                while(SCL_Low){};
 679   2                for(j=0;j<TWD_SHORT_TIME;j++){};
 680   2                cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ;  // MSB First
 681   2                Set_SCL_Low;
 682   2           }
 683   1      
 684   1           if(cNum==1)
 685   1              Set_SDA_High;
 686   1           else
 687   1                      Set_SDA_Low;
 688   1           //SDA = (cNum==1) 1:0;
 689   1           Set_SCL_High;
 690   1           while(SCL_Low){};
 691   1           for(j = 0; j < TWD_SHORT_TIME; j++)
 692   1           { };
 693   1      
 694   1          Set_SCL_Low;
 695   1      
 696   1          Set_SDA_High;
 697   1          for(j = 0; j < TWD_SHORT_TIME; j++)
 698   1          { };
 699   1      
 700   1          return cRetval;
 701   1      }
 702          uCHAR I2CReadByte(uCHAR cAddr, uCHAR cReg)
 703          {
 704   1              uCHAR cTemp;
 705   1      
 706   1              StartCondition();
 707   1              Send_Byte(cAddr);
 708   1              Send_Byte(cReg);
 709   1              StartCondition();
 710   1              Send_Byte(cAddr|0x01);
 711   1              cTemp=Read_Byte(1);
 712   1              StopCondition();
 713   1      
 714   1              return cTemp;
 715   1      }
 716          uCHAR I2CWriteByte(uCHAR cAddr,uCHAR cReg,uCHAR cData)
 717          {
 718   1              StartCondition();
 719   1              Send_Byte(cAddr);
 720   1              Send_Byte(cReg);
 721   1              Send_Byte(cData);
 722   1              StopCondition();
 723   1              return 0;
 724   1      }
 725          void I2CWriteTbl(char *pString)
 726          {
 727   1              uCHAR cAddr,cReg,cNum0,cNum1,cINC;
 728   1        while(*pString != EOT)
 729   1        {
 730   2                      cAddr=*pString++;
 731   2                      cNum0=*pString++;
 732   2                      while(cNum0)
 733   2                      {
 734   3                              cReg=*pString++;
 735   3                              cNum1=*pString++;
 736   3                              cNum0-=(cNum1+2);
C51 COMPILER V7.06   T100                                                                  09/21/2005 18:16:31 PAGE 13  

 737   3                              if(cNum1!=1)
 738   3                              {
 739   4                                      cINC=*pString++;
 740   4                                      cNum1-=1;
 741   4                              }
 742   3                              while(cNum1--)
 743   3                              {
 744   4                                      I2CWriteByte(cAddr,cReg,*pString++);
 745   4                                      cReg+=cINC;
 746   4                              }
 747   3                       }
 748   2         }
 749   1      }
 750          
 751          uCHAR twdWr_Burst_A(uCHAR cReg)
 752          {
 753   1          StartCondition();
 754   1          if(!Send_Byte(TW100))
 755   1          {
 756   2              if(!Send_Byte(cReg))
 757   2              {
 758   3                  return(0);               //
 759   3              }
 760   2          }
 761   1          return(1);                  //
 762   1      }
 763          
 764          void twdWr_Burst_D(uCHAR cData)
 765          {
 766   1          uCHAR ix;
 767   1      
 768   1          for(ix = 0; ix < 8; ix++)
 769   1          {
 770   2              Set_SCL_Low;
 771   2              if(cData&0x80)Set_SDA_High;
 772   2                      else Set_SDA_Low;
 773   2                      cData<<=1;
 774   2              Set_SCL_High;
 775   2          }
 776   1          Set_SCL_Low;
 777   1          Set_SDA_High;                /* release data line for acknowledge */
 778   1          Set_SCL_High;                /* Send a clock for Acknowledge */
 779   1      //    if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
 780   1          Set_SCL_Low;                   /* Finish Acknoledge */
 781   1      
 782   1      //    return(cAcknowledge);
 783   1      
 784   1      }
 785          
 786          /*void twdWr_Burst_DQ(uCHAR cData)
 787          {
 788              uCHAR ix;
 789          //uCHAR cAcknowledge;
 790          //    uCHAR cTWtrytime=0;
 791          //    cAcknowledge = 0;
 792          
 793              for(ix = 0; ix < 8; ix++)
 794              {
 795                  Set_SCL_Low;
 796                  if(cData&0x1)Set_SDA_High;
 797                          else Set_SDA_Low;
 798                          cData>>=1;
C51 COMPILER V7.06   T100                                                                  09/21/2005 18:16:31 PAGE 14  

 799                  Set_SCL_High;
 800              }
 801              Set_SCL_Low;
 802              Set_SDA_High;                // release data line for acknowledge 
 803              Set_SCL_High;                // Send a clock for Acknowledge 
 804          //    if(SDA_High) cAcknowledge = 1; // No Acknowledge 
 805              Set_SCL_Low;                   // Finish Acknoledge 
 806          
 807          //    return(cAcknowledge);
 808          
 809          }*/
 810          
 811          
 812          
 813          void twdWr_Burst_P(void)
 814          {
 815   1          StopCondition();
 816   1      }
 817          
 818          /*void twdDelay(uWORD wLoops)
 819          {
 820                  uWORD wTemp;
 821          
 822              while (wLoops--) {
 823                      wTemp = 1000/6;     // one loop below takes about 11 us
 824                  while (wTemp--);
 825              }
 826          }
 827          */
 828          
 829          // OSD config register Write
 830          void OSDCfgWr(uCHAR index,uCHAR dat)
 831          {
 832   1       I2CWriteByte(TW100,OSD_CFG_INDEX,index);
 833   1       I2CWriteByte(TW100,OSD_CFG_DATA,dat);
 834   1      }
 835          
 836          //*****************************************************
 837          bit Filter13(bit le)
 838          {
 839   1              bit r;
 840   1              r=INT1;
 841   1              if(le==1)
 842   1              {
 843   2                      _nop_();
 844   2                      _nop_();
 845   2                      _nop_();
 846   2                      r&=INT1;
 847   2                      _nop_();
 848   2                      _nop_();
 849   2                      _nop_();
 850   2                      r&=INT1;
 851   2              }
 852   1              else
 853   1              {
 854   2                      _nop_();
 855   2                      _nop_();
 856   2                      _nop_();
 857   2                      r|=INT1;
 858   2                      _nop_();

⌨️ 快捷键说明

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