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