osdbasic.lst

来自「显示屏驱动源代码」· LST 代码 · 共 538 行 · 第 1/2 页

LST
538
字号
C51 COMPILER V7.06   OSDBASIC                                                              02/21/2008 14:00:28 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE OSDBASIC
OBJECT MODULE PLACED IN .\Output\Osdbasic.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Osdbasic.c COMPACT OPTIMIZE(9,SIZE) BROWSE INCDIR(.\Include\) DEBUG OBJECTE
                    -XTEND PRINT(.\Source\Osdbasic.lst) OBJECT(.\Output\Osdbasic.obj)

stmt level    source

   1          //osd_basic.c
   2          // ver0.11 2/1x/2001 Change display format from hex to decimal
   3          //      1.32    LJY11262001     .Add border features to OSD window
   4          //      1.70    LJY05302003 .Support a menu with external OSD.
   5          //      2.00    BYH05102007 .Support internal MCU, which connect with direct memoty bus
   6          //                                               It needs change whole ReadTW88, WriteTW88 to regTW88
   7          
   8          #include "Config.h"
   9          
  10          #include "typedefs.h"
  11          #include "i2c.h"
  12          #include "main.h"
  13          #include "tw88.h"
  14          
  15          #include "osdbasic.h"
  16          #include "dispinfo.h"
  17          #include "measure.h"
  18          #include "printf.h"
  19          #include "udfont.h"
  20          #include "regmap.h"
  21          
  22          extern CODE struct RegisterInfo UserRange;
  23          
  24          //CODE BYTE ZoomAttr[]={        0,      0,      0x40,   0x80,   0xc0    };
  25          
  26          //IDATA struct BarInfo BarInfo;
  27          IDATA struct OSDStrInfo OSDStrInfo;
  28          extern  bit   I2CAutoIncFlagOn ;
  29          
  30          //********************************************************************
  31          //
  32          //      Font
  33          //
  34          //********************************************************************
  35          
  36          void WaitEndofDisplayArea(void)
  37          {
  38   1              BYTE ret,i;
  39   1      
  40   1              ret =  ReadTW88(OSDWINSTATUS) & 0x40;
  41   1      
  42   1              for(i=0;i<10;i++){
  43   2                      if( ret^ (ReadTW88(OSDWINSTATUS)&0x40)) break; 
  44   2              }
  45   1      }
  46          
  47          //=============================================================================
  48          //                      Download OSD Color Look up 
  49          //=============================================================================
  50          void Change_OSDColorLookup(void)
  51          {
  52   1              BYTE i,j;
  53   1              for(j=0; j<2; j++) {   
  54   2                      for(i=0; i<8; i++) {
C51 COMPILER V7.06   OSDBASIC                                                              02/21/2008 14:00:28 PAGE 2   

  55   3                              WriteTW88(0x9c, i+j*8);
  56   3                              WriteTW88(0x9d, OSD_Color_LookUp_Data_Table[j][i]);
  57   3                      }
  58   2              }
  59   1      }
  60          
  61          //=============================================================================
  62          //                      Download RAM Font Data
  63          //=============================================================================
  64          #ifdef  INTERNAL_MCU            // it doesn't have auto increase I2C mode
              void DownloadUDFont(void)
              {
                      BYTE i, j;
                      #ifndef INTERNAL_MCU
                      BYTE k;
                      #endif
              
                      WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address. 
              
                      for(i=0; (i< NO_UDFONT) && (i<= MAX_FONT_RAM_CHARS) ; i++) {
                              //DownloadFont(i, RAMFONTDATA[i]);
                              WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01);             // Font RAM access mode ON
                              WriteTW88(TW88_FONTRAMADDR, i);
              
                              WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
                              //WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
                              for ( j = 0; j<27; j++ ) {
                                      WriteTW88(TW88_FONTRAMDATA, RAMFONTDATA[i][j]);
                                      #ifndef INTERNAL_MCU
                                      for ( k=5; k!=0; k-- ) ;
                                      #endif
                              }
              
                              WriteTW88(TW88_ENABLERAM, (ReadTW88(TW88_ENABLERAM) & 0xfe));           // OSD RAM access mode OFF
                              #ifdef  DEBUG_OSD
                              if (( i % 10 )== 0) 
                                      dPuts("\r\n");
                              dPrintf("%02xh, ", (WORD)i);
                              #endif
                      }
              
              }
              
              #else
  99          void DownloadFont(BYTE cod, CODE_P BYTE *fontdata)
 100          {
 101   1              WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) | 0x01);             // Font RAM access mode
 102   1              WriteTW88(TW88_FONTRAMADDR, cod);
 103   1      
 104   1      //      WriteTW88(0xff, ReadTW88(0xff) | 0x10); // Disable I2C index auto increment during multi-write
 105   1              WriteTW88(0xe0, ReadTW88(0xe0) | 0x10); // Disable I2C index auto increment during multi-write
 106   1              WriteI2Cn( TW88I2CAddress, TW88_FONTRAMDATA, fontdata, 27 );
 107   1      
 108   1              WriteTW88(TW88_ENABLERAM, ReadTW88(TW88_ENABLERAM) & 0xfe);             // OSD RAM access mode
 109   1      }
 110          
 111          void DownloadUDFont(void)
 112          {
 113   1              BYTE i;
 114   1      
 115   1              WriteTW88(TW88_MULTISTART, COLORFONT_START); // Set Color Font Start Address. 
 116   1      
C51 COMPILER V7.06   OSDBASIC                                                              02/21/2008 14:00:28 PAGE 3   

 117   1              for(i=0; i< NO_UDFONT && i<= MAX_FONT_RAM_CHARS ; i++) {
 118   2                      DownloadFont(i, RAMFONTDATA[i]);
 119   2              }
 120   1      }
 121          #endif
 122          //*****************************************************************************
 123          //      OSD Window internal subfunction for TW88xx
 124          //*****************************************************************************
 125          //*****************************************************************************
 126          //      Functions for TW88xx internal OSD
 127          //*****************************************************************************
 128          #ifdef SUPPORT_OSDPOSITIONMOVE
 129          
 130          void SetOSDWindowX_TW88(BYTE winno, BYTE x)
 131          {
 132   1              WORD tmp;
 133   1              BYTE dat;
 134   1      
 135   1              if( winno<1 || winno>8 ) return;
 136   1              SetOSDWindowNum(winno);
 137   1      
 138   1              tmp = x << 3;
 139   1      
 140   1              dat = ReadTW88(TW88_WINSTART_HI) & 0xf0;
 141   1              dat = dat | (tmp>>8);
 142   1      
 143   1              WriteTW88(TW88_WINSTART_HI, dat);
 144   1              WriteTW88(TW88_WINXSTART, tmp);
 145   1      }
 146          #endif
 147          void SetOSDWindowY_TW88(BYTE winno, BYTE y)
 148          {
 149   1              WORD tmp;
 150   1              BYTE dat;
 151   1      
 152   1              if( winno<1 || winno>8 ) return;
 153   1              SetOSDWindowNum(winno);
 154   1      
 155   1              tmp = y << 2;
 156   1      
 157   1              dat = ReadTW88(TW88_WINSTART_HI) & 0x0f;
 158   1              dat = dat | ((tmp>>8)<<4);
 159   1      
 160   1              WriteTW88(TW88_WINSTART_HI, dat);
 161   1              WriteTW88(TW88_WINYSTART, tmp);
 162   1      }
 163          
 164          //=============================================================================
 165          //                      ShowOSDWindow_TW88
 166          //=============================================================================
 167          void ShowOSDWindowAll(BYTE on)
 168          {
 169   1              BYTE rd;
 170   1      
 171   1              WaitEndofDisplayArea(); 
 172   1              rd = ReadTW88(TW88_OSDLOCKUPSEL);
 173   1      
 174   1              if( on )
 175   1                      WriteTW88(TW88_OSDLOCKUPSEL, rd&0xef);  // 
 176   1              else
 177   1                      WriteTW88(TW88_OSDLOCKUPSEL, rd|0x10);  // OSD All Off (TW8806B)
 178   1      
C51 COMPILER V7.06   OSDBASIC                                                              02/21/2008 14:00:28 PAGE 4   

 179   1      }
 180          void ShowOSDWindow_TW88(BYTE winno, BYTE onoff)
 181          {
 182   1              BYTE rd;
 183   1      
 184   1              if( winno<1 || winno>8 ) return;
 185   1              SetOSDWindowNum(winno);
 186   1      
 187   1              rd = ReadTW88(TW88_WINATTR);
 188   1              if( onoff ) rd |= 0x01;
 189   1              else            rd &= 0xfe;
 190   1      
 191   1              WaitEndofDisplayArea(); 
 192   1              WriteTW88(TW88_WINATTR, rd);
 193   1      }
 194          
 195          #ifdef SUPPORT_OSDPOSITIONMOVE
 196          WORD GetOSDWindowX(BYTE winno)
 197          {
 198   1              WORD x;
 199   1      
 200   1              if( winno<1 || winno>8 ) return 0;
 201   1              SetOSDWindowNum(winno);
 202   1      
 203   1              x = (ReadTW88(TW88_WINSTART_HI) & 0x0f) << 8;
 204   1              x = x  | ReadTW88(TW88_WINXSTART);
 205   1      
 206   1              return (BYTE)(x >> 3);
 207   1      }
 208          #endif
 209          
 210          WORD GetOSDWindowY(BYTE winno)
 211          {
 212   1              WORD y;
 213   1      
 214   1              if( winno<1 || winno>8 ) return 0;
 215   1              SetOSDWindowNum(winno);
 216   1      
 217   1              y = (ReadTW88(TW88_WINSTART_HI) & 0xf0) << 4;
 218   1              y = y  | ReadTW88(TW88_WINYSTART);
 219   1      
 220   1              return (BYTE)(y >> 2);
 221   1      }
 222          
 223          #include        "osdTW88.c"
 224          //*****************************************************************************
 225          //
 226          //      Internal Font test
 227          //
 228          //*****************************************************************************
 229          //-----------------------------------------------------------------------------
 230          //      CopyUDCharToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE attr, BYTE ch)
 231          //      - For FONT RAM Char.
 232          //-----------------------------------------------------------------------------
 233          code BYTE       FontTestWindow[] = { 0xa1, 10, 0xa2, 10, 0xa0, 0, 0xa3, 16, 0xa4, 16, 0xa5, 0x91, 
 234                                                                                  0xa6, 1, 0xa7, 1, 0xa8, 0x22, 0xa9, 0x00, 0xaa, 00, 0xab, 0x62 };
 235          void DisplayROMFont( BYTE scode )
 236          {
 237   1      BYTE    i;
 238   1      
 239   1              WriteTW88( 0x94, 0x02 );                // clear OSD RAM clear
 240   1              WriteTW88( 0x9e, 0 );                   // window #0
C51 COMPILER V7.06   OSDBASIC                                                              02/21/2008 14:00:28 PAGE 5   

 241   1              for ( i=0; i<(sizeof(FontTestWindow)/2); i++ )
 242   1                      WriteTW88(FontTestWindow[i*2], FontTestWindow[i*2+1]);
 243   1              if ( scode == 0 ) {
 244   2                      WriteTW88( 0x94, 0x00 );                //0000 1100 ROM Font select with same attribute
 245   2                      for ( i=0; i<0xfe; i++ ) {
 246   3                              WriteTW88( 0x96, i );
 247   3                              WriteTW88( 0x97, i );
 248   3                              WriteTW88( 0x98, 0x97 );
 249   3                      }
 250   2              }
 251   1              else {

⌨️ 快捷键说明

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