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

📄 lcd_main.c

📁 keil c51平台,此代码可用于学习TFT LCD TV 搜台等,(本人自己修改)
💻 C
📖 第 1 页 / 共 5 页
字号:
    else if (0x47 < Data[0])
        Data[1] = 0x0d;
    else if (0x37 < Data[0])
        Data[1] = 0x0e;
    else
        Data[1] = 0x0f;

    RTDSetByte(DPLL_FILTER_D3, Data[1]);
    RTDSetByte(DPLL_SSP_D4, 0xf7);
#endif

    Init_Input_Source();    // Initial Mode & OSD
}

void Reset_RTD(void)
{
    bRTD_RST    = 0;
    Delay_Xms(10);
    do
    {
        // Wait for reset complete
        bRTD_RST    = 1;
        Delay_Xms(6);
    }
    while (!bRTD_RST);

    // Initial RTD3000 & free background display
    RTDCodeW(RTD_PWUP_INI);
#if(HDCP_ENABLE)
    RTDCodeW(BKSV);
    KEYCodeW(HDCP_KEY_A_Port);
#endif

    RTDCodeW(RTD_DDC_TABLE);
    RTDCodeW(RTD_IO_INI);

    RTDSetByte(HOSTCTRL_02, 0x40);          // Wake RTD up

    RTDCodeW(FreeV);

    RTDSetByte(VDIS_SIGINV_21, 0x00);       // DHS, DVS, DEN, DCLK MUST NOT be inverted.
    RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01);    // DHS, DVS, DEN, DCLK and data are clamped to 0

    // Initial RTD3000-OSD
    RTDCodeW(OSD_PWUP_INI);
    RTDCodeW(OSD_Reset);


    RTDCodeW(Palette_Open);
    RTDCodeW(Palette_7);
    RTDCodeW(Palette_Close);

    Set_Gamma();
    Set_Dithering();
    Set_Bright_Contrast();
}

#if(INPUTSOURCE  ==    VIDEO_ONLY)
void Init_Input_Source(void)
{       
    ucMode_Found    = MODE_NOSUPPORT;
    ucMode_Curr     = MODE_NOSIGNAL;
    ucMode_Times    = 0;
    ucAV_Mode       = 0;
    bVpole_Curr     = 1;                // The initial set of polarity is positive
    bHpole_Curr     = 1;                // The initial set of polarity is positive
    
    stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_AV;
    PowerDown_ADC();
    
    PowerUp_VDC();
    Delay_Xms(10);
#if (VIDEO_CHIP == TW_9905 )
    I2CWrite_TW990X(0x03,0x82);
    I2CWrite_TW990X(0x08,0x12);
    I2CWrite_TW990X(0x09,0xf4);
    I2CWrite_TW990X(0x0b,0xd0);
    I2CWrite_TW990X(0x19,0x58);
    I2CWrite_TW990X(0x55,0x10);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
    I2CWrite(V_ENABLE);         // VIDEO ENABLE
    I2CWrite(VIDEO_ALL);
    I2CWrite(AV_DETECT);        // VIDEO Detect(AV)
    I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
    
    ucInputSrc  = SOURCE_AV;
    RTDCodeW(VIDEO_INI);
    
    LoadVDC_Color();
}
#else
void Init_Input_Source(void)
{       
    ucMode_Found    = MODE_NOSUPPORT;
    ucMode_Curr     = MODE_NOSIGNAL;
    ucMode_Times    = 0;
    ucAV_Mode       = 0;
    bVpole_Curr     = 1;                // The initial set of polarity is positive
    bHpole_Curr     = 1;                // The initial set of polarity is positive
    bTVFlag    = 0;
    bFreeRun = 0;
    // Unknown signal source
    if (SOURCE_MAX < (stGUD1.INPUT_SOURCE & 0x07))
        stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
    
#if (VIDEO_CHIP == VDC_NONE)
    if (SOURCE_AV == (stGUD1.INPUT_SOURCE & 0x07) || SOURCE_SV == (stGUD1.INPUT_SOURCE & 0x07))
        stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
    
#if (TV_CHIP == TV_NONE)
    if (SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07))
        stGUD1.INPUT_SOURCE = (stGUD1.INPUT_SOURCE & 0xf8) | SOURCE_VGA;
