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

📄 tft.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 4 页
字号:
        break;
   default:
        break;
  }
}

/*********************************************************************
   Clear font of OSD Function (For VX1818)

Input Factor:
        stpos1   => 8 bits , Lower 2 bits is available.
                             The two bits is the 8-9bits address of
                             the starting point of the fontcodes.
        stpos2   => 8 bits , The 0-7bits address of the starting point
                             of the fontcodes.
Output Factor:
        None
Motion:
        1.Clear 16 fonts of OSD from the starting point
*********************************************************************/
void VX1818_OSD_ClearAll(void)
{
  BYTE bPos;
  BYTE code Temp[] = {20,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b};

//  TFT_Driver_Write(OSD_WRITE_DES_INITIAL_ADDR,0x10); // write command memory
//  TFT_Driver_Write(OSD_INITIAL_ADDR,bPos); // 
  for (__bTftTemp1=0;__bTftTemp1<4;__bTftTemp1++)
  {
     bPos = 0x20 + __bTftTemp1 * 20;  // (bTFT_Temp+1) * 0x10;
     TFT_Driver_Con_Write(bPos,Temp[0],Temp);
  }
//  VX1818_OSD_ShowString(bPos, (BYTE *)Temp);
}


/*********************************************************************
   Set block initial address in OSD Function (For VX1818)

Input Factor:
        block    => 8 bits , Choose which block to set
                             0x02 => Content Block
                             0x03 => Bottom Block
        pos              => 8 bits , The block initial address in OSD
Output Factor:
        None
Motion:
        1.Set the position of OSD Block
*********************************************************************/
void VX1818_OSD_SetAddr(BYTE bBlock,BYTE bPos)
{
  switch(bBlock)
  {
   case 2:      // Setup position of Content Block
       TFT_Driver_Write(OSD_CONTENT_CMD_START_ADDR,bPos);
        break;
   case 3:      // Setup position of Bottom Block
       TFT_Driver_Write(OSD_BOTTOM_CMD_START_ADDR,bPos);
        break;
   default:
        break;
  }
}

/*********************************************************************
   Set color of OSD's block Function (For VX1818)

Input Factor:
        block    => 8 bits , Choose which block to set
                             0x01 => Title Block
                             0x02 => Content Block
                             0x03 => Bottom Block
        fb       => 1 bit  , 1 => Foreground color
                             0 => Background color
        h        => 1 bit  , 1 => Highlight section color
                             0 => Normal color
        color    => 8 bits , The lower 4 bits are available.
Output Factor:
        None
Motion:
        1.Set the color of OSD Block
*********************************************************************/
void VX1818_OSD_SetColor(BYTE bBlock,BYTE bColor)
{
 // BYTE bAddr;

  switch(bBlock)
  {
   case 1:      // Setup position of Title Block
      if (bTFT_Status & TFT_HIGHLIGHT)  // Highlight
               __bTemp = OSD_TITLE_HL_COLOR;
      else      // Normal
               __bTemp = OSD_TITLE_BG_FG_COLOR;
       break;
   case 2:      // Setup position of Content Block
       if (bTFT_Status & TFT_HIGHLIGHT) // Highlight
                __bTemp = OSD_CONTENT_HL_BG_FG_COLOR;
        else    // Normal
                __bTemp = OSD_CONTENT_BG_FG_COLOR;
        break;
   case 3:      // Setup position of Bottom Block
       if (bTFT_Status & TFT_HIGHLIGHT) // Highlight
                 __bTemp = OSD_BOTTOM_HL_BG_FG_COLOR;
        else    // Normal
                 __bTemp = OSD_BOTTOM_BG_FG_COLOR;
        break;
   default:
        break;
  }
  __bTftTemp1=  TFT_Driver_Read(__bTemp);
  if (bTFT_Status & TFT_FOREGROUND)     // Foreground
  {
    __bTftTemp1 &= 0xf0;          // Remove lower 4 bits of bTFT_Temp
    bColor &= 0x0f;     // Remove higher 4 bits of color
    __bTftTemp1 |= bColor;        // set lower 4 bits of color to lower 4 bits of bTFT_Temp
  }
  else          // Background
  {
    __bTftTemp1 &= 0x0f;  // Remove higher 4 bits of bTFT_Temp
    bColor &= 0x0f;     // Remove higher 4 bits of color
    bColor <<= 4;               // Shift color left 4 bits
    __bTftTemp1 |= bColor;        // set higher 4 bits of color to higher 4 bits of bTFT_Temp
  }
  TFT_Driver_Write(__bTemp, __bTftTemp1);
}

