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

📄 scaler.c

📁 台湾联咏NT68663 LCD MONITOR 控制程序(完整版)
💻 C
📖 第 1 页 / 共 4 页
字号:
	#endif
}

void LoadADC_Gain(void)
{
	Byte Temp;
	if(FuncBuf[pVIDEOSOURCE] == 2){
		FuncBuf[pROFFSET] = Read24C16(ep_YPbPr_R_Offset);
		Temp = FuncBuf[pROFFSET];
		WriteIIC563(0x003,Temp);
		FuncBuf[pGOFFSET] = Read24C16(ep_YPbPr_G_Offset);
		Temp = FuncBuf[pGOFFSET];
		WriteIIC563(0x006,Temp);
		FuncBuf[pBOFFSET] = Read24C16(ep_YPbPr_B_Offset);
		Temp = FuncBuf[pBOFFSET];
		WriteIIC563(0x009,Temp);
	}
	else{
		FuncBuf[pROFFSET] = Read24C16(ep_ADC_R_Offset);
		Temp = FuncBuf[pROFFSET];
		WriteIIC563(0x003,Temp);
		FuncBuf[pGOFFSET] = Read24C16(ep_ADC_G_Offset);
		Temp = FuncBuf[pGOFFSET];
		WriteIIC563(0x006,Temp);
		FuncBuf[pBOFFSET] = Read24C16(ep_ADC_B_Offset);
		Temp = FuncBuf[pBOFFSET];
		WriteIIC563(0x009,Temp);
	}
	
	FuncBuf[pRADC] = Read24C16(ep_ADC_R_Gain);
	WriteIIC563(0x001,FuncBuf[pRADC]);
	FuncBuf[pGADC] = Read24C16(ep_ADC_G_Gain);
	WriteIIC563(0x004,FuncBuf[pGADC]);
	FuncBuf[pBADC] = Read24C16(ep_ADC_B_Gain);
	WriteIIC563(0x007,FuncBuf[pBADC]);
	//Set backend gain
#if ContrastBlock == sRGBGain
	WriteIIC563(0x061,0x0d);
	WriteIIC563(0x063,0x80);
	WriteIIC563(0x061,0x0e);
	WriteIIC563(0x063,0x80);
	WriteIIC563(0x061,0x0f);
	WriteIIC563(0x063,0x80);
#endif
}
void SetADCGain(Byte Color)
{
	Word value;
	value = (unsigned short)FuncBuf[Color];
	switch(Color)
	{
		case pRADC:
			WriteIIC563(0x001,value);
			break;
		case pGADC:
			WriteIIC563(0x004,value);
			break;
		case pBADC:
			WriteIIC563(0x007,value);
			break;
	}
 }

void SetADCOffset(Byte Color)
{
	Word value;
	value = (unsigned short)FuncBuf[Color];
	switch(Color)
	{
		case pROFFSET:
			WriteIIC563(0x003,value);
			break;
		case pGOFFSET:
			WriteIIC563(0x006,value);
			break;
		case pBOFFSET:
			WriteIIC563(0x009,value);
			break;
	}
 }

void SetLightContrast(void)
{
	Word value;
#if PRINT_MESSAGE
		printf("FuncBuf[pLIGHTCONTRAST] = %x\n",(unsigned short)FuncBuf[pLIGHTCONTRAST]);
#endif
	value = FuncBuf[pLIGHTCONTRAST] * 255 / 100;		//78 ---- 178
	WriteIIC563(0x061,0x0c);
	WriteIIC563(0x13a,value);
}
void SetLightBrightness(void)
{
	Byte value;
	value = 78 + FuncBuf[pLIGHTBRIGHT];
	if(value > 0x7f)
		value &= 0x7f;
	else
		value |= 0x80;
	WriteIIC563(0x061,0x0c);
	WriteIIC563(0x13b,value);
}