#endif
    
    // Because internal ADC power state will not affect VGA mode detection,
    // we always turn off ADC when source changed, and turn it on again only 
    // when a valid VGA mode is going to display.
    PowerDown_ADC();
    
    switch (stGUD1.INPUT_SOURCE & 0x07)
    {
    case SOURCE_VGA:
        bTUNER_PD = 1; 
#if (VIDEO_CHIP == TW_9905 )
        PowerDown_VDC();
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
        I2CWrite(V_DISABLE);        // VIDEO DISABLE
        I2CWrite(V_NOWORK);         // VIDEO No Work
        PowerDown_VDC();
	PowerDown_TMDS();
#endif
        // Set user's ADC gain and offset settings
        SetADC_GainOffset();
        ucInputSrc  = SOURCE_VGA;        
        ucSync_Type = SYNC_SS;
        RTDCodeW(VGA_INI_SS);
        break;

  case SOURCE_DVI:
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 || VIDEO_CHIP == VDC_SAA7118)
        I2CWrite(V_DISABLE);        // VIDEO DISABLE
        I2CWrite(V_NOWORK);         // VIDEO No Work
        PowerDown_VDC();
#endif
        PowerUp_TMDS();
        ucInputSrc  = SOURCE_DVI;        
        RTDCodeW(DVI_INI);
        break;      
        
    case SOURCE_AV:
#if (VIDEO_CHIP == TW_9905 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        Reset_TW9905();
        Delay_Xms(10);
	I2CWrite_TW990X(0x03,0x82);
	I2CWrite_TW990X(0x08,0x12);
	I2CWrite_TW990X(0x09,0xf4);
	I2CWrite_TW990X(0x0b,0xd0);
	I2CWrite_TW990X(0x19,0x58);
	I2CWrite_TW990X(0x55,0x10);
#if(KOREA_NTSC)	    //V221
	I2CWrite_TW990X(0x0c,0xdc);
#endif
        Delay_Xms(10);
        I2CWrite_TW990X(0x02,0x40);//0100 0000 for AV
        Delay_Xms(10);        
        ucInputSrc  = SOURCE_AV;
        RTDCodeW(VIDEO_INI);

#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        I2CWrite(V_ENABLE);         // VIDEO ENABLE
        I2CWrite(VIDEO_ALL);
        I2CWrite(AV_DETECT);        // VIDEO Detect(AV)
        ucInputSrc  = SOURCE_AV;
        RTDCodeW(VIDEO_INI);
        I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
        LoadVDC_Color();
        break;
        
    case SOURCE_TV:
        bTVFlag = 1;
        bChanel_adj = 0;
        bVolume_adj = 0; 
        bBlueScreen = 0;
#if (VIDEO_CHIP == TW_9905 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        bTUNER_PD = 0;        
        Reset_TW9905();
        Delay_Xms(10);
	I2CWrite_TW990X(0x03,0x82);
	I2CWrite_TW990X(0x08,0x12);
	I2CWrite_TW990X(0x09,0xf4);
	I2CWrite_TW990X(0x0b,0xd0);
	I2CWrite_TW990X(0x19,0x58);
	I2CWrite_TW990X(0x55,0x10);
	I2CWrite_TW990X(0x1c,0x07);
#if(KOREA_NTSC)	    //V221
	I2CWrite_TW990X(0x0c,0xdc);
#endif	
        Delay_Xms(10);
        I2CWrite_TW990X(0x02,0x48);//0100 1000 for TV
        Delay_Xms(10);
        ucInputSrc  = SOURCE_TV;
#if (TV_CHIP != TV_NONE)
        Set_TV_Channel(1);
#endif
        RTDCodeW(VIDEO_INI);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        I2CWrite(V_ENABLE);         // VIDEO ENABLE
        I2CWrite(VIDEO_ALL);
        I2CWrite(AV_DETECT);        // VIDEO Detect(AV)
        ucInputSrc  = SOURCE_TV;
#if (TV_CHIP != TV_NONE)
        Set_TV_Channel(1);
#endif
        I2CWrite(TV_SOURCE_SEL);
        I2CWrite(TV_SCAN_GAIN);
        RTDCodeW(VIDEO_INI);
        I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
        LoadVDC_Color();
        break;
        
    case SOURCE_SV:
#if (VIDEO_CHIP == TW_9905 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        Reset_TW9905();
        Delay_Xms(10);
	I2CWrite_TW990X(0x03,0x82);
	I2CWrite_TW990X(0x08,0x12);
	I2CWrite_TW990X(0x09,0xf4);
	I2CWrite_TW990X(0x0b,0xd0);
	I2CWrite_TW990X(0x19,0x58);
	I2CWrite_TW990X(0x55,0x10);
#if(KOREA_NTSC)	    //V221
	I2CWrite_TW990X(0x0c,0xdc);
#endif
        Delay_Xms(10);        
        I2CWrite_TW990X(0x02,0x54);//0101 0100 for SV
        ucInputSrc  = SOURCE_SV;
        RTDCodeW(VIDEO_INI);