/*********************************************************************
   Set Start and End point of Highlight/Blink Section of OSD Function (For VX1818)

Input Factor:
        block    => 8 bits , Choose which block to set
                             0x01 => Title Block
                             0x02 => Content Block
                             0x03 => Bottom Block
        hb       => 1 bit  , Switch Highlight/Blink
                             0 => Highlight
                             1 => Blink
        xstart   => 8 bits , The highlight starting of X direction
                             p.s. Lower 6 bits are available
        xend     => 8 bits , The highlight ending of X direction
                             p.s. Lower 6 bits are available
        ystart   => 8 bits , The highlight starting of Y direction
                             p.s. Lower 5 bits are available
        yend     => 8 bits , The highlight ending of Y direction
                             p.s. Lower 5 bits are available
Output Factor:
        None
*********************************************************************/
void VX1818_OSD_SetHighLightBlink(BYTE bBlock,BYTE bBlink,BYTE bXstart,BYTE bXend,BYTE bYstart,BYTE bYend)
{
  bXstart &= 0x3f;
  bXend &= 0x3f;
  bYstart &= 0x1f;
  bYend &= 0x1f;
  switch(bBlock)
  {
   case 1:      // Setup x size of Title Block
        if (bBlink)     // Blink section
        {
         TFT_Driver_Write(OSD_TTTLE_BLINK_START,bXstart);       // Start
         TFT_Driver_Write(OSD_TTTLE_BLINK_END,bXend);           // End
        }
        else    // Highlight section
        {
         TFT_Driver_Write(OSD_TITLE_HL_START,bXstart);  // Start
         TFT_Driver_Write(OSD_TITLE_HL_END,bXend);      // End
        }
        break;
   case 2:      // Setup x and y size of Content Block
        if (bBlink)     // Blink section
        {
         TFT_Driver_Write(OSD_CONTENT_BLINK_HOR_START,bXstart);         // xStart
         TFT_Driver_Write(OSD_CONTENT_BLINK_HOR_STOP,bXend);    // xEnd
         TFT_Driver_Write(OSD_CONTENT_BLINK_VER_START,bYstart);         // yStart
         TFT_Driver_Write(OSD_CONTENT_BLINK_VER_STOP,bYend);    // yEnd
        }
        else    // Highlight section
        {
         TFT_Driver_Write(OSD_CONTENT_HL_HOR_START_POS,bXstart);        // xStart
         TFT_Driver_Write(OSD_CONTENT_HL_HOR_END_POS,bXend);    // xEnd
         TFT_Driver_Write(OSD_CONTENT_HL_VER_START_POS,bYstart);        // yStart
         TFT_Driver_Write(OSD_CONTENT_HL_VER_END_POS,bYend);    // yEnd
        }
        break;
   case 3:      // Setup x size of Bottom Block
        if (bBlink)     // Blink section
        {
         TFT_Driver_Write(OSD_BOTTOM_BLINK_START,bXstart);      // Start
         TFT_Driver_Write(OSD_BOTTOM_BLINK_STOP,bXend); // End
        }
        else    // Highlight section
        {
         TFT_Driver_Write(OSD_BOTTOM_HL_START,bXstart); // Start
         TFT_Driver_Write(OSD_BOTTOM_HL_STOP,bXend);    // End
        }
        break;
   default:
        break;
  }
}

/*********************************************************************
   Set OSD blinking rate Function (For VX1818)

Input Factor:
        blink    => 8 bits , OSD blinking rate
                             P.S. Lower 6 bits are available

Output Factor:
        None
*********************************************************************/
void VX1818_OSD_SetBlink(BYTE bBlink)
{
  bBlink &= 0x3f;               // Remove redundant bits
  TFT_Driver_Write(OSD_BLACK_RATE,bBlink);
}

/*********************************************************************
   Set OSD alpha-blending Function (For VX1818)

Input Factor:
        alpha    => 8 bits , OSD alpha-blending
                             P.S. Lower 4 bits are available
Output Factor:
        None
*********************************************************************/
void VX1818_OSD_SetAlpha(BYTE bAlpha)
{
  bAlpha <<= 4;
  bAlpha &= 0xf0;               // Remove redundant bits

  __bTemp = TFT_Driver_Read(OSD_ALPHA_ENABLE);
//  shi_sub_read(VX1818,osd2,0x00,&temp9);
  __bTemp&= 0x0f;
  __bTemp|= bAlpha;
  TFT_Driver_Write(OSD_ALPHA_ENABLE,__bTemp);
}

