scaler.lst

来自「台湾联咏NT68663 LCD MONITOR 控制程序(完整版)」· LST 代码 · 共 1,527 行 · 第 1/5 页

LST
1,527
字号
 868   1      
 869   1      #if PANEL == AU_L170EN05
              	WaitSetup(8);
              	Hr = ReadIIC563(0x184)+(ReadIIC563(0x185)*256); //read R1
              	//printf("Hr = %x = %u\n",Hr,Hr);
              	dstHtotal = ReadIIC563(0x183) & 0x0f;
              	dstHtotal <<= 8;
              	dstHtotal |= ReadIIC563(0x182);
              	dstVtotal = (ReadIIC563(0x1dd) & 0x0f) << 8;
              	dstVtotal += ReadIIC563(0x1dc);
              	dstVtotal += PanelHeight; 
              	//printf("Htotal=%x = %u\n",dstHtotal,dstHtotal);
              	//printf("Vtotal=%x = %u\n",dstVtotal,dstVtotal);
              	WriteWordIIC563(0x15e,dstHtotal);
              	WriteIIC563(0x150,(DisplayControl & ~BIT_5));
              	WriteIIC563(0x186,0x12);
              	WaitSetup(8);
              	Hr2 = ReadIIC563(0x184)+(ReadIIC563(0x185)*256); //read R2
              	//printf("Hr2 = %x = %u\n",Hr2,Hr2);
              	if (Hr2 < 0xa8){
              		i = 0xa8 - Hr2;
              		if ((Hr-0x0d+(unsigned long)i*PanelHeight/dstVtotal) < 0x80)
              			i = i + ((unsigned long)0x80 - (Hr-0x0d))*dstVtotal/PanelHeight;
              		else if ((Hr-0x0d+(unsigned long)i*PanelHeight/dstVtotal) > 0x380)
              			i = i + ((unsigned long)PanelHeight - (Hr-0x0d) + 0x80)*dstVtotal/PanelHeight;
              	}
              	else if (Hr2 > (dstHtotal - 0x58)){
              		i = dstHtotal - Hr2 + 0xa8;
              		if ((Hr-0x0d+(unsigned long)i*PanelHeight/dstVtotal) < 0x80)
              			i = i + ((unsigned long)0x80 - (Hr-0x0d))*dstVtotal/PanelHeight;
              		else if ((Hr-0x0d+(unsigned long)i*PanelHeight/dstVtotal) > 0x380)
              			i = i + ((unsigned long)PanelHeight - (Hr-0x0d) + 0x80)*dstVtotal/PanelHeight;
              	}
              	else {
              		i = 0;
              		if ((Hr-0x0d) < 0x80){
              			i = i + ((unsigned long)0x80 - (Hr-0x0d))*dstVtotal/PanelHeight;
              			Hr2 = Hr2 + i;
              			if (Hr2 >= dstHtotal)
              				Hr2 = Hr2 - dstHtotal;
              			if (	Hr2 < 0xa8)
              				i = i + 0xa8 - Hr2;
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 16  

              			else if (Hr2 > (dstHtotal - 0x58))
              				i = i + dstHtotal - Hr2 + 0xa8;
              		}
              		else if ((Hr-0x0d) > 0x380){
              			i = i + (PanelHeight - (Hr-0x0d) + (unsigned long)0x80)*dstVtotal/PanelHeight;
              			Hr2 = Hr2 + i;
              			if (Hr2 < dstVtotal)
              				Hr2 = Hr2 + dstHtotal- dstVtotal;
              			else
              				Hr2 = Hr2 - dstVtotal;
              			if (Hr2 >= dstHtotal)
              				Hr2 = Hr2 - dstHtotal;
              			if (Hr2 < 0xa8)
              				i = i + 0xa8 - Hr2;
              			else if (Hr2 > (dstHtotal - 0x58))
              				i = i + dstHtotal - Hr2 + 0xa8;
              		}
              	}
              	temp = dclk * ((float)i);
              	//printf("temp=%lu\n",temp);
              	temp2 = temp / ((unsigned long)dstVtotal*dstHtotal);
              	//printf("temp2=%lu\n",temp2);
              	dclk += temp2;
              	//	printf("Dclk1=%lu\n",dclk);
              	SetDPLL(dclk);
              	WaitSetup(8);
              	WriteIIC563(0x150,(DisplayControl));
              	WriteIIC563(0x186,0x00);
              	WaitSetup(8);
              #endif
 940   1      #if PANEL == Samsung_LTM213U4_L01|| PANEL == Sharp_FG170M1LA04
              	WaitSetup(8);
              	Hr = ReadIIC563(0x184)+(ReadIIC563(0x185)*256); //read R1
              	//printf("Hr = %x = %u\n",Hr,Hr);
              	dstHtotal = ReadIIC563(0x183) & 0x0f;
              	dstHtotal <<= 8;
              	dstHtotal |= ReadIIC563(0x182);
              	dstVtotal = (ReadIIC563(0x1dd) & 0x0f) << 8;
              	dstVtotal += ReadIIC563(0x1dc);
              	dstVtotal += PanelHeight; 
              	//printf("Htotal=%x = %u\n",dstHtotal,dstHtotal);
              	//printf("Vtotal=%x = %u\n",dstVtotal,dstVtotal);
              	WriteWordIIC563(0x15e,dstHtotal);
              	WriteIIC563(0x150,(DisplayControl & ~BIT_5));
              	WriteIIC563(0x186,0x12);
              	WaitSetup(8);
              	Hr2 = ReadIIC563(0x184)+(ReadIIC563(0x185)*256); //read R2
              	//printf("Hr2 = %x = %u\n",Hr2,Hr2);
              	temp2=(unsigned long)dstHtotal*i+Hr2;
              	i=(unsigned short)(temp2 & 0x7ff);
              	if (Hr < (0x80 + 0x0d))
              	{
              		Hr2 = ((float)0x80+0x0d-Hr)*dstVtotal/PanelHeight;
              		i= i+ Hr2;
              		i= i & 0xffff;
              		if((((i/2)&0xfff)<=0x000)&&(((i/2)&0xfff)>=0x0e0))  // 0x2aa flicker; 0x406 first line error
              		{
              			i=0x32a-i+ Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 17  

              		else if((((i/2)&0xfff)<=0x720)&&(((i/2)&0xfff)>=0x700))
              		{
              			i=0x486-i+ Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
              		else
              		{
              			i=Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
              	}		
              	else if (Hr > (PanelHeight -0x80 + 0x0d))
              	{
              		Hr2 = ((float)Hr -(PanelHeight-0x80+0x0d))*dstVtotal/PanelHeight;
              		i= i- Hr2;
              		i= i & 0x7ff;
              		if((((i/2)&0xfff)<=0x000)&&(((i/2)&0xfff)>=0x0e0))  // 0x2aa flicker; 0x406 first line error
              		{
              			i=i-0x22a+ Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              		else if((((i/2)&0xfff)<=0x720)&&(((i/2)&0xfff)>=0x700))
              		{
              			i=i-0x386+ Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              		else
              		{
              			i=Hr2;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              	}		
              	else if (Hr < (PanelHeight/2))
              	{
              		if((((i/2)&0xfff)<=0x000)&&(((i/2)&0xfff)>=0x0e0))  // 0x2aa flicker; 0x406 first line error
              		{
              			i=0x32a-i;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
              		else if((((i/2)&0xfff)<=0x720)&&(((i/2)&0xfff)>=0x700))
              		{
              			i=0x486-i;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
              		else
              		{
              			i=0;
              			temp= (float)dclk *i;
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 18  

              			temp=temp/dstVtotal/dstHtotal;
              			dclk+=temp;
              		}
              	}		
              	else
              	{
              		if((((i/2)&0xfff)<=0x000)&&(((i/2)&0xfff)>=0x0e0))  // 0x2aa flicker; 0x406 first line error
              		{
              			i=i-0x22a;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              		else if((((i/2)&0xfff)<=0x720)&&(((i/2)&0xfff)>=0x700))
              		{
              			i=i-0x386;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              		else
              		{
              			i=0;
              			temp= (float)dclk *i;
              			temp=temp/dstVtotal/dstHtotal;
              			dclk-=temp;
              		}
              	}		
              
              	SetDPLL(dclk);
              	WaitSetup(8);
              	WriteIIC563(0x150,(DisplayControl));
              	WriteIIC563(0x186,0x00);
              	WaitSetup(8);
              #endif
1069   1      
1070   1      #if PANEL == LP_LM170E01
              			
              			Hr = ReadWordIIC563(0x184);
              	//		printf("Hr1 = %d\r\n",Hr);
              	//		printf("DCLK1 = %ld\r\n",dclk);
              			Ht = (((unsigned long)PanelHeight*(dstHtotal-1)) + Hr) / Vresolution ;
              	//		printf("Ht = %d\r\n",Ht);
              		
              			WriteIIC563(0x186,0x12);	//read Hr2
              			WriteIIC563(0x150,(DisplayControl & ~BIT_5));		//manual HTotal 
              	
              			WaitSetup(8);
              			//if(H_SYNC_Temp == 0xffff){
              			//	WriteIIC563(0x150,DisplayControl);		//fifo auto lock, auto HTotal
              			//	Reg0x154 = 0x02;
              			//	goto ERROR;
              			//}
              	
              			Hr2 = ReadWordIIC563(0x184);
              	//		printf("Hr2 = %d\r\n",Hr2);
              			dstVtotal = ReadWordIIC563(0x1dc) & 0x0fff;
              			dstVtotal += PanelHeight;
              			WriteWordIIC563(0x15b,dstVtotal);		// Display Vtotal
              	//		printf("dstVtotal 1 = %d\r\n",dstVtotal);
              		
              			if((Hresolution == 1152)||(Hresolution == 1280))
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 19  

              	//		if(H_ActiveTab[Resolution] == 1152)
              				SCFactor = 1;
              			else
              				SCFactor = (Ht+(dstVtotal/2))/dstVtotal;
              	//		printf("SCFactor = %bd\r\n",SCFactor);
              	
              			Hr_diff1 = abs(Hr2 - (abs(Ht - ((SCFactor)*dstVtotal))+100));
              			Hr_diff2 = dstHtotal - Hr2 + (abs(Ht - ((SCFactor)*dstVtotal))+100);
              	//		printf("Hr_diff1 = %d\r\n",Hr_diff1);
              	//		printf("Hr_diff2 = %d\r\n",Hr_diff2);
              		
              			if(Hr_diff1 > Hr_diff2){
              				temp2 = (unsigned long)Hr_diff2 * PanelHeight / dstVtotal;
              				if(((Hr + temp2) > PanelHeight) && (Hr_diff2 > (dstHtotal - dstVtotal))){
              					Hr_diff2 = Hr_diff2 - (dstHtotal - dstVtotal);
              					temp2 = (unsigned long)Hr_diff2 * PanelHeight / dstVtotal;
              					if((Hr + temp2) <= (PanelHeight + 0x0d)){
              						temp2 = PanelHeight + 0x1d - (Hr + temp2);
              						Hr_diff2 = Hr_diff2 + (unsigned long)temp2 * dstVtotal / PanelHeight;
              					}
              				}
              				temp = (float)dclk * Hr_diff2;
              				temp2 = temp / dstVtotal / dstHtotal;
              				dclk += temp2;
              	//			printf("temp = %f\r\n",temp);
              	//			printf("Hr_diff2 = %d\r\n",Hr_diff2);
              	//			printf("DCLK2 = %ld\r\n",dclk);
              			}
              			else{
              				if(Hr2 > (abs(Ht - ((SCFactor)*dstVtotal))+100)){
              					temp2 = (unsigned long)Hr_diff1*PanelHeight/dstVtotal;
              					if(Hr < temp2 && Hr_diff1 > (dstHtotal-dstVtotal))
              						Hr_diff1 = Hr_diff1-(dstHtotal-dstVtotal);	
              					temp = (float)dclk * Hr_diff1;
              					temp2 = temp / dstVtotal / dstHtotal;
              					dclk -= temp2;
              	//				printf("temp = %f\r\n",temp);
              	//				printf("Hr_diff1 = %d\r\n",Hr_diff1);
              	//				printf("DCLK3 = %ld\r\n",dclk);
              				}
              				else{
              					temp2 = (unsigned long)Hr_diff1*PanelHeight/dstVtotal;
              					if((Hr + temp2) > PanelHeight && Hr_diff1 > (dstHtotal-dstVtotal)){
              						Hr_diff1 = Hr_diff1-(dstHtotal-dstVtotal);	
              						temp2 = (unsigned long)Hr_diff1*PanelHeight/dstVtotal;
              						if ((Hr + temp2) <= (PanelHeight + 0x0d)){
              							temp2 = PanelHeight + 0x1d - (Hr + temp2);
              							Hr_diff2 = Hr_diff1 + (unsigned long)temp2*dstVtotal/PanelHeight;
              						}
              					}
              					temp = (float)dclk * Hr_diff1;
              					temp2 = temp / dstVtotal / dstHtotal;
              					dclk += temp2;
              	//				printf("temp = %f\r\n",temp);
              	//				printf("Hr_diff1 = %d\r\n",Hr_diff1);
              	//				printf("DCLK4 = %ld\r\n",dclk);
              				}
              			}
              			SetDPLL(dclk);
              		
              			WriteIIC563(0x150,DisplayControl);		//fifo auto lock, auto HTotal 
              			WriteIIC563(0x186,0x00);
C51 COMPILER V6.12  SCALER                                                                 03/05/2008 14:35:00 PAGE 20  

              	
              			WaitSetup(8);
              			//if(H_SYNC_Temp == 0xffff){
              			//	WriteIIC563(0x150,DisplayControl);		//fifo auto lock, auto HTotal 
              			//	Reg0x154 = 0x02;
              			//	goto ERROR;

⌨️ 快捷键说明

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