#endif
#if (VIDEO_CHIP == VDC_SAA7114 || VIDEO_CHIP == VDC_SAA7115 )
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        I2CWrite(V_ENABLE);         // VIDEO ENABLE
        I2CWrite(VIDEO_ALL);
        I2CWrite(SV_DETECT);        // VIDEO Detect(SV)
        ucInputSrc  = SOURCE_SV;
        RTDCodeW(VIDEO_INI);
        I2CRead(ADDR_VIDEO, 0x1f, 0x01);
#endif
        LoadVDC_Color();
        break;
        
    case SOURCE_YUV:
        PowerUp_VDC();
	PowerDown_TMDS();
        Delay_Xms(10);
        I2CWrite(V_ENABLE);         // VIDEO ENABLE
        I2CWrite(VIDEO_ALL);
        I2CWrite(VIDEO_YUV);
        
        I2CWrite(YUV_DETECT);       // VIDEO Detect(YUV)
        
        ucInputSrc  = SOURCE_YUV;
        RTDCodeW(VIDEO_INI);
        //        I2CRead(ADDR_VIDEO, 0x1f, 0x01);
        break;
    }
    
#if (AUDIO_TYPE != AUDIO_NONE)
    SetVolume();
#endif
}
#endif

void Free_Background(void)  // Force to FreeRun & Background
{
    RTDCodeW(FreeV);                            // Switch to free-running mode

    if (PANEL_OFF == bPANEL_PWR)
    {
        RTDSetByte(VDIS_SIGINV_21, 0x00);       // DHS, DVS, DEN, DCLK MUST NOT be inverted.
        RTDSetBit(VDIS_CTRL_20, 0xfd, 0x01);    // DHS, DVS, DEN, DCLK and data are clamped to 0
    }

    RTDSetBit(VGIP_CTRL_04, 0xfe, 0x00);        // Stop sampling input pixels

    // Blue background when input source is TV signal.
    RTDSetBit(VDIS_SIGINV_21, 0x0f, SOURCE_TV == (stGUD1.INPUT_SOURCE & 0x07) ? 0x10 : 0x00);
}

void Adjust_I_Code(void)
{
   // Calculate the IHF in KHz
	   ((unsigned int*)Data)[0] = 24576/usHsync; //Input Horizontal Frequency
	   //Formula: I_Correction = CE * 2 * Fav(253687) * 100 / IHF / 2^(I_Code - 34)
	   //Data[2] : I_Code = 14; I_Code[13] = 0;

	   ucI_Code = 14;
	   Data[2] = ((unsigned long)ucCE_Value * 50737400 / (unsigned long)((unsigned int*)Data)[0]) >> 20;
	   Data[3] = (I_Correction == 0) ? (ucPE_Level ? (Correct_Amount - ucP_Corr) : ((ucP_Corr >> 2) + 10)) : 
                                         I_Correction;
       
       

	   while(1)
	   {
		   
		   if(Data[2] > Data[3])
		   {
			   Data[2] = Data[2] >> 1;
			   ucI_Code -= 1;

			   if(Data[2] <= Data[3])
				   break;
		   }
		   else
		   {
			   if((Data[2] << 1) > Data[3])
				   break;
			   else
			   {
				   Data[2] = Data[2] << 1;
				   ucI_Code += 1;
			   }
		   }
	   }
//             ucDebug_Value1 = ucP_Corr;
	
	   
       if((unsigned char)((unsigned int)Data[2]*3/2) <= Data[3]) // Judge if I_Code[13] set to 1 will more close to 155
	   {	         
             ucI_Code |= 0x80;
//			 ucDebug_Value2 = ((unsigned char)((unsigned int)Data[2]*3) >> 1);   
	   }
	   else
	   {
//	   		 ucDebug_Value2 = Data[2];   
		}
		

}
#if(BURNIN_MODE)
void BurnIn()
{
  static unsigned char Color = 0;
  static unsigned char ColorCounter = 100;
  
  unsigned char ucTemp;

       if (ColorCounter)      
	      ColorCounter   -= 1;
       else
       {  
                      
	       Color += 1;
		   if(Color == 8)
		   Color = 9;
	       if(Color == 16)
	       Color = 1;

		   ucTemp = 0x0d | (Color << 4);
#if(MCU_TYPE == MCU_WINBOND)
		   if (PANEL_ON == bPANEL_PWR)
#else
           if (PANEL_ON == MCU_ReadPanelPower())
#endif
	       {
              Free_Background();
              Wait_For_Event(EVENT_IEN_STOP);     // Wait for Frame End
              RTDSetByte(VDIS_SIGINV_21,ucTemp);			 
		   }
           ColorCounter = 255;
		              
       }	    
}
#endif

⌨️ 快捷键说明

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