void VX1818_OSD_Initial(void)
{

      // 1 draw menu
        TFT_Driver_Write(OSD_WRITE_DES_INITIAL_ADDR,0x10); // 

        VX1818_OSD_ClearAll();
                
        TFT_Driver_Con_Write(0x20, aBright[0], aBright);
        TFT_Driver_Con_Write(0x34, aContrast[0], aContrast);
        TFT_Driver_Con_Write(0x48, aColor[0], aColor);
        TFT_Driver_Con_Write(0x5c, aReset[0], aReset);
                
/*
          VX1818_OSD_ClearAll();
          VX1818_OSD_ShowString(0x20, (BYTE *)aBright);
          VX1818_OSD_ShowString(0x30, (BYTE *)aContrast);
          VX1818_OSD_ShowString(0x40, (BYTE *)aColor);
          VX1818_OSD_ShowString(0x50, (BYTE *)aReset);
*/          
   // 2. set color / highlight
          VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x03,0x14,__bTftSetupMode,__bTftSetupMode);
   // 3. show the bar
          for(__bTftTemp1 =TFT_SETUP_BEGIN;__bTftTemp1 < TFT_SETUP_RESET;__bTftTemp1 ++)
                         VX1818_OSD_ShowBar(__bTftTemp1);
   //    enable blocks
 //         VX1818_OSD_Enable(0x02); //yhtang_0719
          
}

void VX1818_OSD_ShowBar(BYTE bPara)
{
    BYTE i;
BYTE  bOsdTemp;
    if(bPara == 1)     bOsdTemp = __bTftBright;
    else if(bPara == 2) bOsdTemp = __bTftContrast;
    else if(bPara == 3) bOsdTemp = __bTftColor;

    bPara = 0x20 + (bPara -1)* 0x14 + 2;
    TFT_Driver_Write(OSD_INITIAL_ADDR,bPara);
    TFT_Driver_Write(OSD_WRITE_DATA,0x58);
    bPara++;
    for (i=0;i<16;i++) //16
    {
      TFT_Driver_Write(OSD_INITIAL_ADDR,bPara+i);
      if(i< bOsdTemp)
           TFT_Driver_Write(OSD_WRITE_DATA,0x61);
      else
           TFT_Driver_Write(OSD_WRITE_DATA,0x59);
    }
    bPara += 16;
    TFT_Driver_Write(OSD_INITIAL_ADDR,bPara);
    TFT_Driver_Write(OSD_WRITE_DATA,0x62);
}

void VX1818_OSD_Test(void)
{

    BYTE i;
    _REG[0] = 18;
    _REG[1] = 0x58;
    _REG[18] = 0x62;
    for(i=2;i<=17;i++)
           _REG[i] = 0x61;
//  BYTE code bTest[] = {18,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x62};
    TFT_Driver_Con_Write(0x22, _REG[0], _REG);

}


void TFT_OSD_Initial(void)
{
          VX1818_OSD_Initial();
}

void TFT_OSD_UpdateMode(void)
{
	if(__bTftSetupMode==TFT_SETUP_BEGIN)
	{
          VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0,0,TFT_SETUP_END,TFT_SETUP_END);
		}
	else
		{
          VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0,0,__bTftSetupMode-1,__bTftSetupMode-1);
		}
           if(__bTftSetupMode <TFT_SETUP_END)
              VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x00,0x15,__bTftSetupMode,__bTftSetupMode);
           else
              VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x0,0x05,__bTftSetupMode,__bTftSetupMode);
}

void TFT_OSD_Battery(BYTE bBatt)
{
	if(bBatt)
	{
	TFT_Driver_Write(0X54,aBattery[0]);  //OSD TITLE SIZE
	TFT_Driver_Write(0X55,0);  //OSD TITLE HILIGHT BEGIN POSITION
	TFT_Driver_Write(0X56,0);  //OSD TITLE HILIGHT STOP POSITION
	TFT_Driver_Write(0X57,0);  //OSD TITLE BLINK BEGIN POSITION
	TFT_Driver_Write(0X58,aBattery[0]);  //OSD TITLE BLINK STOP  POSITION
	TFT_Driver_Write(0X59,0X15);  //OSD TITLE X POSITION
	TFT_Driver_Write(0X5A,0X07);  //OSD TITLE Y POSITION
	TFT_Driver_Write(0X5B,0X8C);  //OSD TITLE COLOR
	TFT_Driver_Write(0X5C,0X8C);  //OSD TITLE COLOR
	TFT_Driver_Write(0Xfd,0X10);  //OSD TITLE COLOR
	
       TFT_Driver_Con_Write(0,aBattery[0],aBattery);
//         VX1818_OSD_SetHighLightBlink(BLOCK_TITLE,1,0x0,0x10,0,0);
          VX1818_OSD_Enable(0x04);
	}
	else
		{
    VX1818_OSD_DisEnable(0x04);  // hwtan.portable ??? need testing
		}
}

