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

📄 tuner.c

📁 这是T118和T103的通用程序
💻 C
字号:
#include "reg51.h"
#include "TW803Reg.h"
#include "System.h"
#include "OSDCtrl.h"
#include "TwoWire.h"
#include "OSDDraw.h"
#include "NVRam.h"
#include "Remote.h"
#include "Keypad.h"
#include "Tuner.h"
#include "Freq_Table.h"
#define __GLOBAL_H__
#include "Global.h"

#ifdef TV

tTV_Freq*  ttTV_Freq;
tTV_Code*  TV_Code;
//unsigned long idata press_counter;


/* --------------------------------------------------------------------------
    Function  : Tuner_CalChannel
    Prupose   : Calculate channel frequency
    Arguments : --    --                  --
    Returns   : --    --                  --
    External  : --    --                  --
    Notes     :
   -------------------------------------------------------------------------- */
uDWORD Tuner_CalChannelFreq(uCHAR ChNum)
{

	BYTE  lbChCount = 0;
  	BYTE  lbChDiff  = 0;
	uDWORD ChFreq;

	TV_Code = ttTV_Code[EepTV.cCountry];
	ttTV_Freq = TV_Code[EepTV.cMode].TV_Freq;
  	//------- Search channel frequency according to channel number

  	do {
			ChFreq = CH_Freq(lbChCount);//lbChCount);
	    	lbChDiff = ChNum - CH_NO(lbChCount);

    		if ( ++lbChCount >= CH_TYPE_TOTAL )
			{
      			--lbChCount;
      			break;
    		}

  	}while ( ChNum >= CH_NO(lbChCount) );

  	//------- Calculate offset channel frequency
  	if(lbChDiff)
		ChFreq += (uDWORD)( CH_BANDWIDTH(lbChCount) ) * (uDWORD)lbChDiff * 100;      //unit, 10KHZ

	return ChFreq;

}


/*   A U T O   M E M O R Y   */
/*-------------------------------------------------------------------------
    
-------------------------------------------------------------------------*/
void AutoMemory(uCHAR Adj)
{
	uCHAR i;
	uDWORD dTVFreq;
	uDWORD rTVFreq;
	sCHAR cStep;
	uCHAR cTVNum=0;
	uCHAR cTV_Max,cTV_Min;
    uCHAR origalChanel;
	Adj = 0;


   origalChanel = EepTV.cChannelNum;
	TV_Code = ttTV_Code[EepTV.cCountry];
	cTV_Max = TV_Code[EepTV.cMode].CHEnd;
	cTV_Min = TV_Code[EepTV.cMode].CHStart;
  	I2CWriteByte(TW803_P0,0xc2,0x00);

	ir_data=0;
/*-------------------------------------------------------------------------
20060812    
-------------------------------------------------------------------------*/
#ifdef lucy_edition
  	skipon=0;
	OpenPanel();					//lucy for tuner
#endif
/*-------------------------------------------------------------------------
20060812    
-------------------------------------------------------------------------*/	

   for (i=0; i<cTV_Min; i++)
   {
        EEPSaveTVChannel(2*i, 0x00);  //set these channel as skip channel
        EEPSaveTVChannel(2*i+1, 0x80);  //
   }

   for (i=0; i<=FAVORITE_NO; i++)        //reset the favorite channel
   {
        I2CWriteByte(EEPGLOBAL_BLOCK, EEPFAV_OFFSET+i ,0x00);
        EepFav.cFav_list[i]=0x00;
        twdDelay(5);
    }

	for(i=cTV_Min; i<=cTV_Max; i++)
  	{
		if(ir_data!=0)
			break;

		//////////////These Three functions should define in Tuner_xxx.c
  		//------- Set tuner channel
  		dTVFreq = Tuner_CalChannelFreq(i);                  // Calculate channel default freqency and driver
  		Tuner_WriteFreq(dTVFreq);					             // Set Freqency, the unit is 10KHz and not yet add intermediate freq.
  		rTVFreq = Tuner_AFC_Control(dTVFreq);               // Run AFC control to fine-tune channel , unit 10KHZ

      if (rTVFreq && rTVFreq != dTVFreq){
         cStep = (rTVFreq - dTVFreq)/ADCRatio;
      }else{
         cStep = 0;
      }
		//////////////////////////////////////////////////////////////////////////////////////////////


		if( rTVFreq != 0)
			OSDDrawNum(i, 0, 19, m_cItem, COL_NORMAL, LBLUE_RED|0x03);
		else
			OSDDrawNum(i, 0, 19, m_cItem, COL_TITLE, LBLUE_RED|0x03);


   	if( rTVFreq )
		{
			twdDelay(400);
			if ( ( I2CReadByte(TW803_P2,0x3A) & 0x06 ) == 0x06 ){
				EEPSaveTVChannel(2*i, cStep);//wTVFreq);
				EEPSaveTVChannel(2*i+1, 0x00);  //skip channel or not
				cTVNum++;
			}else{
				EEPSaveTVChannel(2*i, 0x00);  //skip channel or not
				EEPSaveTVChannel(2*i+1, 0x80);  //skip channel or not
         }
		}else{
				EEPSaveTVChannel(2*i, 0x00);  //skip channel or not
				EEPSaveTVChannel(2*i+1, 0x80);  //skip channel or not
      }



    }

  	  dTVFreq = Tuner_CalChannelFreq(origalChanel);                  // Calculate channel default freqency and driver
      OSDExit();
      OSDClearPage();
      OSDPosition(RIGHT_TOP);
      OSDDrawNum(origalChanel, 0, 19, 2, COL_TITLE, LBLUE_RED|0x03);
      OSDEnable();
  	  Tuner_WriteFreq(dTVFreq);					             // Set Freqency, the unit is 10KHz and not yet add intermediate freq.

//	gfTV_Force_Mute = 0;

}

