📄 lcd_auto.c
字号:
stGUD0.RTD_R_BRIGHT = 50;
stGUD0.RTD_G_BRIGHT = 50;
stGUD0.RTD_B_BRIGHT = 50;*/ //V203
Set_Bright_Contrast();
Save_GUD0();
/*
if (0 != stGUD2.AD_G_GAIN && 255 != stGUD2.AD_G_GAIN && 0 != stGUD2.AD_G_OFFSET && 255 != stGUD2.AD_G_OFFSET)
{
stGUD2.AD_G_GAIN += 1;
stGUD2.AD_G_OFFSET += 1;
}
SetADC_GainOffset();
*/
Save_GUD2();
}
bAutoInProgress = 0;
return Result;
}
unsigned char Tune_Balance(void)
{
unsigned char Color, Count, Result, Margin, FineTune, Offset_Stop;
FineTune = 0;
// RTDCodeW(ADC_DEFAULT);
// Get usVer_Start, usVer_End, usH_Start, usH_Start
if (ERROR_SUCCEED != Measure_PositionN(0x40)) return ERROR_ABORT;
if (ERROR_SUCCEED != Measure_Color(SELECT_RED, COLOR_MAX)) return ERROR_ABORT;
if (0x60 > Data[0]) return ERROR_ABORT;
Margin = Data[0];
if (ERROR_SUCCEED != Measure_Color(SELECT_GREEN, COLOR_MAX)) return ERROR_ABORT;
if (0x60 > Data[0]) return ERROR_ABORT;
Margin = Margin > Data[0] ? Data[0] : Margin;
if (ERROR_SUCCEED != Measure_Color(SELECT_BLUE, COLOR_MAX)) return ERROR_ABORT;
if (0x60 > Data[0]) return ERROR_ABORT;
Margin = Margin > Data[0] ? Data[0] : Margin;
Margin = (Margin - 0x20) & 0xfc;
// Get usVer_Start, usVer_End, usH_Start, usH_Start
if (ERROR_SUCCEED != Measure_PositionN(Margin)) return ERROR_ABORT;
#if(1)
SetADC_Offset();
#else
SetADC_GainOffset();
#endif
Offset_Stop = 0;
Color = SELECT_BLUE;
do
{
Count = 0x30;
do
{
#if (1)
if(Offset_Stop == 0)
{
///////////////////////////////
// Minimum Adjustment (0x02) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MIN)) return ERROR_ABORT;
Margin = Data[0];
if (0x0a < Margin)
{
Change_ADC_Offset(Color, 0x08, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 < Margin)
{
Change_ADC_Offset(Color, Margin - 0x02, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 > Margin)
{
if (0x00 == Margin && 0 == FineTune)
Change_ADC_Offset(Color, 0x06, 1); // Decrease Offset; Increase Brightness
else
{
Change_ADC_Offset(Color, 0x02 - Margin, 1); // Decrease Offset; Increase Brightness
if(Color == SELECT_RED)
{
Offset_Stop = 1;
SetADC_Gain();
Color = SELECT_BLUE << 1;
}
break;
}
}
}
else
{
///////////////////////////////
// Maximum Adjustment (0xf2) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MAX)) return ERROR_ABORT;
Margin = Data[0];
if (0xf2 < Margin)
{
Result = Margin - 0xf2;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches maximum.
if (Change_ADC_Gain(Color, Result, 0)) // Increase Gain; Decrease Contrast
{
if (Change_ADC_Offset(Color, 4, 0)) break; // Increase Offset; Decrease Brightness
}
}
else if (0xf2 > Margin)
{
Result = 0xf2 - Margin;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches minimum.
if (Change_ADC_Gain(Color, Result, 1)) // Decrease Gain; Increase Contrast
{
if (Change_ADC_Offset(Color, 4, 1)) break; // Decrease Offset; Increase Brightness
}
}
else
break;
}
if (8 < Count && 0xf3 >= Result && 0xf1 <= Result && 0x03 >= Margin && 0x01 <= Margin)
{
FineTune = 1;
Count = 8;
}
#endif
#if(0)
///////////////////////////////
// Maximum Adjustment (0xf2) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MAX)) return ERROR_ABORT;
Margin = Data[0];
if (0xf2 < Margin)
{
Result = Margin - 0xf2;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches maximum.
if (Change_ADC_Gain(Color, Result, 0)) // Increase Gain; Decrease Contrast
{
if (Change_ADC_Offset(Color, 4, 0)) break; // Increase Offset; Decrease Brightness
}
}
else if (0xf2 > Margin)
{
Result = 0xf2 - Margin;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches minimum.
if (Change_ADC_Gain(Color, Result, 1)) // Decrease Gain; Increase Contrast
{
if (Change_ADC_Offset(Color, 4, 1)) break; // Decrease Offset; Increase Brightness
}
}
Result = Margin;
///////////////////////////////
// Minimum Adjustment (0x02) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MIN)) return ERROR_ABORT;
Margin = Data[0];
if (0x0a < Margin)
{
Change_ADC_Offset(Color, 0x08, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 < Margin)
{
Change_ADC_Offset(Color, Margin - 0x02, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 > Margin)
{
if (0x00 == Margin && 0 == FineTune)
Change_ADC_Offset(Color, 0x06, 1); // Decrease Offset; Increase Brightness
else
Change_ADC_Offset(Color, 0x02 - Margin, 1); // Decrease Offset; Increase Brightness
}
else if (0xf2 == Result)
{
break;
}
// Prevent redundant fine tune
if (8 < Count && 0xf3 >= Result && 0xf1 <= Result && 0x03 >= Margin && 0x01 <= Margin)
{
FineTune = 1;
Count = 8;
}
#endif
#if(0)
///////////////////////////////
// Maximum Adjustment (0xfd) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MAX)) return ERROR_ABORT;
Margin = Data[0];
if (0xfd < Margin)
{
Result = (0xff == Margin && 0 == FineTune) ? 0x06 : Margin - 0xfd;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches maximum.
if (Change_ADC_Gain(Color, Result, 0)) // Increase Gain; Decrease Contrast
{
if (Change_ADC_Offset(Color, 4, 0)) break; // Increase Offset; Decrease Brightness
}
}
else if (0xfd > Margin)
{
Result = (0xf1 > Margin) ? 0x0c : 0xfd - Margin;
// Non-zero return value of Change_ADC_Gain() means ADC gain reaches minimum.
if (Change_ADC_Gain(Color, Result, 1)) // Decrease Gain; Increase Contrast
{
if (Change_ADC_Offset(Color, 4, 1)) break; // Decrease Offset; Increase Brightness
}
}
Result = Margin;
///////////////////////////////
// Minimum Adjustment (0x02) //
///////////////////////////////
if (ERROR_SUCCEED != Measure_Color(Color, COLOR_MIN)) return ERROR_ABORT;
Margin = Data[0];
if (0x0a < Margin)
{
Change_ADC_Offset(Color, 0x08, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 < Margin)
{
Change_ADC_Offset(Color, Margin - 0x02, 0); // Increase Offset; Decrease Brightness
}
else if (0x02 > Margin)
{
if (0x00 == Margin && 0 == FineTune)
Change_ADC_Offset(Color, 0x06, 1); // Decrease Offset; Increase Brightness
else
Change_ADC_Offset(Color, 0x02 - Margin, 1); // Decrease Offset; Increase Brightness
}
else if (0xfd == Result)
{
break;
}
// Prevent redundant fine tune
if (8 < Count && 0xfe >= Result && 0xfc <= Result && 0x03 >= Margin && 0x01 <= Margin)
{
FineTune = 1;
Count = 8;
}
#endif
}
while (--Count);
Color = Color >> 1;
}
while (Color);
return ERROR_SUCCEED;
}
unsigned char Measure_Color(unsigned char color, unsigned char margin)
{
RTDSetByte(MARGIN_B_7D, (SELECT_RED == color) ? COLORS_RED : (SELECT_GREEN == color) ? COLORS_GREEN : COLORS_BLUE);
Data[0] = 9;
Data[1] = Y_INC;
Data[2] = H_BND_STA_L_75;
Data[3] = (unsigned char)(usH_Start + MEAS_H_STA_OFFSET - 1);
Data[4] = (unsigned char)(usH_End + MEAS_H_END_OFFSET);
Data[5] = ((unsigned char)((usH_Start + MEAS_H_STA_OFFSET - 1) >> 4) & 0x70) | ((unsigned char)((usH_End + MEAS_H_END_OFFSET) >> 8) & 0x0f);
if (COLOR_MIN == margin)
{
Data[3] = 0x80;
Data[4] = 0x00;
Data[5] = 0x12;
Data[6] = 9 < usVer_Start ? 9 : usVer_Start - 1;
Data[7] = Data[6] + 1;
Data[8] = 0;
}
else
{
Data[6] = (unsigned char)(usVer_Start + 1);
Data[7] = (unsigned char)(usVer_End + 1);
Data[8] = ((unsigned char)((usVer_Start + 1) >> 4) & 0x70) | ((unsigned char)((usVer_End + 1) >> 8) & 0x0f);
}
Data[9] = 0;
RTDWrite(Data);
if (COLOR_MIN == margin)
RTDSetByte(AUTO_ADJ_CTRL_7F, COLOR_MIN | 0x01); // Start the auto-adjust
else
RTDSetByte(AUTO_ADJ_CTRL_7F, COLOR_MAX | 0x01); // Start the auto-adjust
Wait_Finish();
if (ERROR_SUCCEED != Data[0]) return ERROR_ABORT;
RTDRead(AUTO_BAL_RESULT_88, 1, N_INC); // Store result in Data[0]
if (COLOR_MIN == margin) Data[0] ^= 0xff;
/*
#if (1)
Data[0] = 9;
Data[1] = Y_INC;
Data[2] = H_BND_STA_L_75;
Data[3] = (unsigned char)(usH_Start + MEAS_H_STA_OFFSET - 1);
Data[4] = (unsigned char)(usH_End + MEAS_H_END_OFFSET);
Data[5] = ((unsigned char)((usH_Start + MEAS_H_STA_OFFSET - 1) >> 4) & 0x70) | ((unsigned char)((usH_End + MEAS_H_END_OFFSET) >> 8) & 0x0f);
Data[6] = (unsigned char)(usVer_Start + 1);
Data[7] = (unsigned char)(usVer_End + 1);
Data[8] = ((unsigned char)((usVer_Start + 1) >> 4) & 0x70) | ((unsigned char)((usVer_End + 1) >> 8) & 0x0f);
Data[9] = 0;
RTDWrite(Data);
if (COLOR_MIN == margin)
RTDSetByte(AUTO_ADJ_CTRL_7F, COLOR_MIN | 0x01); // Start the auto-adjust
else
RTDSetByte(AUTO_ADJ_CTRL_7F, COLOR_MAX | 0x01); // Start the auto-adjust
Wait_Finish();
if (ERROR_SUCCEED != Data[0]) return ERROR_ABORT;
RTDRead(AUTO_BAL_RESULT_88, 1, N_INC); // Store result in Data[0]
if (COLOR_MIN == margin) Data[0] ^= 0xff;
#else
Data[0] = 9;
Data[1] = Y_INC;
Data[2] = H_BND_STA_L_75;
Data[3] = (unsigned char)(usH_Start + MEAS_H_STA_OFFSET - 1);
Data[4] = (unsigned char)(usH_End + MEAS_H_END_OFFSET);
Data[5] = ((unsigned char)((usH_Start + MEAS_H_STA_OFFSET - 1) >> 4) & 0x70) | ((unsigned char)((usH_End + MEAS_H_END_OFFSET) >> 8) & 0x0f);
if (COLOR_MIN == margin)
{
Data[3] = 0x80;
Data[4] = 0x00;
Data[5] = 0x12;
Data[6] = 9 < usVer_Start ? 9 : usVer_Start - 1;
Data[7] = Data[6] + 1;
Data[8] = 0;
}
else
{
Data[6] = (unsigned char)(usVer_Start + 1);
Data[7] = (unsigned char)(usVer_End + 1);
Data[8] = ((unsigned char)((usVer_Start + 1) >> 4) & 0x70) | ((unsigned char)((usVer_End + 1) >> 8) & 0x0f);
}
Data[9] = 0;
RTDWrite(Data);
RTDSetByte(AUTO_ADJ_CTRL_7F, COLOR_MAX | 0x01); // Start the auto-adjust
Wait_Finish();
if (ERROR_SUCCEED != Data[0]) return ERROR_ABORT;
RTDRead(AUTO_BAL_RESULT_88, 1, N_INC); // Store result in Data[0]
#endif
*/
return ERROR_SUCCEED;
}
unsigned char Change_ADC_Gain(unsigned char color, unsigned char delta, unsigned char inc)
{
if (inc)
{
inc = 0;
if (color & SELECT_RED)
{
if (stGUD2.AD_R_GAIN > delta)
stGUD2.AD_R_GAIN -= delta;
else
{
stGUD2.AD_R_GAIN = 0;
inc |= SELECT_RED;
}
}
if (color & SELECT_GREEN)
{
if (stGUD2.AD_G_GAIN > delta)
stGUD2.AD_G_GAIN -= delta;
else
{
stGUD2.AD_G_GAIN = 0;
inc |= SELECT_GREEN;
}
}
if (color & SELECT_BLUE)
{
if (stGUD2.AD_B_GAIN > delta)
stGUD2.AD_B_GAIN -= delta;
else
{
stGUD2.AD_B_GAIN = 0;
inc |= SELECT_BLUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -