autoadj.c

来自「台湾联咏NT68663 LCD MONITOR 控制程序(完整版)」· C语言 代码 · 共 1,522 行 · 第 1/3 页

C
1,522
字号
				#endif
				if(PhaseResult > Temp)
					{
					Temp = PhaseResult;
					j = i;
					}
				}
			if(Temp > 0)//(Temp > 0x300)
				{
				i = 0x01 + m * 3;
				j = k+j;
//				WriteIIC563(i,j);
				#if PRINT_MESSAGE
					printf("Gain %x = %x %x\n",(unsigned short)m,(unsigned short)k,(unsigned short)j);
				#endif
				break;
			}
		}
		if(k == 0){
			LoadADC_Gain();
			return;
		}
		for(n=0; n<16; n++)
			{
			WriteIIC563(0x0f8,0x00);
			l = 0x001 + m * 3;
			WriteIIC563(l,k-n);
			//WaitSetup(2);
			LocalTimer = 10;
			i = 0x80 + (2-m)*0x08;
			WriteIIC563(0x0f8,i);
		   	while((ReadIIC563(0x0f8) & BIT_7) && LocalTimer != 0){
				if(Abort)
					return;
			}
			if(LocalTimer == 0){
				Abort = 1;
				return;
			}
			j = 0;
			Temp = 0;
			WriteIIC563(0x0f9,7);
			value = ReadIIC563(0x0fd);
			PhaseResult = value;
			PhaseResult <<= 8;
			value = ReadIIC563(0x0fc);
			PhaseResult += value;
			PhaseResult <<= 8;
			value = ReadIIC563(0x0fb);
			PhaseResult += value;
			if(PhaseResult > 80){
				break;
			}
/*
			for(i=0; i<8; i++)
				{
				WriteIIC563(0x0f9,i);
				value = ReadIIC563(0x0fd);
				PhaseResult = value;
				PhaseResult <<= 8;
				value = ReadIIC563(0x0fc);
				PhaseResult += value;
				PhaseResult <<= 8;
				value = ReadIIC563(0x0fb);
				PhaseResult += value;
				#if PRINT_MESSAGE
					printf("PhaseResult %x = %x %x\n",(unsigned short)m,(unsigned short)n,(unsigned short)(PhaseResult>>8));
				#endif
				if(PhaseResult > Temp)
					{
					Temp = PhaseResult;
					j = i;
					}
				}
			if(j == 7)
				break;
*/			
			}		
		l = 0x001 + m * 3;
		j = k-n;
		WriteIIC563(l,j);
		#if PRINT_MESSAGE
			printf("Gain %x = %x %x\n",(unsigned short)m,(unsigned short)k,(unsigned short)j);
		#endif
		}
	FuncBuf[pRADC] = ReadIIC563(0x001)+8;
	Write24C16(ep_ADC_R_Gain,FuncBuf[pRADC]);
	FuncBuf[pGADC] = ReadIIC563(0x004)+8;
	Write24C16(ep_ADC_G_Gain,FuncBuf[pGADC]);
	FuncBuf[pBADC] = ReadIIC563(0x007)+8;
	Write24C16(ep_ADC_B_Gain,FuncBuf[pBADC]);
}

void AutoColor(void)
{
unsigned char Reg0x06A;
	Reg0x06A = ReadIIC563(0x06A);
	WriteIIC563(0x06A,0x00);	//Analog de-jitter
	flag2 &= ~BIT_0;
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
	SetADC_Offset(0x30);
	if((flag2 & BIT_0) != 0x00){
		goto Error;
	}
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
	SetADC_Gain(0xf0);
Error:
	if(Abort){
	//if((flag2 & BIT_0) != 0){
		LoadADC_Gain();
	}
	WriteIIC563(0x06A,Reg0x06A);	//Analog de-jitter
}
void SetADC_Offset_C(void)
{
unsigned char i,k,value,rgb[3];
	rgb[0] = ReadIIC563(0x03);
	rgb[1] = ReadIIC563(0x06);
	rgb[2] = ReadIIC563(0x09);

	for(k=32; k<240; k++){
		LocalTimer = 10;
		WriteIIC563(0x106,0x2a);	//minimum value
	   	while((ReadIIC563(0x106) & BIT_1) && LocalTimer != 0){
			CheckModeChange();
			if(Abort)
				return;
		}
		i = 0;
		value = ReadIIC563(0x113);
//		printf("%d r = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 5) && (rgb[0] > 4)){
			rgb[0] -= 2;
			i = 0xff;
		}
		if((value > 10) && (rgb[0] < 0x7f)){
			rgb[0] += 2;
			i = 0xff;
		}
		value = ReadIIC563(0x114);
//		printf("%d g = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 5) && (rgb[1] > 4)){
			rgb[1] -= 2;
			i = 0xff;
		}
		if((value > 10) && (rgb[1] < 0x7f)){
			rgb[1] += 2;
			i = 0xff;
		}
		value = ReadIIC563(0x115);
