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

📄 function.c

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 C
📖 第 1 页 / 共 3 页
字号:
{
    long temp;
    temp = (I2CReadByte(HX8824_ADDR, HX8824_SATCOSHUE + 1) << 8) | I2CReadByte(HX8824_ADDR, HX8824_SATCOSHUE); // convert 0~255 to 0~100
    temp = temp*100/511;
    switch(S)
    {
        case 0:
            if(temp > 0)
                temp--;
            if(temp != 0)
                temp = temp*511/100 + 1;
            else
                temp = 0;
        break;
        case 1:
            if(temp < 100)
                temp++;
            if(temp != 100)
                temp = temp*511/100 + 1;
            else
                temp = 511;
        break;
    }
    I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE, temp);
    I2CWriteByte(HX8824_ADDR, HX8824_SATCOSHUE + 1, temp >> 8);
#if EEPROM
    I2CWriteByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), ParaAddress + EE_SAT_COS_HUE, temp);
    I2CWriteByte(EEPROM_MCU | (((ParaAddress + EE_SAT_COS_HUE)/256)*2), ParaAddress + EE_SAT_COS_HUE + 1, temp >> 8);
#endif
    OSDBarHandle(Item, 5, 6, 0x03, 0x05);
}
/* -------------------------------------------------------------------
  Name    : OSD_Pos_Adj
  Purpose : Adjust OSD position
  Passed  : +/-
  Returns :
  Notes   :
  ------------------------------------------------------------------- */