void SetLightHS(void)
{
// Horizontal Start
	unsigned long value;
	//if(FuncBuf[pVIDEOSOURCE] < 3)		
		value = ReadWordIIC563(0x36);
	//else
	//	value = ReadWordIIC563(0x5b);
	value = (unsigned long)FuncBuf[pLIGHTHSTART] * value / 100;
	WriteWordIIC563(0x132,value);
	#if PRINT_MESSAGE
		printf("Light HP_Start = %d\n",(unsigned short)value);
	#endif
}
void SetLightHW(void)
{
// Horizontal width
	unsigned long value;
	//if(FuncBuf[pVIDEOSOURCE] < 3)		
		value = ReadWordIIC563(0x36);
	//else
	//	value = ReadWordIIC563(0x5b);
	value = (unsigned long)FuncBuf[pLIGHTHWIDTH] * value / 100;
	WriteWordIIC563(0x134,(value ? value : 1));
	#if PRINT_MESSAGE
		printf("Light H Width = %d\n",(unsigned short)value);
	#endif
}
void SetLightVS(void)
{
// Vertical Start
	unsigned long value;
	//if(FuncBuf[pVIDEOSOURCE] < 3)		
		value = ReadWordIIC563(0x32);
	//else
	//	value = ReadWordIIC563(0x57) / 2;
	value = (unsigned long)FuncBuf[pLIGHTVSTART] * value / 100;
	WriteWordIIC563(0x136,value);
	#if PRINT_MESSAGE
		printf("Light VP_Start = %d\n",(unsigned short)value);
	#endif
}
void SetLightVH(void)
{
// Vertical Hight
	unsigned long value;
	//if(FuncBuf[pVIDEOSOURCE] < 3)		
		value = ReadWordIIC563(0x32);
	//else
	//	value = ReadWordIIC563(0x57) / 2;
	value = (unsigned long)FuncBuf[pLIGHTVHIGHT] * value / 100;
	WriteWordIIC563(0x138,(value ? value : 1));
	#if PRINT_MESSAGE
		printf("Light V Hight = %d\n",(unsigned short)value);
	#endif
}
/*
#ifdef X17
void SetScalerAV(void)
{
	Byte i;
	Word code AvTable60[20][2]={
			 0x055,0x0010,
			 0x053,0x000f,
			 0x057,0x01df,
			 0x059,0x008b,
			 0x05b,0x02c2,
			 0x15b,PanelTypVTotal,
			 0x15e,PanelMinHTotal,
			 0x15d,PanelMinVSyncWidth,
			 0x160,PanelMinHSyncWidth,
			 0x162,PanelVActiveStart,
			 0x166,PanelHActiveStart,
			 0x164,PanelHeight,
			 0x168,PanelWidth,
			 0x16f,PanelVActiveStart,
			 0x171,PanelHeight,
			 0x175,PanelWidth,
			 0x17a,PanelVActiveStart,
			 0x17c,PanelHeight,
			 0x17e,PanelHActiveStart,
			 0x180,PanelWidth,
			};
	Word code AvTable50[20][2]={
			 0x055,0x0012,
			 0x053,0x0012,
			 0x057,0x023f,
			 0x059,0x009d,
			 0x05b,0x02a3,
			 0x15b,PanelTypVTotal,
			 0x15e,PanelMinHTotal,
			 0x15d,PanelMinVSyncWidth,
			 0x160,PanelMinHSyncWidth,
			 0x162,PanelVActiveStart,
			 0x166,PanelHActiveStart,
			 0x164,PanelHeight,
			 0x168,PanelWidth,
			 0x16f,PanelVActiveStart,
			 0x171,PanelHeight,
			 0x175,PanelWidth,
			 0x17a,PanelVActiveStart,
			 0x17c,PanelHeight,
			 0x17e,PanelHActiveStart,
			 0x180,PanelWidth,
			};
	if(Video_60Hz)	//60Hz
		{
		//WriteIIC563(0x042,0x08);
		SetDPLL(110000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable60[i][0],AvTable60[i][1]);
		}
	else				//50Hz
		{
		//WriteIIC563(0x042,0x0b);
		SetDPLL(90000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable50[i][0],AvTable50[i][1]);
		}
	WriteIIC563(0x072,0x00);	//Sync off
	WriteIIC563(0x154,0x00);
	WriteIIC563(0x041,0x00);
	WriteIIC563(0x179,0x07);	
	WriteIIC563(0x040,0x43);	//auto detect on
	WriteIIC563(0x16e,0x47);
	Sleep(200);
	WriteIIC563(0x040,0x47);	//auto detect off
	WriteIIC563(0x102,0x01);	//power down ADC
	Sleep(200);
	//FastMuteOff();
	SetLightHS();
	SetLightHW();
	SetLightVS();
	SetLightVH();
	BackLightOn();
	//ShowSource();
}
#endif

#ifdef X19
void SetScalerAV(void)
{
	Byte i;
	Word code AvTable60[20][2]={
		0x055,0x0010,
		0x053,0x000f,
		0x057,0x01df,
		0x059,0x008b,
		0x05b,0x02c2,
		0x15b,PanelTypVTotal,
		0x15e,PanelMinHTotal,
		0x15d,PanelMinVSyncWidth,
		0x160,PanelMinHSyncWidth,
		0x162,PanelVActiveStart,
		0x166,PanelHActiveStart,
		0x164,PanelHeight,
		0x168,PanelWidth,
		0x16f,PanelVActiveStart,
		0x171,PanelHeight,
		0x175,PanelWidth,
		0x17a,PanelVActiveStart,
		0x17c,PanelHeight,
		0x17e,PanelHActiveStart,
		0x180,PanelWidth,
			};
	Word code AvTable50[20][2]={
		0x055,0x0012,
		0x053,0x0012,
		0x057,0x023f,
		0x059,0x009d,
		0x05b,0x02a3,
		0x15b,PanelTypVTotal,
		0x15e,PanelMinHTotal,
		0x15d,PanelMinVSyncWidth,
		0x160,PanelMinHSyncWidth,
		0x162,PanelVActiveStart,
		0x166,PanelHActiveStart,
		0x164,PanelHeight,
		0x168,PanelWidth,
		0x16f,PanelVActiveStart,
		0x171,PanelHeight,
		0x175,PanelWidth,
		0x17a,PanelVActiveStart,
		0x17c,PanelHeight,
		0x17e,PanelHActiveStart,
		0x180,PanelWidth,
			};
	if(Video_60Hz)	//60Hz
		{
		//WriteIIC563(0x042,0x08);
		SetDPLL(110000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable60[i][0],AvTable60[i][1]);
		}
	else				//50Hz
		{
		//WriteIIC563(0x042,0x0b);
		SetDPLL(90000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable50[i][0],AvTable50[i][1]);
		}
	WriteIIC563(0x072,0x00);	//Sync off
	WriteIIC563(0x154,0x00);
	WriteIIC563(0x041,0x00);
	WriteIIC563(0x179,0x07);	
	WriteIIC563(0x040,0x03);	//auto detect on
	WriteIIC563(0x16e,0x47);
	Sleep(200);
	WriteIIC563(0x040,0x47);	//auto detect off
	WriteIIC563(0x102,0x01);	//power down ADC
	Sleep(200);
	//FastMuteOff();
	SetLightHS();
	SetLightHW();
	SetLightVS();
	SetLightVH();
	BackLightOn();
	//ShowSource();
}
#endif

#ifdef X15
void SetScalerAV(void)
{
	Byte i;
	Word code AvTable60[20][2]={
			 //0x055,0x0017,
			 //0x053,0x0017,
			 //0x057,0x01df,
			 //0x059,0x009a,
			 //0x05b,0x02ba,
			 0x055,0x0010,
			 0x053,0x000f,
			 0x057,0x01df,
			 0x059,0x008b,
			 0x05b,0x02c2,
			 0x15b,PanelTypVTotal,
			 0x15e,PanelMinHTotal,
			 0x15d,PanelMinVSyncWidth,
			 0x160,PanelMinHSyncWidth,
			 0x162,PanelVActiveStart,
			 0x166,PanelHActiveStart,
			 0x164,PanelHeight,
			 0x168,PanelWidth,
			 0x16f,PanelVActiveStart,
			 0x171,PanelHeight,
			 0x175,PanelWidth,
			 0x17a,PanelVActiveStart,
			 0x17c,PanelHeight,
			 0x17e,PanelHActiveStart,
			 0x180,PanelWidth,
			};
	Word code AvTable50[20][2]={
			0x055,0x0012,
			0x053,0x0012,
			0x057,0x023f,
			0x059,0x009d,
			0x05b,0x02a3,
			0x15b,PanelTypVTotal,
			0x15e,PanelMinHTotal,
			0x15d,PanelMinVSyncWidth,
			0x160,PanelMinHSyncWidth,
			0x162,PanelVActiveStart,
			0x166,PanelHActiveStart,
			0x164,PanelHeight,
			0x168,PanelWidth,
			0x16f,PanelVActiveStart,
			0x171,PanelHeight,
			0x175,PanelWidth,
			0x17a,PanelVActiveStart,
			0x17c,PanelHeight,
			0x17e,PanelHActiveStart,
			0x180,PanelWidth,
			};
	if(Video_60Hz)	//60Hz
		{
		//WriteIIC563(0x042,0x09);
		SetDPLL(80000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable60[i][0],AvTable60[i][1]);
		}
	else				//50Hz
		{
		//WriteIIC563(0x042,0x0b);
		SetDPLL(65000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable50[i][0],AvTable50[i][1]);
		}
	WriteIIC563(0x072,0x00);	//Sync off
	WriteIIC563(0x154,0x00);
	WriteIIC563(0x041,0x00);
	WriteIIC563(0x179,0x07);	
	WriteIIC563(0x040,0x43);	//auto detect on
	WriteIIC563(0x16e,0x47);
	Sleep(200);
	SetLightHS();
	SetLightHW();
	SetLightVS();
	SetLightVH();
	WriteIIC563(0x040,0x47);	//auto detect off
	WriteIIC563(0x102,0x01);	//power down ADC
	Sleep(200);
	//FastMuteOff();
	BackLightOn();
	//ShowSource();
}
#endif

#ifdef X21
void SetScalerAV(void)
{
	Byte i;
	Word code AvTable60[20][2]={
		0x055,0x0010,
		0x053,0x000f,
		0x057,0x01df,
		0x059,0x008b,
		0x05b,0x02c2,
		0x15b,PanelTypVTotal,
		0x15e,PanelMinHTotal,
		0x15d,PanelMinVSyncWidth,
		0x160,PanelMinHSyncWidth,
		0x162,PanelVActiveStart,
		0x166,PanelHActiveStart,
		0x164,PanelHeight,
		0x168,PanelWidth,
		0x16f,PanelVActiveStart,
		0x171,PanelHeight,
		0x175,PanelWidth,
		0x17a,PanelVActiveStart,
		0x17c,PanelHeight,
		0x17e,PanelHActiveStart,
		0x180,PanelWidth,
			};
	Word code AvTable50[20][2]={
		0x055,0x0012,
		0x053,0x0012,
		0x057,0x023f,
		0x059,0x009d,
		0x05b,0x02a3,
		0x15b,PanelTypVTotal,
		0x15e,PanelMinHTotal,
		0x15d,PanelMinVSyncWidth,
		0x160,PanelMinHSyncWidth,
		0x162,PanelVActiveStart,
		0x166,PanelHActiveStart,
		0x164,PanelHeight,
		0x168,PanelWidth,
		0x16f,PanelVActiveStart,
		0x171,PanelHeight,
		0x175,PanelWidth,
		0x17a,PanelVActiveStart,
		0x17c,PanelHeight,
		0x17e,PanelHActiveStart,
		0x180,PanelWidth,
			};
	if(Video_60Hz)	//60Hz
		{
		//WriteIIC563(0x042,0x08);
		SetDPLL(140000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable60[i][0],AvTable60[i][1]);
		}
	else				//50Hz
		{
		//WriteIIC563(0x042,0x0b);
		SetDPLL(120000000);
		for(i=0;i<20;i++)
			WriteWordIIC563(AvTable50[i][0],AvTable50[i][1]);
		}
	WriteIIC563(0x072,0x00);	//Sync off
	WriteIIC563(0x154,0x00);
	WriteIIC563(0x041,0x00);
	WriteIIC563(0x179,0x07);	
	WriteIIC563(0x040,0x03);	//auto detect on
	WriteIIC563(0x16e,0x47);
	Sleep(200);
	WriteIIC563(0x040,0x47);	//auto detect off
	WriteIIC563(0x102,0x01);	//power down ADC
	Sleep(200);
	//FastMuteOff();
	SetLightHS();
	SetLightHW();
	SetLightVS();
	SetLightVH();
	BackLightOn();
	//ShowSource();
}
#endif
*/
void SetScalerMode(void)
{
	//Byte temp;
	if(ScalerMode && (ResolutionPtr == 4 || (ResolutionPtr >= 6 && ResolutionPtr < 13))){
		WriteWordIIC563(0x162, PanelMinVSyncWidth + 1);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x16f, PanelMinVSyncWidth + 33);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x164, PanelWidth/4*3);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x171, PanelWidth/4*3);//Jacky 20040708 acept ratio 
		SetScaler();
		WriteWordIIC563(0x164, PanelHeight);	//Jacky 20040708 acept ratio 
		WriteIIC563(0x150,DisplayControl & (~BIT_5));//Jacky 20040708 acept ratio 
	}
	else{
		WriteIIC563(0x150,DisplayControl);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x162, PanelVActiveStart);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x16f, PanelVActiveStart);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x164, PanelHeight);//Jacky 20040708 acept ratio 
		WriteWordIIC563(0x171, PanelHeight);//Jacky 20040708 acept ratio 
		SetScaler();
		}
}

