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 + -
显示快捷键?