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

📄 lcd_func.c

📁 Realtek 公司的RTD2523A芯片原厂source code,没有被修改过的。
💻 C
📖 第 1 页 / 共 4 页
字号:
    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 + -