void DVIBandWidthDetection(void)
{
	Byte DVI_Clock_Temp,temp143;

	//WriteIIC563(0x143,0x30);//Jacky 20041221 
	WriteIIC563(0x01d,0x1F);//Jacky 20050118 
	WriteIIC563(0x145,0x00);//Jacky 20041221 
	WriteIIC563(0x144,0x00);
	// Reset DVI PLL
	temp143 = ReadIIC563(0x143);
	WriteIIC563(0x143,temp143 |0x80);
	WriteIIC563(0x143,temp143 & 0x7f);
	Sleep(20);
	LocalTimer = 5;
	DVI_Clock = 0;
	do{
		DVI_Clock_Temp = ReadIIC563(0x016);		
		if(abs(DVI_Clock - DVI_Clock_Temp) > 2){
			DVI_Clock = DVI_Clock_Temp;
			LocalTimer = 5;
		}
	}while(LocalTimer != 0);	//Jacky 20050107
	//printf("DVI clock = %d\n\r",(unsigned short)DVI_Clock);
	if(DVI_Clock < 20)
		return;
	if(DVI_Clock <= 50)
	{
		WriteIIC563(0x144,0x04);//Jacky 20041221 
		WriteIIC563(0x145,0x03);//Jacky 20041221 
	}
	// Reset DVI PLL
	temp143 = ReadIIC563(0x143);
	WriteIIC563(0x143,temp143 |0x80);
	WriteIIC563(0x143,temp143 & 0x7f);

	if(DVI_Clock <= 140 && DVI_Clock >= 100)
		WriteIIC563(0x01b,0x0d);	//DVI DPLL FSM mode select
	else
		WriteIIC563(0x01b,0x00);	//DVI DPLL FSM mode select	
	//WriteIIC563(0x143,0x00);//Jacky 20041221 

}

⌨️ 快捷键说明

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