📄 function.c
字号:
{
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 + -