//		printf("%d b = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 5) && (rgb[2] > 4)){
			rgb[2] -= 2;
			i = 0xff;
		}
		if((value > 10) && (rgb[2] < 0x7f)){
			rgb[2] += 2;
			i = 0xff;
		}
		if(i == 0){
			break;
		}
		else{
			WriteIIC563(0x03,rgb[0]);
			WriteIIC563(0x06,rgb[1]);
			WriteIIC563(0x09,rgb[2]);
		}
	}
	//printf("rOffset = %d\r\n",(unsigned short)rgb[0]);
	//printf("gOffset = %d\r\n",(unsigned short)rgb[1]);
	//printf("bOffset = %d\r\n",(unsigned short)rgb[2]);
}

void SetADC_Gain_C(void)
{
unsigned char i,k,value,rgb[3];

	rgb[0] = ReadIIC563(0x01);
	rgb[1] = ReadIIC563(0x04);
	rgb[2] = ReadIIC563(0x07);

	for(k=0; k<128; k++){
		LocalTimer = 10;
		WriteIIC563(0x106,0x2e);
	   	while((ReadIIC563(0x106) & BIT_1) && LocalTimer != 0){
			CheckModeChange();
			if(Abort)
				return;
		}
		i = 0;
		value = ReadIIC563(0x113);
//		printf("%d r = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 0xf0) && (rgb[0] > 4)){
			rgb[0] -= 2;
			i = 0xff;
		}
		if((value > 0xf8) && (rgb[0] < 0xff)){
			rgb[0] += 2;
			i = 0xff;
		}
		value = ReadIIC563(0x114);
//		printf("%d g = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 0xf0) && (rgb[1] > 4)){
			rgb[1] -= 2;
			i = 0xff;
		}
		if((value > 0xf8) && (rgb[1] < 0xff)){
			rgb[1] += 2;
			i = 0xff;
		}
		value = ReadIIC563(0x115);
//		printf("%d b = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value < 0xf0) && (rgb[2] > 4)){
			rgb[2] -= 2;
			i = 0xff;
		}
		if((value > 0xf8) && (rgb[2] < 0xff)){
			rgb[2] += 2;
			i = 0xff;
		}
		if(i == 0){
			break;
		}
		else{
			WriteIIC563(0x01,rgb[0]);
			WriteIIC563(0x04,rgb[1]);
			WriteIIC563(0x07,rgb[2]);
//			Sleep(10);
		}
	}
	//printf("rGain = %d\r\n",(unsigned short)rgb[0]);
	//printf("gGain = %d\r\n",(unsigned short)rgb[1]);
	//printf("bGain = %d\r\n",(unsigned short)rgb[2]);
}

