📄 lcd_func.c
字号:
Data[5] = 0x00;
Data[6] = 0x00;
Data[7] = 0x00;
Data[8] = 0x00;
Data[9] = 0x00;
Data[10] = 0x00;
ucModeIdx = 0;
do
{
Data[2] = ucModeIdx << 3;
ucModeIdx = ucModeIdx + 1;
I2CWrite(Data);
Delay_Xms(SET_2404_DELAY);
}
while (26 > ucModeIdx);
// Reset display settings
Data[0] = 7;
Data[1] = ADDR_EROM0;
Data[2] = 0;
Data[3] = 0x80; // stMUD.H_POSITION;
Data[4] = 0x80; // stMUD.V_POSITION;
Data[5] = 0x80; // stMUD.CLOCK;
Data[6] = 0x00; // stMUD.PHASE;
ucModeIdx = 0;
do
{
Data[2] = ucModeIdx << 2;
ucModeIdx = ucModeIdx + 1;
switch (ucModeIdx)
{
case MODE_YUV60HZ :
Data[3] = 0xbc; // VBRIGHT
Data[4] = 0x65 ^ 0x80; // VCONTRAST
Data[5] = 0x64 ^ 0x80; // VSATURATION
Data[6] = 0x00 ^ 0x80; // VHUE
break;
case MODE_YUV50HZ :
Data[3] = 0xb1; // VBRIGHT
Data[4] = 0x5f ^ 0x80; // VCONTRAST
Data[5] = 0x65 ^ 0x80; // VSATURATION
Data[6] = 0x00 ^ 0x80; // VHUE
break;
#if (VIDEO_CHIP == VDC_SAA7118)
case MODE_VIDEO60HZ :
Data[3] = 0x96; // VBRIGHT
Data[4] = 0x48 ^ 0x80; // VCONTRAST
Data[5] = 0x4a ^ 0x80; // VSATURATION
Data[6] = 0xff ^ 0x80; // VHUE
break;
case MODE_VIDEO50HZ :
Data[3] = 0x83; // VBRIGHT
Data[4] = 0x48 ^ 0x80; // VCONTRAST
Data[5] = 0x43 ^ 0x80; // VSATURATION
Data[6] = 0x00 ^ 0x80; // VHUE
break;
#else
case MODE_VIDEO60HZ :
Data[3] = 0x95; // VBRIGHT
Data[4] = 0x47 ^ 0x80; // VCONTRAST
Data[5] = 0x48 ^ 0x80; // VSATURATION
Data[6] = 0xff ^ 0x80; // VHUE
break;
case MODE_VIDEO50HZ :
Data[3] = 0x82; // VBRIGHT
Data[4] = 0x47 ^ 0x80; // VCONTRAST
Data[5] = 0x42 ^ 0x80; // VSATURATION
Data[6] = 0x00 ^ 0x80; // VHUE
break;
#endif
}
I2CWrite(Data);
Delay_Xms(SET_2404_DELAY);
}
while (64 > ucModeIdx);
// Reset auto result
Data[0] = 7;
Data[1] = ADDR_EROM2;
Data[2] = 0;
Data[3] = 0x80; // ucAUTO_HPOS;
Data[4] = 0x80; // ucAUTO_VPOS;
Data[5] = 0x80; // ucAUTO_SCLK;
Data[6] = 0x80; // Reserved;
ucModeIdx = 0;
do
{
Data[2] = ucModeIdx << 2;
ucModeIdx = ucModeIdx + 1;
I2CWrite(Data);
Delay_Xms(SET_2404_DELAY);
}
while (64 > ucModeIdx);
}
void Check_EEPROM(void)
{
I2CRead(ADDR_EROM1, 0xFE , 2);
if ((INIT_EEPROM1[17] != Data[0]) || (INIT_EEPROM1[18] != Data[1]))
{
Delay_Xms(SET_2404_DELAY);
Init_GUD();
Init_MUD();
}
else
{
Load_GUD0(); // Read Global User Data 0 from EEPROM 2404
Load_GUD1(); // Read Global User Data 1 from EEPROM 2404
Load_GUD2(); // Read Global User Data 2 from EEPROM 2404
Load_GUD3(); // Read Global User Data 3 from EEPROM 2404
Load_GUD4(); // Read Global User Data 4 from EEPROM 2404
}
}
#if (TV_CHIP != TV_NONE)
void Set_TV_Channel()
{
if (0 == stGUD3.CURR_CHANNEL)
{
stGUD3.CURR_CHANNEL = 1;
}
else if (MAX_CATV_NUM < stGUD3.CURR_CHANNEL)
{
stGUD3.CURR_CHANNEL = MAX_CATV_NUM;
}
else if (0 == (stGUD3.TV_SETTING & 0x01) && MAX_AIR_NUM < stGUD3.CURR_CHANNEL)
{
stGUD3.CURR_CHANNEL = MAX_AIR_NUM;
}
((unsigned int *)Data)[1] = (stGUD3.TV_SETTING & 0x01) ? CATV_Freq[stGUD3.CURR_CHANNEL - 1] : AIR_Freq[stGUD3.CURR_CHANNEL - 1];
#if (TV_CHIP == TV_FI1236)
Data[0] = 6;
Data[1] = ADDR_TUNER;
Data[4] = 0xce;
Data[5] = (VHF_LOW_FREQ > (((unsigned int *)Data)[1] / 16)) ? 0xa0 : (VHF_HIGH_FREQ > (((unsigned int *)Data)[1] / 16)) ? 0x90 : 0x30;
I2CWrite(Data);
#endif
#if (TV_CHIP == TV_FQ1216)
Data[0] = 6;
Data[1] = ADDR_TUNER;
Data[4] = 0x8e;
Data[5] = (VHF_LOW_FREQ > (((unsigned int *)Data)[1] / 16)) ? 0xa1 : (VHF_HIGH_FREQ > (((unsigned int *)Data)[1] / 16)) ? 0x91 : 0x31;
I2CWrite(Data);
#endif
}
void Prev_Channel()
{
if (0 == stGUD3.CURR_CHANNEL) stGUD3.CURR_CHANNEL = 1;
stGUD3.PREV_CHANNEL = stGUD3.CURR_CHANNEL;
Data[1] = 0;
while (1)
{
if (1 == stGUD3.CURR_CHANNEL)
stGUD3.CURR_CHANNEL = (stGUD3.TV_SETTING & 0x01) ? MAX_CATV_NUM : MAX_AIR_NUM;
else
stGUD3.CURR_CHANNEL = stGUD3.CURR_CHANNEL - 1;
if (stGUD3.PREV_CHANNEL == stGUD3.CURR_CHANNEL) break;
Data[2] = stGUD3.CURR_CHANNEL - 1;
Data[3] = 1 << (7 - (Data[2] & 0x07));
Data[4] = 0xd0 + (Data[2] >> 3);
if (Data[4] != Data[1])
{
Data[1] = Data[4];
I2CRead(ADDR_EROM1, Data[4], 1);
}
if (Data[0] & Data[3])
{
Set_TV_Channel();
Save_GUD3();
break;
}
}
}
void Next_Channel()
{
if (0 == stGUD3.CURR_CHANNEL) stGUD3.CURR_CHANNEL = 1;
stGUD3.PREV_CHANNEL = stGUD3.CURR_CHANNEL;
Data[1] = 0;
while (1)
{
if (((0 == (stGUD3.TV_SETTING & 0x01)) && (MAX_AIR_NUM == stGUD3.CURR_CHANNEL)) || MAX_CATV_NUM == stGUD3.CURR_CHANNEL)
stGUD3.CURR_CHANNEL = 1;
else
stGUD3.CURR_CHANNEL = stGUD3.CURR_CHANNEL + 1;
if (stGUD3.PREV_CHANNEL == stGUD3.CURR_CHANNEL) break;
Data[2] = stGUD3.CURR_CHANNEL - 1;
Data[3] = 1 << (7 - (Data[2] & 0x07));
Data[4] = 0xd0 + (Data[2] >> 3);
if (Data[4] != Data[1])
{
Data[1] = Data[4];
I2CRead(ADDR_EROM1, Data[4], 1);
}
if (Data[0] & Data[3])
{
Set_TV_Channel();
Save_GUD3();
break;
}
}
}
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// THE CODE BELOW IS ONLY FOR DEBUG
// RTD_Test() - For KINGMICE
// OSD_Show_Check() - Display information on OSD
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if (KINGMICE)
void RTD_Test(void)
{
static unsigned char idata ucI2C_Addr;
static unsigned char idata ucI2C_Data;
static unsigned char idata ucRTD_Data;
do
{
while (ucROM_A4 & 0x01) // if action,
{
if (ucROM_A4 & 0x02) // read
{
if (ucROM_A4 & 0x10) // if IIC_index
{
I2CRead(ucI2C_Addr, ucROM_A3, 0x01);
ucPRN_7 = Data[0];
}
else if (ucROM_A4 & 0x40) // if RTD_index
{
RTDRead(ucROM_A3, 0x01, N_INC);
ucPRN_7 = Data[0];
}
else if (ucROM_A4 & 0x80) // if 8051_index
{
ucPRN_7 = *((unsigned char *)ucROM_A3);
}
}
else // write
{
if (ucROM_A4 & 0x04) // if IIC_addr
{
ucI2C_Addr = ucROM_A3;
}
else if (ucROM_A4 & 0x08) // if IIC_data
{
ucI2C_Data = ucROM_A3;
}
else if (ucROM_A4 & 0x10) // if IIC_index
{
Data[0] = 4;
Data[1] = ucI2C_Addr;
Data[2] = ucROM_A3;
Data[3] = ucI2C_Data;
I2CWrite(Data);
}
else if (ucROM_A4 & 0x20) // if RTD_data
{
ucRTD_Data = ucROM_A3;
}
else if (ucROM_A4 & 0x40) // if RTD_index
{
Data[0] = 4;
Data[1] = N_INC;
Data[2] = ucROM_A3;
Data[3] = ucRTD_Data;
Data[4] = 0;
RTDWrite(Data);
}
else if (ucROM_A4 & 0x80) // if 8051_index
{
*((unsigned char *)ucROM_A3) = Data[0];
}
}
if (ucROM_A5) { } // clear action
}
}
while (ucROM_A0 & 0x80);
}
#else // Not KINGMICE
void RTD_Test(void)
{
#if (ISPACK)
static unsigned char idata ucAddr, ucValue;
unsigned char ucStatus, ucStop, DDC_SUB_IN, DDC_DATA_IN;
unsigned char idata *MEM_MAP;
ucStop = 0;
do
{
RTDRead(DDC_STATUS_F4, 1,N_INC);
ucStatus = Data[0]; // Read DDC_STATUS;
if (ucStatus & 0x04) // DDC_DATA_IN latched
{
RTDRead(DDC_SUB_IN_F1, 2, Y_INC);
DDC_SUB_IN = Data[0];
DDC_DATA_IN = Data[1];
RTDSetByte(DDC_STATUS_F4,0x00); //Write once to clear status
if (DDC_SUB_IN & 0x80) // run/stop command
{
ucStop = DDC_DATA_IN;
}
else if (DDC_SUB_IN & 0x40) // read command
{
switch (DDC_SUB_IN & 0x0f)
{
case 0x01 :
RTDRead(DDC_DATA_IN, 1, N_INC);
RTDSetByte(DDC_DATA_OUT_F3, Data[0]);
break;
case 0x04 :
I2CRead(ucAddr, DDC_DATA_IN, 1);
RTDSetByte(DDC_DATA_OUT_F3, Data[0]);
break;
case 0x05 :
MEM_MAP = DDC_DATA_IN;
RTDSetByte(DDC_DATA_OUT_F3, *MEM_MAP);
break;
case 0x07 :
switch (DDC_DATA_IN)
{
case 0x80:
RTDSetByte(DDC_DATA_OUT_F3, P0);
break;
case 0x90:
RTDSetByte(DDC_DATA_OUT_F3, P1);
break;
case 0xa0:
RTDSetByte(DDC_DATA_OUT_F3, P2);
break;
case 0xb0:
RTDSetByte(DDC_DATA_OUT_F3, P3);
break;
default:
break;
}
}
}
else
{
switch (DDC_SUB_IN & 0x0f)
{
case 0x00 :
RTDSetByte(ucAddr,DDC_DATA_IN);
break;
case 0x01 :
case 0x02 :
ucAddr = DDC_DATA_IN;
break;
case 0x03 :
case 0x06 :
case 0x08 :
ucValue = DDC_DATA_IN;
break;
case 0x04 :
Data[0] = 4;
Data[1] = ucAddr;
Data[2] = DDC_DATA_IN;
Data[3] = ucValue;
I2CWrite(Data);
break;
case 0x05 :
MEM_MAP = DDC_DATA_IN;
break;
case 0x07 :
ucAddr = DDC_DATA_IN;
switch (ucAddr)
{
case 0x80 :
P0 = ucValue;
break;
case 0x90 :
P1 = ucValue;
break;
case 0xa0 :
P2 = ucValue;
break;
case 0xb0 :
P3 = ucValue;
break;
default:
break;
}
break;
}
}
}
}
while (1 == ucStop);
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -