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

📄 display.lst

📁 宏芯T102芯片驱动(51单片机作主控)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN .\obj\DISPLAY.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\T101\DISPLAY.C BROWSE INCDIR(.\include\;.\source\) DEBUG OBJECTEXTEN
                    -D PRINT(.\DISPLAY.lst) OBJECT(.\obj\DISPLAY.obj)

stmt level    source

   1          //---------------------------------------------------------------------------
   2          // Terawins Inc. Company Confidential Strictly Private
   3          //
   4          // $Archive: Display.c 702 $
   5          // $Revision: 1.01 $
   6          // $Author: JoannW $
   7          // $Date: 2002/06/18 $
   8          //
   9          // --------------------------------------------------------------------------
  10          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  11          // --------------------------------------------------------------------------
  12          // Copyright 2002 (c) Terawins Inc.
  13          // This is an unpublished work.
  14          // --------------------------------------------------------------------------
  15          #include <reg51.h>
  16          #include <math.h>
  17          #include "common.h"
  18          #include "system.h"
  19          #include "Struct.h"
  20          #include "TwoWire.h"
  21          #include "TW101Reg.h"
  22          #include "CfgDsply.h"
  23          #include "Display.h"
  24          uDWORD m_dwTemp[2];
  25          extern uCHAR idata m_cScaleratio;
  26          uWORD m_wDWHSZ=DWHSZ;
  27          extern uCHAR idata m_cBuff[4];
  28          extern uWORD idata m_wBuff[3];
  29          extern uDWORD   m_dwBuff[2];
  30          extern uWORD m_wVRes;           //as computed, used in output and scaling
  31          extern uWORD m_wHRes;      //as computed, used in scaling
  32          extern uWORD idata m_wVTotal;
  33          extern uCHAR idata m_cModeStatus;
  34          extern uCHAR idata m_cSource;
  35          extern uCHAR idata m_cStandard;
  36          //---------------------------------------------------------------------------------
  37          //This is for Display clock set,
  38          //the minimum difference between input freq and out freq should be more than 5MHz
  39          //---------------------------------------------------------------------------------
  40          
  41          //----------------------------------------
  42          // Local Definitions for this module
  43          //----------------------------------------
  44          ////
  45                  uWORD wDVTotal, wDHTotal,wDVBILK;
  46                  float tmp;
  47          void DisplayProcess_new(void)
  48          {
  49   1              uWORD wDVTotal, wDHTotal,wDVBILK;
  50   1              tmp=DNDIV_40;
  51   1        if(!m_cStandard)
  52   1        {
  53   2          tmp=1716*m_wVRes*DNDIV_40/DWVSZ;
  54   2          wDHTotal=1716*m_wVRes*DNDIV_40/DWVSZ;
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 2   

  55   2              tmp=(DNDIV_40*27000/(60*623))*1000;
  56   2              wDVTotal=(DNDIV_40*27000/(60*623))*1000;
  57   2        }
  58   1        else
  59   1        {
  60   2          wDHTotal=1728*m_wVRes*DNDIV_40/DWVSZ;
  61   2              wDVTotal=(DNDIV_40*27000/(50*576))*1000;
  62   2        }
  63   1      
  64   1      
  65   1              m_dwBuff[1]=I2CReadByte(TW101, 0x83);
  66   1              m_dwBuff[1] <<= 8;
  67   1              m_dwBuff[1]=I2CReadByte(TW101, 0x82);
  68   1              m_dwBuff[1] <<= 8;
  69   1              m_dwBuff[1] |= I2CReadByte(TW101, 0x81);
  70   1              wDVBILK=m_dwBuff[1];
  71   1          DisplaySetTiming1(wDHTotal, wDVTotal,wDVBILK);
  72   1      
  73   1      
  74   1      }
  75          ////
  76          void DisplayProcess(void)
  77          {
  78   1              uWORD wDVTotal, wDHTotal,wVOffset;
  79   1              uWORD wDWVSZ, wDVFrac;
  80   1              uWORD wVibLeft;
  81   1              uWORD wDHBlk;
  82   1              float fDHTotalF;
  83   1              
  84   1              I2CWriteByte(TW101, 0xC2, I2CReadByte(TW101, 0xc2) & 0xFB);
  85   1              wDWVSZ = DWVSZ; //DWVSZ == Paneal output vertial line number
  86   1      /////////////////////////Ruby
  87   1              m_dwBuff[0]=GetInputVSyncXclkCnt();//Read whole frame XCLK counter
  88   1              m_wBuff[0] = I2CReadByte(TW101, 0x59);
  89   1              m_wBuff[0] <<= 8;
  90   1              m_wBuff[0] += I2CReadByte(TW101, 0x58);
  91   1      
  92   1              m_wVTotal=m_dwBuff[0]*32/m_wBuff[0];
  93   1      
  94   1              m_dwBuff[1]=I2CReadByte(TW101, 0x83);
  95   1              m_dwBuff[1] <<= 8;
  96   1              m_dwBuff[1]=I2CReadByte(TW101, 0x82);
  97   1              m_dwBuff[1] <<= 8;
  98   1              m_dwBuff[1] |= I2CReadByte(TW101, 0x81);
  99   1      
 100   1              wVOffset = (m_dwBuff[1]*32+m_wBuff[0]/2)/m_wBuff[0];
 101   1      /////////////////////////////////////////////////////
 102   1      
 103   1              m_dwBuff[0]=DisplayGetXclkCnt(m_dwBuff[0]);
 104   1      
 105   1              fDHTotalF=DisplayGetHVTotal(&wDHTotal,&wDVTotal,&wDVFrac,wDWVSZ,m_dwBuff[0]);
 106   1              wVibLeft=DisplayVibration(fDHTotalF,wDHTotal, &wDVTotal,wDWVSZ,wDVFrac);
 107   1      
 108   1              wDHBlk = (wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)/2; 
 109   1              wDHBlk += DISP_DFLT_HSWIDTH;
 110   1      
 111   1              m_wBuff[0] = (unsigned long)wVOffset*100 * wDWVSZ/m_wVRes - wDHBlk * 100 / wDHTotal;   
 112   1      //#ifdef T100               
 113   1              DisplaySetPrefill(wDWVSZ,wDHTotal,wDVTotal);
 114   1      //#else
 115   1      //      DisplaySetPrefill();//m_wBuff[0],wDWVSZ,wVibLeft,wDHTotal);
 116   1      //#endif
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 3   

 117   1              DisplaySetTiming(wDHTotal,wDVTotal);
 118   1      }
 119          
 120          //#ifdef T100  //Ruby test 2004-08-19
 121          void DisplaySetPrefill( uWORD wDWVSZ, uWORD wDHTotal,uWORD wDVTotal)//(uWORD wVBlk, uWORD wDWVSZ, uWORD wV
             -ibLeft, uWORD wDHTotal,uWORD wDVTotal)
 122          {
 123   1              uWORD wPrefill;
 124   1              //To get prefill value roughly  
 125   1      //              wPrefill = 2450 - (unsigned long)m_wVRes*1000 / 2/wDWVSZ;
 126   1                      wPrefill = 5450 - (unsigned long)m_wVRes*1000 / 2/wDWVSZ;               
 127   1              //ROUNDUP(x,2)
 128   1              if(wPrefill%10 > 4)
 129   1                      wPrefill=wPrefill/10+1;
 130   1              else
 131   1                      wPrefill=wPrefill/10; 
 132   1      
 133   1              //Prefill fraction 
 134   1                      wPrefill = wPrefill/100*100+wPrefill%100;
 135   1      
 136   1              wPrefill = wPrefill +(unsigned long)(wPrefill%100)*m_wHRes/wDHTotal;  //Ruby
 137   1              m_dwBuff[0] = I2CReadByte(TW101, 0x59);
 138   1              m_dwBuff[0] <<= 8;
 139   1              m_dwBuff[0] += I2CReadByte(TW101, 0x58);
 140   1      
 141   1              wPrefill = m_dwBuff[0] * wPrefill /32 / 100;
 142   1      
 143   1              I2CWriteByte(TW101, 0x84, (unsigned char)wPrefill);
 144   1              I2CWriteByte(TW101, 0x85, (unsigned char)(wPrefill>>8));
 145   1              if(!m_cStandard)
 146   1              {
 147   2              m_dwTemp[0]=(wDVTotal-m_wVRes-DWVSST-DISP_DFLT_VSWIDTH)*wDHTotal;
 148   2              m_dwTemp[1]=wPrefill/DNDIV_40;
 149   2              if(m_dwTemp[0]<m_dwTemp[1])
 150   2                I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
 151   2              else
 152   2                        I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)&0xDF);
 153   2          }
 154   1              else
 155   1                        I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
 156   1      }
 157          /*
 158          #else
 159          void DisplaySetPrefill(void)//uWORD wVBlk, uWORD wDWVSZ, uWORD wVibLeft, uWORD wDHTotal)
 160          {
 161                  uWORD wPrefill;
 162          
 163          #ifdef WVGA
 164                  if(m_cStandard)
 165                          wPrefill = 0x1000+(288-m_wVRes)*0x200/5;
 166                  else
 167                          wPrefill = 0x100+(240-m_wVRes)*0x300/5;
 168          #endif
 169          #ifdef WXGA
 170          
 171                  if(m_cStandard)
 172                  {
 173                          wPrefill = 0x4000+(288-m_wVRes)*0x200/5+DELAY_LINES*0x400;
 174                  }
 175                  else
 176                  {
 177                          wPrefill = 0x3800+(240-m_wVRes)*0x300/5+DELAY_LINES*0x400;
C51 COMPILER V7.06   DISPLAY                                                               12/28/2004 10:14:03 PAGE 4   

 178                  }
 179          
 180          #endif
 181          
 182              I2CWriteByte(TW101, 0x70, I2CReadByte(TW101, 0x70)|0x20);
 183                  I2CWriteByte(TW101, 0x84, (unsigned char)wPrefill);
 184                  I2CWriteByte(TW101, 0x85, (unsigned char)(wPrefill>>8));
 185          }
 186          #endif
 187          
 188          */
 189          void DisplaySetTiming1(uWORD wDHTotal, uWORD wDVTotal,uWORD wDVBILK)
 190          {
 191   1              uWORD wTemp;
 192   1              float Temp;
 193   1      
 194   1              wTemp = ((wDHTotal - m_wDWHSZ - DISP_DFLT_HSWIDTH)>>1)-2; 
 195   1              I2CWriteByte(TW101, 0xB0, wTemp);
 196   1              I2CWriteByte(TW101, 0xB1, wTemp>>8);
 197   1      
 198   1              wTemp =wDVBILK/(wDHTotal*DNDIV_40)-DISP_DFLT_VSWIDTH;
 199   1              I2CWriteByte(TW101, 0xB2, wTemp);
 200   1              I2CWriteByte(TW101, 0xB3, wTemp>>8);
 201   1      
 202   1              I2CWriteByte(TW101,0xB4,(uCHAR)(m_wDWHSZ));     
 203   1              I2CWriteByte(TW101,0xB5,(uCHAR)(m_wDWHSZ>>8));
 204   1              I2CWriteByte(TW101, 0xB8, (unsigned char) wDHTotal);
 205   1              I2CWriteByte(TW101, 0xB9, (unsigned char)(wDHTotal>>8));
 206   1              
 207   1              I2CWriteByte(TW101, 0xBA, (unsigned char) wDVTotal);
 208   1              I2CWriteByte(TW101, 0xBB, (unsigned char)(wDVTotal>>8));         
 209   1                    
 210   1              I2CWriteByte(TW101, 0xBC, (unsigned char) DISP_DFLT_HSWIDTH);
 211   1              I2CWriteByte(TW101, 0xBD, (unsigned char)(DISP_DFLT_HSWIDTH>>8));
 212   1              
 213   1              I2CWriteByte(TW101, 0xBE, (unsigned char) DISP_DFLT_VSWIDTH);
 214   1              I2CWriteByte(TW101, 0xBF, (unsigned char)(DISP_DFLT_VSWIDTH>>8));
 215   1      
 216   1              Temp =wDVBILK/(wDHTotal*DNDIV_40)-DISP_DFLT_VSWIDTH-wTemp;
 217   1          wTemp=(2.5*1716/VFREQ(1))+Temp*wDHTotal*DNDIV_40*VFREQ(1);
 218   1              I2CWriteByte(TW101, 0x84, wTemp);
 219   1              I2CWriteByte(TW101, 0x85, wTemp>>8);
 220   1      
 221   1      #ifdef LOAD_TIME
                      if(!m_cStandard)   
                      {
                         if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX))==Panel_ID)
                         {
                          I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8));
                              I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2));
                         }
                  }
                      else
                      {
                         if ((I2CReadByte(EEPVIDEOBLOCK, idTIMING_FLAG_INDEX1))==Panel_ID)
                         {
                              I2CWriteByte(TW101, 0xB8, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B8_PAL));
                              I2CWriteByte(TW101, 0xB2, (unsigned char)I2CReadByte(EEPVIDEOBLOCK, idTIMING_B2_PAL));
                         }
                  }

⌨️ 快捷键说明

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