void TFT_OSD_Off(void)
{
    VX1818_OSD_DisEnable(0x02);  // hwtan.portable ??? need testing
//    VX1818_OSD_ClearAll(); //yhtang_0719
}

void TFT_OSD_SHOW_AVIN(void)
{
	TFT_Driver_Write(0X54,aAv[0]);  //OSD TITLE SIZE
	TFT_Driver_Write(0X55,0);  //OSD TITLE HILIGHT BEGIN POSITION
	TFT_Driver_Write(0X56,aAv[0]);  //OSD TITLE HILIGHT STOP POSITION
	TFT_Driver_Write(0X57,0);  //OSD TITLE BLINK BEGIN POSITION
	TFT_Driver_Write(0X58,0);  //OSD TITLE BLINK STOP  POSITION
	TFT_Driver_Write(0X59,0X20);  //OSD TITLE X POSITION
	TFT_Driver_Write(0X5A,0X07);  //OSD TITLE Y POSITION
//	TFT_Driver_Write(0X5B,0X8C);  //OSD TITLE COLOR
//	TFT_Driver_Write(0X5C,0X8C);  //OSD TITLE COLOR
		bTFT_Status |= TFT_FOREGROUND;  bTFT_Status &= ~TFT_HIGHLIGHT;
		//VX1818_OSD_SetColor(BLOCK_CONTENT, LIGHTGREEN);
		VX1818_OSD_SetColor(BLOCK_TITLE, YELLOW);
		bTFT_Status &= ~TFT_FOREGROUND;  bTFT_Status &= ~TFT_HIGHLIGHT;
		VX1818_OSD_SetColor(BLOCK_TITLE, TRANSPORT);
		bTFT_Status |= TFT_FOREGROUND;  bTFT_Status |= TFT_HIGHLIGHT;
		VX1818_OSD_SetColor(BLOCK_TITLE, HOTPINK);
		bTFT_Status &= ~TFT_FOREGROUND;  bTFT_Status |= TFT_HIGHLIGHT;
		VX1818_OSD_SetColor(BLOCK_TITLE, TRANSPORT);

	TFT_Driver_Write(0Xfd,0X10);  //OSD TITLE COLOR
	
       TFT_Driver_Con_Write(0,aAv[0],aAv);
}

#endif

// ***********************************************************
// Function TFT_Driver_Write
// write config settings into TFT Drvier's register(I2C with subaddress)
// argument: bSunAddr -- the IC's sub_address you want to write to
//           vValue  -- the value you want to write
// return : none
// note:
// ***********************************************************
void TFT_Driver_Write(BYTE bSubAddr,BYTE bValue)
{
//   extern void  _I2C_Write();
   _REG[0] = bSubAddr;
   _REG[1] = bValue;
   _I2C_Write(VX1818_ID,(BYTE *)_REG,2);
}

// note, the bcount can not exceed 26 
void TFT_Driver_Con_Write(BYTE bSubAddr,BYTE  bCount, BYTE* pbValue)
{
   BYTE i;
   for(i=0;i<bCount;i++) {
         TFT_Driver_Write(OSD_INITIAL_ADDR, bSubAddr +i);
        TFT_Driver_Write(OSD_WRITE_DATA,pbValue[i+1]);
   }
}
// ***********************************************************
// Function TFT_Drive_Read
// Read config settings from TFT Driver IC's register(I2C with subaddress, VX1818 ,eg)
// argument: bAddr -- the IC's sub_address you want to write to
// return :     the value read out
// note:
// ***********************************************************
BYTE TFT_Driver_Read(BYTE bAddr)
{
    extern BYTE _bHALTemp;
    _I2C_Read( VX1818_ID, bAddr, 1, &_bHALTemp);
    return _bHALTemp;
}



⌨️ 快捷键说明

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