/*
void AutoColor(void)
{

xdata unsigned char r1,g1,b1,m,r2,g2,b2;
	Abort = 0;
	WriteIIC563(0x001,0x80);
	WriteIIC563(0x004,0x80);
	WriteIIC563(0x007,0x80);
	
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
	SetADC_Offset(0x60);
	m = 0xff;
	r1 = ReadIIC563(0x003);
	if(m > r1)
		m = r1;
	g1 = ReadIIC563(0x006);
	if(m > g1)
		m = g1;
	b1  = ReadIIC563(0x009);
	if(m > b1)
		m = b1;

	WriteIIC563(0x034,FuncBuf[pHPOSITION]);
	SetADC_Gain(0x80);
	if(m > 0)
		m = ((m / 8) - 1) * 8 / 2;
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
	SetADC_Offset(m);
	r2 = ReadIIC563(0x003);
	g2 = ReadIIC563(0x006);
	b2 = ReadIIC563(0x009);
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
#if 1
	if(r1 > r2){
		r1 = r1 - r2;
	}
	else{
		r1 = r2 - r1;
	}
	if(g1 > g2){
		g1 = g1 - g2;
	}
	else{
		g1 = g2 - g1;
	}
	if(b1 > b2){
		b1 = b1 - b2;
	}
	else{
		b1 = b2 - b1;
	}
	if((r1 > 2) || (g1 > 2) || (b1 > 2))
		SetADC_Gain(0x80);
#else
	if((r1 != r2) || (g1 != g2) || (b1 != b2))
		SetADC_Gain(0xa0);
#endif

//
//	Abort = 0;
//	WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
//	SetADC_Offset(0);
//	WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
//	SetADC_Gain(0);
//	if(Abort)
//		LoadADC_Gain();

}
*/
#else
void SetADC_Offset(unsigned char OffSet2)
{
	unsigned char i,value,rgb[3],Temp;
	unsigned short k;
	WriteIIC563(0x001,0xff);
	WriteIIC563(0x004,0xff);
	WriteIIC563(0x007,0xff);
	rgb[0] = Read24C16(ep_ADC_R_Offset);
	if((rgb[0] > 0xff)||(rgb[0] == 0))
		rgb[0] = 0x40;
	rgb[1] = Read24C16(ep_ADC_G_Offset);
	if((rgb[1] > 0xff)||(rgb[1] == 0))
		rgb[1] = 0x40;
	rgb[2] = Read24C16(ep_ADC_B_Offset);
	if((rgb[2] > 0xff)||(rgb[2] == 0))
		rgb[2] = 0x40;
	WriteADC_Offset(rgb[0],rgb[1],rgb[2]);

	for(k=0; k<256; k++){
		if(OffSet2 != 0)
			WriteIIC563(0x106,0x2a);
		else
			WriteIIC563(0x106,0x2e);
		LocalTimer = 10;
	   	while((ReadIIC563(0x106) & BIT_1) && LocalTimer != 0)
		{
			CheckModeChange();
			if(Abort)
				return;
		}
		i = 0;
		value = ReadIIC563(0x113);
//		printf("%d r = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value > 2) && (rgb[0] > 0)){
			rgb[0]++;
			i = 0xff;
		}
		if((value == 0) && (rgb[0] < 0xff)){
			rgb[0]--;
			i = 0xff;
		}
		value = ReadIIC563(0x114);
//		printf("%d g = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value > 2) && (rgb[1] > 0)){
			rgb[1]++;
			i = 0xff;
		}
		if((value == 0) && (rgb[1] < 0xff)){
			rgb[1]--;
			i = 0xff;
		}
		value = ReadIIC563(0x115);
//		printf("%d b = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value > 2) && (rgb[2] > 0)){
			rgb[2]++;
			i = 0xff;
		}
		if((value == 0) && (rgb[2] < 0xff)){
			rgb[2]--;
			i = 0xff;
		}
		if(i == 0){
			if(OffSet2 != 0){
				rgb[0] = rgb[0] - OffSet2;
				rgb[1] = rgb[1] - OffSet2;
				rgb[2] = rgb[2] - OffSet2;
				WriteADC_Offset(rgb[0],rgb[1],rgb[2]);
			}
			Write24C16(ep_ADC_R_Offset,rgb[0]);
			Write24C16(ep_ADC_G_Offset,rgb[1]);
			Write24C16(ep_ADC_B_Offset,rgb[2]);
			#if PRINT_MESSAGE
			printf("RGB %x;%x;%x\r\n",(unsigned short)rgb[0],(unsigned short)rgb[1],(unsigned short)rgb[2]);
			#endif
			break;
		}
		else{
			WriteADC_Offset(rgb[0],rgb[1],rgb[2]);
			WaitSetup(4);
		}
	}
	FuncBuf[pROFFSET] = ReadIIC563(0x003);
	Write24C16(ep_ADC_R_Offset,FuncBuf[pROFFSET]);
	FuncBuf[pGOFFSET] = ReadIIC563(0x006);
	Write24C16(ep_ADC_G_Offset,FuncBuf[pGOFFSET]);
	FuncBuf[pBOFFSET] = ReadIIC563(0x009);
	Write24C16(ep_ADC_B_Offset,FuncBuf[pBOFFSET]);
}

void WriteADC_Offset(unsigned char r,unsigned char g,unsigned char b)
{
	WriteIIC563(0x003,r);
	WriteIIC563(0x006,g);
	WriteIIC563(0x009,b);
}