void OSD_Pos_Adj(Byte S)
{
    switch(S)
    {
        case 0:
            if(bOSDPOS > 0)
                bOSDPOS--;
        break;
        case 1:
            if(bOSDPOS < 4)
                bOSDPOS++;
        break;
    }
    I2CWrite2Byte(HX8824_ADDR, HX8824_BLOCK_POS_X, OSDPOSITION[bOSDPOS][0], OSDPOSITION[bOSDPOS][0] >> 8);
    I2CWrite2Byte(HX8824_ADDR, HX8824_BLOCK_POS_Y, OSDPOSITION[bOSDPOS][1], OSDPOSITION[bOSDPOS][1] >> 8);
}
/* -------------------------------------------------------------------
  Name    : VGA Set_Border
  Purpose : Set Border in VGA mode display
  Passed  : +/-
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void VGA_SetBorder(Byte S)
{
    switch(S)
    {
        case 0:   // border screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
            I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
            //I2CWriteByte(HX8824_ADDR, 0xA0, 0x00);  // 0x88
            //I2CWriteByte(HX8824_ADDR, 0xA1, 0x15);  // 0x13
            //I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
		//**************** PLL ************************************************
            I2CWriteByte(HX8824_ADDR, 0xD0, 0x08);
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x08);
            I2CWriteByte(HX8824_ADDR, 0xD2, 0x07);
            I2CWriteByte(HX8824_ADDR, 0xD3, 0xC7);
            I2CWriteByte(HX8824_ADDR, 0xD4, 0x00);
        break;
        case 1:   // full screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
            I2CWriteByte(HX8824_ADDR, 0x20, 0xCC);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x0C);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
            I2CWriteByte(HX8824_ADDR, 0xA0, 0xe2);  // 88  e2
            I2CWriteByte(HX8824_ADDR, 0xA1, 0x13);  // 17  13
            I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
        //*****************  PLL ********************************************************
            I2CWriteByte(HX8824_ADDR, 0xD0, 0x03);
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x04);
            I2CWriteByte(HX8824_ADDR, 0xD2, 0x08);
            I2CWriteByte(HX8824_ADDR, 0xD3, 0x63);
            I2CWriteByte(HX8824_ADDR, 0xD4, 0x00);
        break;
        default:
        break;
    }
}
/* -------------------------------------------------------------------
  Name    : NTSC Set_Border
  Purpose : Set Border in VGA mode display
  Passed  : +/-
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void NTSC_SetBorder(Byte S)
{
    switch(S)
    {
        case 0:   // border screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x12);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
		//**************** PLL ************************************************
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x07);
        break;
        case 1:   // full screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x65);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x0E);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
        //*****************  PLL ********************************************************
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x09);
        break;
        default:
        break;
    }
}
/* -------------------------------------------------------------------
  Name    : PAL Set_Border
  Purpose : Set Border in VGA mode display
  Passed  : +/-
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void PAL_SetBorder(Byte S)
{
    switch(S)
    {
        case 0:   // border screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x12);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x50);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
		//**************** PLL ************************************************
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x0B);
        //**************** CCIR 601 setting ***********************************
            I2CWriteByte(HX8824_ADDR, 0x11, 0x0F);  // input format CCIR601
            I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);  // input format internal Href
            I2CWriteByte(HX8824_ADDR, 0x12, 0x7A);  // input format Href position
            I2CWriteByte(HX8824_ADDR, 0x13, 0x00);  // input format Href position
            I2CWriteByte(HX8824_ADDR, 0x14, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x15, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x16, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x17, 0x00);  // input format V position

        break;
        case 1:   // full screen
            I2CWriteByte(HX8824_ADDR, 0x20, 0x65);
            I2CWriteByte(HX8824_ADDR, 0x21, 0x0E);
            I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
            I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
            I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
        //*****************  PLL ********************************************************
            I2CWriteByte(HX8824_ADDR, 0xD1, 0x0E);
        //***************** CCIR656 setting *********************************************
            I2CWriteByte(HX8824_ADDR, 0x11, 0x0F);  // input format CCIR656
            I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);  // input format external href
            I2CWriteByte(HX8824_ADDR, 0x12, 0x7A);  // input format Href position
            I2CWriteByte(HX8824_ADDR, 0x13, 0x00);  // input format Href position
            I2CWriteByte(HX8824_ADDR, 0x14, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x15, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x16, 0x00);  // input format V position
            I2CWriteByte(HX8824_ADDR, 0x17, 0x00);  // input format V position

        break;
        default:
        break;
    }
}
/* -------------------------------------------------------------------
  Name    : Change Video Frequency
  Purpose :
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void Change_Video_Frequency(void)
{
  code unsigned char _60Hz7114[6][2] = {{0x0E,0x89},{0x5a,0x06},{0x9a,0xF6},{0x9B,0x00},{0x9e,0xF6},
                                         {0x9F,0x00}};
  code unsigned char _50Hz7114[6][2] = {{0x0E,0x81},{0x5a,0x03},{0x9a,0x26},{0x9B,0x01},{0x9e,0x26},
                                         {0x9F,0x01},};
  Byte i;
  if(b60hz) { // NTSC
    for(i = 0; i < 6; i++)
      I2CWriteByte(SAA7114_ADDR, _60Hz7114[i][0], _60Hz7114[i][1]);
	if (bSource == 0)
    	I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) & 0x7F); // check if composite
	else											  
    	I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) | 0x80); // check if S-video		
    I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) | 0x40); // disable YCOMB
    I2CWriteByte(SAA7114_ADDR, 0x0e, I2CReadByte(SAA7114_ADDR, 0x0e) | 0x09); //
    I2CWriteByte(SAA7114_ADDR, 0x0f, 0x2a);
    I2CWriteByte(SAA7114_ADDR, 0x10, 0x0e);
    }
  else { // PAL
    for(i = 0; i < 6; i++)
      I2CWriteByte(SAA7114_ADDR, _50Hz7114[i][0], _50Hz7114[i][1]);
	if (bSource == 0)
    	I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) & 0x7F); // check if composite
	else											  
    	I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) | 0x80); // check if S-video
    I2CWriteByte(SAA7114_ADDR, 0x09, I2CReadByte(SAA7114_ADDR, 0x09) | 0x40);
    I2CWriteByte(SAA7114_ADDR, 0x0e, I2CReadByte(SAA7114_ADDR, 0x0e) & 0xf7);
    I2CWriteByte(SAA7114_ADDR, 0x0e, I2CReadByte(SAA7114_ADDR, 0x0e) | 0x01);
    I2CWriteByte(SAA7114_ADDR, 0x0f, 0x2a);
    I2CWriteByte(SAA7114_ADDR, 0x10, 0x06);
    }
  }

/* -------------------------------------------------------------------
  Name    : VGA Non Linear Scaling
  Purpose :
  Passed  : no.
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void VGA_Non_Linear_Scaling(Byte S)
{
    Byte i;
    code unsigned char VGA_Non_Linear[3][20][2] = {{// no need to write Y direction
                                          {0x20,0x00},{0x21,0x0C},{0x22,0x64},{0x23,0x10}, // X1
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x20}, // X2
                                          {0x20,0x99},{0x21,0x0D},{0x22,0xC8},{0x23,0x30}, // X3
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x40}, // X4
                                          {0x20,0x00},{0x21,0x0C},{0x22,0x64},{0x23,0x50}},// X5
                                          {
                                          {0x20,0x33},{0x21,0x0B},{0x22,0x64},{0x23,0x10}, // X1
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x20}, // X2
                                          {0x20,0x66},{0x21,0x0E},{0x22,0xC8},{0x23,0x30}, // X3
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x40}, // X4
                                          {0x20,0x33},{0x21,0x0B},{0x22,0x64},{0x23,0x50}},// X5
                                          {
                                          {0x20,0x99},{0x21,0x09},{0x22,0x64},{0x23,0x10}, // X1
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x20}, // X2
                                          {0x20,0x00},{0x21,0x10},{0x22,0xC8},{0x23,0x30}, // X3
                                          {0x20,0xCC},{0x21,0x0C},{0x22,0xC8},{0x23,0x40}, // X4
                                          {0x20,0x99},{0x21,0x09},{0x22,0x64},{0x23,0x50}} // X5

                                         };
    for(i = 0; i < 20; i++)
      I2CWriteByte(HX8824_ADDR, VGA_Non_Linear[S][i][0], VGA_Non_Linear[S][i][1]);
}
/* -------------------------------------------------------------------
  Name    : NTSC Non Linear Scaling
  Purpose :
  Passed  : no.
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void NTSC_Non_Linear_Scaling(Byte S)
{
    Byte i;
    code unsigned char NTSC_Non_Linear[1][20][2] = {{// no need to write Y direction
                                          {0x20,0x99},{0x21,0x0D},{0x22,0x64},{0x23,0x10}, // X1
                                          {0x20,0x66},{0x21,0x0E},{0x22,0xc8},{0x23,0x20}, // X2
                                          {0x20,0x33},{0x21,0x0F},{0x22,0xc8},{0x23,0x30}, // X3
                                          {0x20,0x66},{0x21,0x0E},{0x22,0xc8},{0x23,0x40}, // X4
                                          {0x20,0x99},{0x21,0x0D},{0x22,0x64},{0x23,0x50}}// X5
                                         };
    for(i = 0; i < 20; i++)
      I2CWriteByte(HX8824_ADDR, NTSC_Non_Linear[S][i][0], NTSC_Non_Linear[S][i][1]);
}
/* -------------------------------------------------------------------
  Name    : Gamma adjust
  Purpose :
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */
void Gamma_Adj()
{
    Word i;

    for(i = 0; i <= 255; i++)
    {
        I2CWriteByte(HX8824_ADDR, 0x51, i);
        I2CWriteByte(HX8824_ADDR, 0x52, i); // red
        I2CWriteByte(HX8824_ADDR, 0x53, i); // blue
        I2CWriteByte(HX8824_ADDR, 0x54, i);	// green
    }
    I2CWriteByte(HX8824_ADDR, HX8824_GAMMA_EN, 0x00);
}
/* -------------------------------------------------------------------
  Name    : NTSC Vertical scaling
  Purpose : for stupid use
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */

