autoadj.lst
来自「台湾联咏NT68663 LCD MONITOR 控制程序(完整版)」· LST 代码 · 共 1,606 行 · 第 1/5 页
LST
1,606 行
1229 2 if((value < 0xf0) && (rgb[2] > 4)){
1230 3 rgb[2] -= 2;
1231 3 i = 0xff;
1232 3 }
1233 2 if((value > 0xf8) && (rgb[2] < 0xff)){
1234 3 rgb[2] += 2;
1235 3 i = 0xff;
1236 3 }
1237 2 if(i == 0){
1238 3 break;
1239 3 }
1240 2 else{
1241 3 WriteIIC563(0x01,rgb[0]);
1242 3 WriteIIC563(0x04,rgb[1]);
1243 3 WriteIIC563(0x07,rgb[2]);
1244 3 // Sleep(10);
1245 3 }
1246 2 }
1247 1 //printf("rGain = %d\r\n",(unsigned short)rgb[0]);
1248 1 //printf("gGain = %d\r\n",(unsigned short)rgb[1]);
1249 1 //printf("bGain = %d\r\n",(unsigned short)rgb[2]);
1250 1 }
1251
1252 /*
1253 void AutoColor(void)
1254 {
1255
1256 xdata unsigned char r1,g1,b1,m,r2,g2,b2;
1257 Abort = 0;
1258 WriteIIC563(0x001,0x80);
1259 WriteIIC563(0x004,0x80);
1260 WriteIIC563(0x007,0x80);
1261
1262 WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
1263 SetADC_Offset(0x60);
1264 m = 0xff;
1265 r1 = ReadIIC563(0x003);
1266 if(m > r1)
1267 m = r1;
1268 g1 = ReadIIC563(0x006);
1269 if(m > g1)
1270 m = g1;
1271 b1 = ReadIIC563(0x009);
1272 if(m > b1)
1273 m = b1;
1274
1275 WriteIIC563(0x034,FuncBuf[pHPOSITION]);
1276 SetADC_Gain(0x80);
1277 if(m > 0)
1278 m = ((m / 8) - 1) * 8 / 2;
1279 WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
1280 SetADC_Offset(m);
1281 r2 = ReadIIC563(0x003);
1282 g2 = ReadIIC563(0x006);
1283 b2 = ReadIIC563(0x009);
1284 WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
C51 COMPILER V6.12 AUTOADJ 03/05/2008 14:11:12 PAGE 22
1285 #if 1
1286 if(r1 > r2){
1287 r1 = r1 - r2;
1288 }
1289 else{
1290 r1 = r2 - r1;
1291 }
1292 if(g1 > g2){
1293 g1 = g1 - g2;
1294 }
1295 else{
1296 g1 = g2 - g1;
1297 }
1298 if(b1 > b2){
1299 b1 = b1 - b2;
1300 }
1301 else{
1302 b1 = b2 - b1;
1303 }
1304 if((r1 > 2) || (g1 > 2) || (b1 > 2))
1305 SetADC_Gain(0x80);
1306 #else
1307 if((r1 != r2) || (g1 != g2) || (b1 != b2))
1308 SetADC_Gain(0xa0);
1309 #endif
1310
1311 //
1312 // Abort = 0;
1313 // WriteWordIIC563(0x034,FuncBuf[pHPOSITION] - 20);
1314 // SetADC_Offset(0);
1315 // WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
1316 // SetADC_Gain(0);
1317 // if(Abort)
1318 // LoadADC_Gain();
1319
1320 }
1321 */
1322 #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;
C51 COMPILER V6.12 AUTOADJ 03/05/2008 14:11:12 PAGE 23
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);
C51 COMPILER V6.12 AUTOADJ 03/05/2008 14:11:12 PAGE 24
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);
C51 COMPILER V6.12 AUTOADJ 03/05/2008 14:11:12 PAGE 25
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
1521
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4292 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 36
PDATA SIZE = ---- ----
DATA SIZE = ---- 87
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILER V6.12 AUTOADJ 03/05/2008 14:11:12 PAGE 26
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?