void SetADC_Gain(void)
{
	unsigned char i,value;
	unsigned short k,rgb[3];
	rgb[0] = Read24C16(ep_ADC_R_Gain);
	rgb[1] = Read24C16(ep_ADC_G_Gain);
	rgb[2] = Read24C16(ep_ADC_B_Gain);
	if(rgb[0] > 0x100)
		rgb[0] = 0x80;
	WriteIIC563(0x001,rgb[0]);
	if(rgb[1] > 0x100)
		rgb[1] = 0x80;
	WriteIIC563(0x004,rgb[1]);
	if(rgb[2] > 0x100)
		rgb[2] = 0x80;
	WriteIIC563(0x007,rgb[2]);

	for(k=0; k<256; k++){
		LocalTimer = 10;
		WriteIIC563(0x106,0x2e);
	   	while((ReadIIC563(0x106) & BIT_1) && LocalTimer != 0)
		{
			CheckModeChange();
			if(Abort)
				return;
		}
		i = 0;
//		value = ReadIIC(NT68520_Addr,0x2b);
		value = ReadIIC563(0x113);
//		printf("%d r = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value == 0xff) && (rgb[0] > 0)){
			rgb[0]++;
			i = 0xff;
		}
		if((value < 0xfd) && (rgb[0] < 0xff)){
			rgb[0]--;
			i = 0xff;
		}
//		value = ReadIIC(NT68520_Addr,0x2c);
		value = ReadIIC563(0x114);
//		printf("%d g = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value == 0xff) && (rgb[1] > 0)){
			rgb[1]++;
			i = 0xff;
		}
		if((value < 0xfd) && (rgb[1] < 0xff)){
			rgb[1]--;
			i = 0xff;
		}
//		value = ReadIIC(NT68520_Addr,0x2d);
		value = ReadIIC563(0x115);
//		printf("%d b = %x\r\n",(unsigned short)k,(unsigned short)value);
		if((value == 0xff) && (rgb[2] > 0)){
			rgb[2]++;
			i = 0xff;
		}
		if((value < 0xfd) && (rgb[2] < 0xff)){
			rgb[2]--;
			i = 0xff;
		}
		if(i == 0){
//			rgb[0] = rgb[0] + 1;
//			rgb[1] = rgb[1] + 1;
//			rgb[2] = rgb[2] + 1;
//			WriteIIC(NT68520_Addr,0x02,rgb[0]);
//			WriteIIC(NT68520_Addr,0x04,rgb[1]);
//			WriteIIC(NT68520_Addr,0x06,rgb[2]);
			Write24C16(ep_ADC_R_Gain,rgb[0]);
			Write24C16(ep_ADC_G_Gain,rgb[1]);
			Write24C16(ep_ADC_B_Gain,rgb[2]);
			printf("RGB %x;%x;%x\r\n",(unsigned short)rgb[0],(unsigned short)rgb[1],(unsigned short)rgb[2]);
			break;
		}
		else{
			WriteIIC563(0x001,rgb[0]);
			WriteIIC563(0x004,rgb[1]);
			WriteIIC563(0x007,rgb[2]);
			WaitSetup(4);
		}
	}
	FuncBuf[pRADC] = ReadIIC563(0x001);
	Write24C16(ep_ADC_R_Gain,FuncBuf[pRADC]);
	FuncBuf[pGADC] = ReadIIC563(0x004);
	Write24C16(ep_ADC_G_Gain,FuncBuf[pGADC]);
	FuncBuf[pBADC] = ReadIIC563(0x007);
	Write24C16(ep_ADC_B_Gain,FuncBuf[pBADC]);
}

void AutoColor(void)
{
	//WriteIIC563(0x02A,0);  // AutoPosition Pixel mask -> H
	//WriteIIC563(0x02B,24);  // AutoPosition Pixel mask -> H
	//WriteIIC563(0x02C,0x00);  // AutoPosition Pixel mask -> H
	//WriteIIC563(0x02D,0x00);  // AutoPosition Pixel mask -> H
	//WriteIIC563(0x107,0x30);  // Red Noise Margin
	//WriteIIC563(0x106,0x00);
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 10);
	SetADC_Offset(2);
	SetADC_Gain();
	WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
}
#endif

⌨️ 快捷键说明

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