autoadj.lst

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

LST
1,606
字号
 302   3      			Abort = 1;			// abort
 303   3      			#if PRINT_MESSAGE
              				printf("AutoPosition fail\n");
              			#endif
 306   3      		}
 307   2      		else
 308   2      		{
 309   3      			//if(ResolutionPtr < 4)
 310   3      			//	{
 311   3      			//	if(FuncBuf[pVPOSITION] > (VTotal - Vresolution-1))
 312   3      			//		FuncBuf[pVPOSITION] = VTotal - Vresolution-14;
 313   3      			//	}
 314   3      			SetHP();
 315   3      			if(ResolutionPtr < 5 && Vact > 300)
 316   3      			{
 317   4      				if(NewVp >= (Vresolution - Vact) / 2)
 318   4      					NewVp = NewVp - (Vresolution - Vact) / 2;
 319   4      				else
 320   4      				{
 321   5      					Abort = 1;
 322   5      					return;
 323   5      				}
 324   4      			}
 325   3      			if(OldVp > NewVp)
 326   3      			{
 327   4      				//for(;OldVp>=NewVp;OldVp--)
 328   4      				//{
 329   4      				//	FuncBuf[pVPOSITION] = OldVp;
 330   4      				//	SetVP();
 331   4      				//}
 332   4      			}
 333   3      			else if(OldVp < NewVp)
 334   3      			{
 335   4      				for(;OldVp<=NewVp;OldVp++)
 336   4      				{
 337   5      					FuncBuf[pVPOSITION] = OldVp;
 338   5      					SetVP();
 339   5      				}
 340   4      			}
 341   3      			else
 342   3      			{
 343   4      				FuncBuf[pVPOSITION] = OldVp;
 344   4      				SetVP();
 345   4      			}
 346   3      		}
 347   2      	}
 348   1      	else
 349   1      	{
 350   2      		Abort = 1;			// abort
 351   2      		#if PRINT_MESSAGE
              			printf("AutoPosition fail\n");
              		#endif
 354   2      	}
 355   1         	// wait for next V pulse coming to latch data
 356   1      	WaitVblank();
 357   1      }
 358          
 359          void AutoClock()
 360          {
 361   1      	//preset mode total
 362   1      	bit FirstDo;
 363   1      	Byte H_Difference,i,Compare;
C51 COMPILER V6.12  AUTOADJ                                                                03/05/2008 14:11:12 PAGE 7   

 364   1      	Word H_Ref,H_Act,TempClock;
 365   1      	#if PRINT_MESSAGE
              		printf("AutoClock\n");
              	#endif
 368   1      	TempClock = FuncBuf[pCLOCK];
 369   1      	if(VTotal > (Vresolution + 190))	//not full screen
 370   1      		{
 371   2      		NonFullScreen = 1;
 372   2      		#if PRINT_MESSAGE
              			printf("Non Full Screen");
              		#endif
 375   2      		return;
 376   2      		}
 377   1      	H_Ref = Hresolution;
 378   1      	if(H_Ref >= FuncBuf[pCLOCK])
 379   1      		{
 380   2      		Abort = 1;
 381   2      		FuncBuf[pCLOCK] = H_Ref + FuncBuf[pHPOSITION];
 382   2      		SetADC_PLL();
 383   2      //		return;
 384   2      		}
 385   1      	WriteWordIIC563(0x117, H_Ref);
 386   1      	FirstDo = 0;
 387   1      	for(i=0;i<20;i++)
 388   1      	{
 389   2      		WriteIIC563(0x106,0x01);
 390   2      	   	LocalTimer = 10;
 391   2      	   	while((ReadIIC563(0x106) & BIT_0) && LocalTimer != 0)
 392   2      		{
 393   3      			CheckModeChange();
 394   3      			if(Abort)
 395   3      				return;
 396   3      		}
 397   2      		H_Act = ReadWordIIC563(0x110) & 0x0fff;
 398   2      		//H_Act = ReadIIC563(0x111) & 0x0f;
 399   2      		//H_Act <<= 8;
 400   2      		//H_Act |= ReadIIC563(0x110);
 401   2      		
 402   2      		// 20040224 Jacky
 403   2      		if(H_Act < (H_Ref - 124)){
 404   3      			i = 0xff;
 405   3      			break;
 406   3      		}
 407   2      		//------------------------
 408   2      		H_Difference = ReadIIC563(0x119);
 409   2      		Compare = (H_Difference & 0xC0) >> 6;
 410   2      		//H_Difference = (H_Difference & 0x3F);
 411   2      		H_Difference = (H_Difference & 0x3F) > AutoClock_Step ? AutoClock_Step : (H_Difference & 0x3f);
 412   2      		if(Compare == 0){	//H_Act == H_Ref jacky20040326 for AutoPhasebyClock
 413   3      			if(!FirstDo){
 414   4      				FirstDo = 1;
 415   4      				AutoPhaseByClock();
 416   4      				if(Abort)
 417   4      					return;
 418   4      			}
 419   3      			else
 420   3      				break;				
 421   3      		}
 422   2      		//if(Compare == 0){	//H_Act == H_Ref
 423   2      		//	break;
 424   2      		//}
 425   2      		if(Compare == 1)
C51 COMPILER V6.12  AUTOADJ                                                                03/05/2008 14:11:12 PAGE 8   

 426   2      		{
 427   3      			FuncBuf[pCLOCK] += H_Difference;
 428   3      			if(FuncBuf[pCLOCK] > 2248)
 429   3      			{
 430   4      				i = 0xff;
 431   4      				break;
 432   4      			}
 433   3      		}
 434   2      		if(Compare == 2 || Compare == 3)
 435   2      		{
 436   3      			FuncBuf[pCLOCK] -= H_Difference;
 437   3      			if(FuncBuf[pCLOCK] < H_Ref)
 438   3      			{
 439   4      				i = 0xff;
 440   4      				break;
 441   4      			}
 442   3      		}
 443   2      		SetADC_PLL();
 444   2      	}
 445   1      	//printf("Clock divider 0 = %d\n",FuncBuf[pCLOCK]);
 446   1      	if(i == 0xff)
 447   1      	{
 448   2      	#if PRINT_MESSAGE
              		printf("None full screen\n");
              	#endif
 451   2      		Abort = 1;
 452   2      		NonFullScreen = 1;
 453   2      		return;
 454   2      	}
 455   1      	else
 456   1      	{
 457   2      	#if PRINT_MESSAGE
              		if(i == 20)
              			printf("AutoClock fail.\n");
              	#endif
 461   2      		if(abs(FuncBuf[pCLOCK] - TempClock) > (TempClock / 11))
 462   2      //			FuncBuf[pCLOCK] = TempClock;
 463   2      			Abort = 1;
 464   2      		else
 465   2      			FuncBuf[pCLOCK] = (FuncBuf[pCLOCK] + 2) & 0xfffc;
 466   2      		
 467   2      		GetFuncRange(pCLOCK);
 468   2      		if(FuncBuf[pCLOCK] > FuncMax)//over VPosition Max
 469   2      		{
 470   3      			FuncBuf[pCLOCK] = FuncMax;
 471   3      	#if PRINT_MESSAGE
              				printf("Clock over Max");
              	#endif
 474   3      		}
 475   2      		
 476   2      		SetADC_PLL();
 477   2      	}
 478   1      }
 479          
 480          void AutoClockByPhase(bit h)
 481          {
 482   1      	bit R_L,U_D;
 483   1      	Byte k,temp;
 484   1      	Word GoodClk;
 485   1      	xdata unsigned long MaxMin,Value;
 486   1      #if PRINT_MESSAGE
              		printf("AutoClockByPhase\r\n");
C51 COMPILER V6.12  AUTOADJ                                                                03/05/2008 14:11:12 PAGE 9   

              #endif
 489   1      //	if((ModePoint < UserModeSt)&&(h == 1)){
 490   1      //		i = 0x104 + (ModePoint * 8);
 491   1      //		FuncBuf[pCLOCK] = EEP_SyncMap[i];
 492   1      //		i++;
 493   1      //		FuncBuf[pCLOCK] <<= 8;
 494   1      //		FuncBuf[pCLOCK] += EEP_SyncMap[i];
 495   1      //	}
 496   1      	if(h == 1)
 497   1      		LoadPresetModeSettings(2);
 498   1      
 499   1      	//printf("Phase ok = %d\n",(unsigned short)FuncBuf[pPHASE]);
 500   1      	GoodClk = FuncBuf[pCLOCK];
 501   1      	SetADC_PLL();
 502   1      	WaitSetup(4);
 503   1      	if(Abort)
 504   1      		return;
 505   1      	//Sleep(25);
 506   1      	MaxMin = CheckPhaseData();
 507   1      	//printf("Clock Value Original = %x %x\n",(unsigned short)(MaxMin >> 16),(unsigned short)MaxMin);
 508   1      	temp = TempPhase;
 509   1      	if(Abort)
 510   1      		return;
 511   1      	if(MaxMin < 0x100000){	//jacky 20050427 for Auto clock fail when gray pattern
 512   2      		FuncBuf[pPHASE] = (temp + 24) & 0x3f;
 513   2      		SetADC_Phase();
 514   2      		return;
 515   2      	}
 516   1      	U_D = 0;
 517   1      	R_L = 0;
 518   1      	for(k=0; k<16; k++)
 519   1      		{
 520   2      		if(R_L)
 521   2      			{
 522   3      			FuncBuf[pCLOCK] += 2;
 523   3      			SetADC_PLL();
 524   3      			//printf("Clock divider 1 = %d\n",FuncBuf[pCLOCK]);
 525   3      			WaitSetup(4);
 526   3      			if(Abort)
 527   3      				return;
 528   3      			//Sleep(25);
 529   3      			Value = CheckPhaseData();
 530   3      			//printf("Clock Value %d = %x %x\n",(unsigned short)k,(unsigned short)(Value >> 16),(unsigned short)Val
             -ue);
 531   3      			if(Abort)
 532   3      				return;
 533   3      			if(MaxMin < Value)
 534   3      				{
 535   4      				GoodClk = FuncBuf[pCLOCK];
 536   4      				MaxMin = Value;
 537   4      				temp = TempPhase;
 538   4      				U_D = 1;
 539   4      				}
 540   3      			else
 541   3      				{
 542   4      				if(U_D == 0)
 543   4      					{
 544   5      					R_L = 0;
 545   5      					FuncBuf[pCLOCK] -= 2;
 546   5      					U_D = 1;
 547   5      					}
 548   4      				else
C51 COMPILER V6.12  AUTOADJ                                                                03/05/2008 14:11:12 PAGE 10  

 549   4      					break;
 550   4      				}
 551   3      			}
 552   2      		else{
 553   3      			FuncBuf[pCLOCK] -= 2;
 554   3      			SetADC_PLL();
 555   3      			//printf("Clock divider 2 = %d\n",FuncBuf[pCLOCK]);
 556   3      			WaitSetup(4);
 557   3      			if(Abort)
 558   3      				return;
 559   3      			//Sleep(25);
 560   3      			Value = CheckPhaseData();
 561   3      			//printf("Clock Value %d = %x %x\n",(unsigned short)k,(unsigned short)(Value >> 16),(unsigned short)Val
             -ue);
 562   3      			if(Abort)
 563   3      				return;
 564   3      			if(MaxMin < Value)
 565   3      				{
 566   4      				GoodClk = FuncBuf[pCLOCK];
 567   4      				MaxMin = Value;
 568   4      				temp = TempPhase;
 569   4      				U_D = 1;
 570   4      				}
 571   3      			else
 572   3      				{
 573   4      				if(U_D == 0)
 574   4      					{
 575   5      					R_L = 1;
 576   5      					FuncBuf[pCLOCK] += 2;
 577   5      					U_D = 1;
 578   5      					}
 579   4      				else
 580   4      					break;
 581   4      				}
 582   3      			}
 583   2      		}
 584   1      	FuncBuf[pCLOCK] = GoodClk;
 585   1      	//printf("Clock divider 3 = %d\n",FuncBuf[pCLOCK]);
 586   1      	SetADC_PLL();
 587   1      	FuncBuf[pPHASE] = (temp + 24) & 0x3f;
 588   1      //	Repeat = 32;
 589   1      	SetADC_Phase();
 590   1      }
 591          
 592          unsigned long CheckPhaseData()
 593          {
 594   1      	Byte ch;
 595   1      	Word zz;
 596   1      	xdata unsigned long Value,MinValueTemp,MaxValueTemp;
 597   1      	MaxValueTemp = 0;
 598   1      	MinValueTemp = 0xffffffff;
 599   1      	FuncBuf[pPHASE] = 0;
 600   1      	SetADC_Phase();
 601   1      	WriteIIC563(0x106,0x02); 
 602   1         	LocalTimer = 10;
 603   1      	for(FuncBuf[pPHASE]=4; FuncBuf[pPHASE]<0x42; FuncBuf[pPHASE] += 4)
 604   1      		{
 605   2      		while((ReadIIC563(0x106) & BIT_1) && LocalTimer != 0)
 606   2      			{
 607   3      			CheckModeChange();
 608   3      			if(Abort)
 609   3      				return 0;
C51 COMPILER V6.12  AUTOADJ                                                                03/05/2008 14:11:12 PAGE 11  

 610   3      			}
 611   2      		SetADC_Phase();

⌨️ 快捷键说明

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