void NTSC_Vertical_Scaling(Byte S)
{
    Byte i;
    code unsigned char V_Scaling[2][53][2] =
    {{{0x00, 0xD0}, {0x01, 0x02}, {0x02, 0xF0}, {0x03, 0x00}, {0x10, 0x1C}, {0x11, 0x0F}, {0x12, 0x7A},
      {0x13, 0x00}, {0x14, 0x00}, {0x15, 0x00}, {0x16, 0x00}, {0x17, 0x00}, {0x19, 0x00}, {0x20, 0x66},
      {0x21, 0x06}, {0x22, 0xFF}, {0x23, 0x0F}, {0x20, 0x65}, {0x21, 0x0E}, {0x22, 0xFF}, {0x23, 0x1F},
      {0x24, 0x00}, {0x25, 0x00}, {0x24, 0x00}, {0x25, 0x04}, {0x27, 0x01}, {0xA0, 0x00}, {0xA1, 0x05},
     // {0xA2, 0x00}, {0x90, 0xF8}, {0x91, 0x03}, {0x92, 0x48}, {0x93, 0x00}, {0x94, 0x90}, {0x95, 0x00},  // 11/02 become brighter
      {0xA2, 0x00}, {0x90, 0xF7}, {0x91, 0x03}, {0x92, 0x48}, {0x93, 0x00}, {0x94, 0x90}, {0x95, 0x00},
      {0x96, 0x20}, {0x97, 0x03}, {0x98, 0x92}, {0x99, 0x02}, {0x9A, 0x13}, {0x9B, 0x00}, {0x9C, 0x26},
      {0x9D, 0x00}, {0x9E, 0x58}, {0x9F, 0x02}, {0xD0, 0x08}, {0xD1, 0x09}, {0xD2, 0x09}, {0xD3, 0x2B},
      {0xD4, 0x01}, {0x29, 0x00}, {0x81, 0x3C}, {0x80, 0x00}
     },
     {{0x00, 0xD0}, {0x01, 0x02}, {0x02, 0xF3}, {0x03, 0x00}, {0x10, 0x1C}, {0x11, 0x0F}, {0x12, 0x7A},
      {0x13, 0x00}, {0x14, 0x00}, {0x15, 0x00}, {0x16, 0x00}, {0x17, 0x00}, {0x19, 0x00}, {0x20, 0x19},
      {0x21, 0x08}, {0x22, 0xFF}, {0x23, 0x0F}, {0x20, 0x65}, {0x21, 0x0E}, {0x22, 0xFF}, {0x23, 0x1F},
      {0x24, 0x00}, {0x25, 0x00}, {0x24, 0x00}, {0x25, 0x04}, {0x27, 0x01}, {0xA0, 0x34}, {0xA1, 0x09},//B4,11,00
      {0xA2, 0x00}, {0x90, 0x2F}, {0x91, 0x04}, {0x92, 0x35}, {0x93, 0x00}, {0x94, 0x70}, {0x95, 0x00},
      {0x96, 0x20}, {0x97, 0x03}, {0x98, 0x0D}, {0x99, 0x02}, {0x9A, 0x03}, {0x9B, 0x00}, {0x9C, 0x1D},
      {0x9D, 0x00}, {0x9E, 0xE0}, {0x9F, 0x01}, {0xD0, 0x08}, {0xD1, 0x09}, {0xD2, 0x07}, {0xD3, 0xC7},
      {0xD4, 0x00}, {0x29, 0x00}, {0x81, 0x04}, {0x80, 0x00}
     }};

    for(i = 0; i < 53; i++)
      I2CWriteByte(HX8824_ADDR, V_Scaling[S][i][0], V_Scaling[S][i][1]);
}
/* -------------------------------------------------------------------
  Name    : PAL Vertical scaling
  Purpose : for stupid use
  Passed  :
  Returns :
  Notes   :
  ------------------------------------------------------------------- */

void PAL_Vertical_Scaling(Byte S)

⌨️ 快捷键说明

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