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