⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 C
字号:
/************************************************
 *                      			*
 *	ADC.C:  ADC sub-routines		*
 *                      			*
 ************************************************/

#include <reg51.h>
#include "mascot.h"
#include "osd.h"
#include "global.h"


unsigned char code ChangeLine[3] = "\x0a\x0d";

#define CLAMP_MAX		0x02
#define CLAMP_MIN		0x01
#define GAIN_MAX		0xFE
#define GAIN_MIN		0xFC  //jordan1218

//jordan0222    adcGainTune subroutine
void adcGainTune(void)
{
    unsigned char i, cnt1, cnt2;
    
	initCalibration();
        hvCalibration(OPTIONCENTER);

	eepData.clampR = eepData.clampG = eepData.clampB = DEF_clamp;
	eepData.gainR = eepData.gainG = eepData.gainB = DEF_gain;   
	buff[5] = buff[6] = buff[7] = DEF_clamp;
	buff[8] = buff[9] = buff[10] = DEF_gain;
	
	RegByteOut(TDA_RGAIN, eepData.gainR);
	RegByteOut(TDA_GGAIN, eepData.gainG);
	RegByteOut(TDA_BGAIN, eepData.gainB);
	
	RegByteOut(TDA_RCLAMP, eepData.clampR);    
	RegByteOut(TDA_GCLAMP, eepData.clampG);    
	RegByteOut(TDA_BCLAMP, eepData.clampB);    
		
	for(i=0;i<3;i++)
	{
#if RS232DBG
		if(fgRS232){ wr_232_str("***** i="); wr_232_dec(i); wr_232_str(ChangeLine);}
#endif

	        cnt1 = 30;
	        while(cnt1>0)
	        {
			cnt1--;
			buff[3] = HCALSTART+26;           // Cal H End [7:0]
			buff[4] = ((HCALSTART>>8)&0x0F);  // Cal H Start/End [10:8]
			RegDataOut(0xB4, buff+3, 2);

#if RS232DBG
	if(fgRS232)
		wr_232_str("ADJ clamp -->\x0a\x0d");
#endif
		
			if(cnt1>25) cnt2=43; else cnt2=10;
			while(cnt2>0)
			{
				cnt2--;
				readColor();
	                
				if ((buff[5+i] > 0x80) && (buff[i] > 0x40))
					goto fail;
	
#if NEW_ADC
				if (buff[i] < CLAMP_MIN)         buff[5+i]+=6;//eepData.clampR G B
				else if (buff[i] > CLAMP_MAX+6)	 buff[5+i]-=6;
				else if (buff[i] > CLAMP_MAX)    buff[5+i]-=2;
				else                             break;	
				RegByteOut(0x12+2*i,buff[5+i]<<1);	//set cr12,14,16
#else
				if (buff[i] < CLAMP_MIN)         buff[5+i]-=4;//eepData.clampR G B
				else if (buff[i] > CLAMP_MAX+6)	 buff[5+i]+=4;
				else if (buff[i] > CLAMP_MAX)    buff[5+i]+=2;
				else                             break;	
				RegByteOut(0x12+2*i,buff[5+i]);	//set cr12,14,16
#endif
			
#if RS232DBG
	if(fgRS232)
		wr_232_str("==> clp="); wr_232_hex(buff[5+i],1);wr_232_hex(buff[i],1); wr_232_hex(cnt2,1);wr_232_str(ChangeLine);
#endif
			}
           
           
#if RS232DBG
	if(fgRS232)
	{
		wr_232_str("==> clamp="); wr_232_hex(buff[5+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
		wr_232_str("ADJ gain -->\x0a\x0d");
	}
#endif

			buff[3] = hTotal;           // Cal H End [7:0]
			buff[4] = ((hTotal>>4)&0xF0)+((HCALSTART>>8)&0x0F);//Cal H Start/End [10:8]
			RegDataOut(0xB4, buff+3, 2);	
			readColor();
			if ((buff[8+i] > 0x40) && (buff[i] < 0x10))
			goto fail;
			if( (buff[8+i] < 4) || (buff[8+i] > 0x7c)  )	break;
			else if (buff[i] > GAIN_MAX)          buff[8+i]-=3;//buff[i] is maximum color value R,G,B 
			else if (buff[i] < GAIN_MIN-6)   buff[8+i]+=3;//buff[8+i] is one of eepData.gainR G B
			else if (buff[i] < GAIN_MIN)     buff[8+i]++;
			else                             break;

			RegByteOut(0x13+2*i,buff[8+i]);//set cr 13,15,17
              
#if RS232DBG
	if(fgRS232)
		wr_232_str("==> gain="); wr_232_hex(buff[8+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
#endif

		}
#if RS232DBG
            if(fgRS232){
                wr_232_str("==> final gain="); wr_232_hex(buff[8+i],1);wr_232_hex(buff[i],1); wr_232_str(ChangeLine);
            }
#endif

	}
    
	eepData.clampR = buff[5];
	eepData.clampG = buff[6];
	eepData.clampB = buff[7];
	eepData.gainR = buff[8];
	eepData.gainG = buff[9];
	eepData.gainB = buff[10];

	eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);

//    	eepData.blacklevel = DEF_blacklevel;
//	eepDataOut(EEPDATASTART+(&eepData.blacklevel-&eepData),(unsigned char *)&eepData.blacklevel, 1);        	    	

#if RS232DBG
    if(fgRS232){
        wr_232_str("adcGainTune(E)..\x0a\x0d"); 
        wr_232_str("gainR="); wr_232_hex(eepData.gainR,1);
        wr_232_str(" gainG="); wr_232_hex(eepData.gainG,1);
        wr_232_str(" gainB="); wr_232_hex(eepData.gainB,1);
        wr_232_str(ChangeLine);
        wr_232_str("clampR="); wr_232_hex(eepData.clampR,1);
        wr_232_str(" clampG="); wr_232_hex(eepData.clampG,1);
        wr_232_str(" clampB="); wr_232_hex(eepData.clampB,1);
        wr_232_str(ChangeLine);
    }
#endif

    return;

fail:
	eepDataIn(EEPDATASTART+(&eepData.clampR-&eepData),buff+5, 6);
	RegByteOut(TDA_RGAIN, eepData.gainR);
	RegByteOut(TDA_GGAIN, eepData.gainG);
	RegByteOut(TDA_BGAIN, eepData.gainB);
	
	RegByteOut(TDA_RCLAMP, eepData.clampR);    
	RegByteOut(TDA_GCLAMP, eepData.clampG);    
	RegByteOut(TDA_BCLAMP, eepData.clampB);    
//	eepData.blacklevel = DEF_blacklevel;
//	eepDataOut(EEPDATASTART+(&eepData.blacklevel-&eepData),(unsigned char *)&eepData.blacklevel, 1);        	    	
	

#if RS232DBG
    if(fgRS232){ wr_232_str("Gain tune fail..\x0a\x0d"); }
#endif
		
}	



void readColor(void)
{	
	RegByteOut(0xB1, 0x07);     // select component R G b
	RegByteOut(0xB2, 0xFF);
	RegByteOut(0xB0, 0x20);     // Enable color calibration
	RegByteOut(0x00, 0x00);     // Clear the calibration status reg
	waitCalibReady(0x40);   
#if NEW_ADC
	buff[2] = RegByteIn(0xDB);
	buff[1] = RegByteIn(0xDC);
	buff[0] = RegByteIn(0xDD);
#else
	buff[0] = RegByteIn(0xDB);
	buff[1] = RegByteIn(0xDC);
	buff[2] = RegByteIn(0xDD);
#endif
}




#if AUTO_CLAMP

#define clamp_ok	0x80
#define clamp_Up	0x01
#define clamp_Dn	0x02
#define clamp_U_turn	0x04
#define clamp_more	0x08

// add by jordan0113
void adcClampTune(void)
{
	unsigned char i,j=0;	//, j
	unsigned char Clamp_buff[3] = {0x00, 0x00, 0x00};
	
#if RS232DBG
	if(fgRS232){ wr_232_str("adcClampTune(B)..\x0a\x0d"); }
#endif
	
	initCalibration();
	buff[3] = HCALSTART+26;           // Cal H End [7:0]	030121-1 by jordan
	buff[4] = ((HCALSTART>>8)&0x0F);  // Cal H Start/End [10:8]
	RegDataOut(0xB4, buff+3, 2); 	
 	
	buff[15] = eepData.clampR;
	buff[16] = eepData.clampG;
	buff[17] = eepData.clampB;
    
	
	while(1)
	{		
next_loop:
		if ( modechangeflag ) //by seven 030718
			return;
		/*if ( RegByteIn(0x01) & 0x35 ) 
		{
			modeChangemode = 1;
			return;
		}*/ // by seven
		
#if RS232DBG
	if(fgRS232){ wr_232_str("adcClampTune readColor..\x0a\x0d"); }

            if(fgRS232){
                wr_232_str("==> j=");wr_232_hex(j,1);  wr_232_str(ChangeLine);
           }
#endif
		j++;
		if(j>50)
			goto fail;	// 030121-2 by jordan	

		if ((Clamp_buff[0] & clamp_ok) && (Clamp_buff[1] & clamp_ok) && (Clamp_buff[2] & clamp_ok))
			goto a_ok;
		readColor();
		for(i = 0; i < 3; i++)
		{
next_color:
			if (Clamp_buff[i] & clamp_ok)
			{
				if (i == 2)
					goto next_loop;
				else
				{
					i++;
					goto next_color;
				}
			}
				
			if ((buff[15+i] > 0xd0) && (buff[0+i] > 0x40))
				goto fail;

			if (buff[0+i] < 1)
			{	
				if (Clamp_buff[i] & clamp_Up)
				{ 
					if (Clamp_buff[i] & clamp_U_turn)
					{		
						Clamp_buff[i] |= clamp_ok;
					}	
					Clamp_buff[i] |= clamp_U_turn;
					Clamp_buff[i] &= ~clamp_Up;
				}
				buff[15+i]-=8;//eepData.clampR G B
				Clamp_buff[i] |= clamp_Dn;
			}
			else if (buff[0+i] > 9)	
			{
				if (Clamp_buff[i] & clamp_Dn)
				{ 
					if (Clamp_buff[i] & clamp_U_turn)
					{		
						Clamp_buff[i] |= clamp_ok;
					}	
					Clamp_buff[i] |= clamp_U_turn;
					Clamp_buff[i] &= ~clamp_Dn;
				}
				buff[15+i]+=8;
				Clamp_buff[i] |= clamp_Up;
			}
			else if (buff[0+i] > 2)	
			{
				if (Clamp_buff[i] & clamp_Dn)
				{ 
					if (Clamp_buff[i] & clamp_U_turn)
					{		
						Clamp_buff[i] |= clamp_ok;
					}	
					Clamp_buff[i] |= clamp_U_turn;
					Clamp_buff[i] &= ~clamp_Dn;
				}
				buff[15+i]+=2;
				Clamp_buff[i] |= clamp_Up;
			}
			else
			{		
				Clamp_buff[i] |= clamp_ok;
			}	
			RegByteOut(0x12+2*i,buff[15+i]);	//set cr12,14,16
#if RS232DBG
            if(fgRS232){
                wr_232_str("==> clamp=");wr_232_hex(i,1); wr_232_hex(buff[15+i],1);wr_232_hex(buff[0+i],1); wr_232_str(ChangeLine);
           }
#endif
		}
	}

a_ok:
	eepData.clampR = buff[15];
	eepData.clampG = buff[16];
	eepData.clampB = buff[17];
  
//	eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);
	
	
	return;
	
fail:
	eepDataIn(EEPDATASTART+(&eepData.clampR-&eepData),buff, 3);

	eepData.clampR = buff[0];
	eepData.clampG = buff[1];
	eepData.clampB = buff[2];
	
//	eepDataOut(EEPDATASTART+(&eepData.clampR-&eepData),(unsigned char *)&eepData.clampR, 6);

	RegByteOut(TDA_RCLAMP, eepData.clampR);    
	RegByteOut(TDA_GCLAMP, eepData.clampG);    
	RegByteOut(TDA_BCLAMP, eepData.clampB);    
	
#if RS232DBG
	if(fgRS232){ wr_232_str("fail..\x0a\x0d"); }
#endif
		
}
#endif //AUTO_CLAMP

⌨️ 快捷键说明

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