//BOOL ChannelSel(BYTE Ch_No)
BOOL ChannelSel(void)
{
#ifdef lucy_edition
	uWORD wTVFreq;

	wTVFreq = Tuner_CalChannelFreq(Ch_No);
	Tuner_WriteFreq(wTVFreq);
#else
	uDWORD dTVFreq;

    dTVFreq = TVEEPGetChFreq();
	Tuner_WriteFreq(dTVFreq);
    twdDelay(5);

    I2CWriteByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+ TV_cChannelNum,EepTV.cChannelNum);  //ruby
    twdDelay(5);
    I2CWriteByte(EEPGLOBAL_BLOCK , EEPTV_OFFSET+TV_ChanelIndex,0x00);
    twdDelay(5);

    return SUCCESS;
#endif
}

//=======================================================================
//kenny 950112

//uWORD TVEEPGetChFreq(uCHAR cNum)
#if 0
uWORD TVEEPGetChFreq(void)
{
	uWORD wFreq;

	if(EepTV.cMode)
	{
	wFreq = I2CReadByte(EEPTVAIR_BLOCK,EepTV.cChannelNum);

	}
	else
	{
	wFreq = I2CReadByte(EEPTVCABLE_BLOCK, EepTV.cChannelNum);

	}
	twdDelay(NVRDELAY);

	return wFreq;
}
#endif
//=======================================================================

/* ---------------------------------------------------------------------------------
    Function  : TVEEPGetChFreq
    Prupose   : Caculate freqency  of channel EepTV.cChannelNum by
                (default channel frequency + Delta frequency) (10KHZ)
    Notes     :
------------------------------------------------------------------------------------- */
uDWORD TVEEPGetChFreq(void)
{
	sCHAR sDeltaFreq;
   uDWORD dFreq;

	if(EepTV.cMode)
	{
//	wDeltaFreq = I2CReadByte(EEPTVAIR_BLOCK,EepTV.cChannelNum)*ADCRatio;
	sDeltaFreq = I2CReadByte(EEPTVCABLE_BLOCK, 2*EepTV.cChannelNum);    //
	}
	else
	{
//	wDeltaFreq = I2CReadByte(EEPTVCABLE_BLOCK, EepTV.cChannelNum)*ADCRatio;    // unit (KHZ/100)
	sDeltaFreq = I2CReadByte(EEPTVAIR_BLOCK,2*EepTV.cChannelNum);
	}

	twdDelay(NVRDELAY);

   dFreq = Tuner_CalChannelFreq(EepTV.cChannelNum);   //unit ,10KHZ, default channel frequency
   dFreq += (sDWORD)(sDeltaFreq*ADCRatio);        //unit ,10KHZ
	return dFreq;
}


#ifdef lucy_edition
void ResetTVChannel(void)
{
	uCHAR i;
	uWORD wTVFreq;
	uCHAR cTV_Max,cTV_Min;
							//lucy for tuner
	OSDResetVideoData();
	OSDSetVideoValues();
	EEPSaveVideoData();
	

	m_bAir_Cable = 0; 
	cTV_Max = ttTV_Code[m_bAir_Cable].CHEnd;
	cTV_Min = ttTV_Code[m_bAir_Cable].CHStart;

	//m_bAir_Cable = 0;    
	for( i=cTV_Min; i<cTV_Max; i++)
  	{
		wTVFreq = Tuner_CalChannelFreq(i);                        // Calculate channel freqency and driver
    		EEPSaveTVChannel(i, wTVFreq);
 	}
	i = I2CReadByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX);
	i |= 0x01;
	I2CWriteByte(EEPVIDEOBLOCK, idVIDEO_FLAG_INDEX,i);
	twdDelay(NVRDELAY);
}
#endif








#endif // end of [#ifdef TV]


⌨️ 快捷键说明

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