tv.c

来自「CS8955控制TV软件。用MCU做模拟电视的控制。」· C语言 代码 · 共 2,016 行 · 第 1/5 页

C
2,016
字号
}
#else
void vFreAFCAdj(void)   //29Aug08 BOOL change to void //martin 08Jun08 add
{
//BYTE fgAFCWIN;  //02Jul08
  BYTE bAfc; //02Jul08
  BYTE bSetpFerq;

 if(mReadDvdDat() !=0 ) 
 {
   if(fgAFCADJCnt == 0x05)
    Delay1ms(50);   //Wait DVD video SYNC
  }
if(!mReadDvdCs())
	 Delay1ms(20);
if(!mReadDvdCs())
	 Delay1ms(20);
if(mReadDvdDat() ==0 ) //(fgAFCWIN == 0xc0)
{
  bTvIfValue=bTV_IF_Read();
 Delay1ms(30);
  btesttvPll=bTvIfValue;
 //  fgAFCWIN=(bTvIfValue & 0xc0);  
    bAfc=(bTvIfValue >>1) & 0x0f;

  if((bAfc >= 0x03)&&(bAfc <=0x07))
  {
      if(bAfc ==0x07)
     	{
     	bSetpFerq=0x03;
      	}
      else if((bAfc >=0x06)&&(bAfc <0x05))
      	{
      	bSetpFerq=0x01;
         }
      else
	  	bSetpFerq=0x01;
	  
      	   _sTunerPLL.wDB+= bSetpFerq;
      
        sTvCurrChannel.wFreq=_sTunerPLL.wDB;
    	vTvSearchSetFre(); 
    	 Delay1ms(50);
            Delay1ms(50);
	if(!mReadDvdCs())
	 Delay1ms(20);
	if(!mReadDvdCs())
	 Delay1ms(20);
	if(mReadDvdDat() ==0 )
		{
    	  bTvIfValue=bTV_IF_Read();
		Delay1ms(20);	  
    	    btesttvPll=bTvIfValue;
	      bAfc=(bTvIfValue >>1) & 0x0f;	
              if((bAfc !=0x07)&&(bAfc !=0x08))	
		  {
		  if(((bAfc >=0x00)&&(bAfc <=0x02))||(bAfc ==0x0f))  //04Aug08
		      { fgAFCADJCnt=0x00;} //04Aug08
                     WriteTVChannel(bTvCurrChIndex,sTvCurrChannel);	  
    		  }		   
	    	
	
    		}    		
    	else
    		{
                     _sTunerPLL.wDB-= bSetpFerq;
        sTvCurrChannel.wFreq=_sTunerPLL.wDB;
    	vTvSearchSetFre(); 
    		}
    
    }
  else  if((bAfc >= 0x08)&&(bAfc <=0x0f))
    {
      if(bAfc ==0x08)
      	{
      	bSetpFerq=0x03;
       //    _sTunerPLL.wDB-= 0x03;
      	}
      else if((bAfc >= 0x09)&&(bAfc <=0x0a))
      	{
      	 	bSetpFerq=0x03;
           //_sTunerPLL.wDB-= 0x03;
      	}
      else if((bAfc >= 0x0b)&&(bAfc <=0x0c))
      	{
      		bSetpFerq=0x02;
          // _sTunerPLL.wDB-= 0x02;
      	}	  
      else
	  		bSetpFerq=0x01;
         _sTunerPLL.wDB-= bSetpFerq;
      
        sTvCurrChannel.wFreq=_sTunerPLL.wDB;
    	vTvSearchSetFre(); 
    	  Delay1ms(50);
            Delay1ms(50);
       if(!mReadDvdCs())
	 Delay1ms(20);
	if(!mReadDvdCs())
	 Delay1ms(20);	  
	if(mReadDvdDat() ==0 )
		{
    	     bTvIfValue=bTV_IF_Read();
		Delay1ms(20);		 
    		   btesttvPll=bTvIfValue;
	     //fgAFCWIN=(bTvIfValue & 0xc0);  
               bAfc=(bTvIfValue >>1) & 0x0f;	
		//if(((bAfc >=00)&&(bAfc <=0x02))||((bAfc >=0x0e)&&(bAfc <=0x0f)))
		if((bAfc !=0x07)&&(bAfc !=0x08))	
    		{
    		if(((bAfc >=0x00)&&(bAfc <=0x02))||(bAfc ==0x0f))  //04Aug08
		      { fgAFCADJCnt=0x00;} //04Aug08
                     WriteTVChannel(bTvCurrChIndex,sTvCurrChannel);	  
    		} 
		}
		else
		{
                     _sTunerPLL.wDB+= bSetpFerq;
        sTvCurrChannel.wFreq=_sTunerPLL.wDB;
    	vTvSearchSetFre(); 
    		}
		}	 	

       }
	
//29Aug08	 return 1;
}
#endif


void vTvSetChannel(sChannelList sCh)
{
    mMuteEnable();
    _sTunerPLL.wDB = sCh.wFreq;
    _sTunerPLL.bCB = TUNER_CB1;
    vTvSetCh();
    _bSearchState = S_STATE_CHK_VIDEO;   
    _bSearchCnt = S_TV_VERIFY_TIME;	
}

void vTVSwitchSound()
{
//12Sep08      BYTE bData[4];
    BYTE bTempSystem;
sTvCurrChannel = ReadTVChannel(bTvCurrChIndex);
 Delay1ms(20); 
 bTempSystem=(sTvCurrChannel.bSystem & 0x07);

  
if(ShadowDvdInfo[1]==KEY_SETUP_SET_MODE)
{
  bTvCurrSound=ShadowDvdInfo[4];
}
else
{
    if ((++bTvCurrSound)==TV_SOUND_MAX)
	bTvCurrSound = SV_BG;//TV_SOUND_BG;
}

 sTvCurrChannel.bSystem &= 0xc7;
sTvCurrChannel.bSystem |= (bTvCurrSound << 3);
   vTvSetCh();
   WriteTVChannel(bTvCurrChIndex,sTvCurrChannel);	

  
}	


//EXTERN xdata  BYTE    DenTable[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

void vTVSearch(BIT dir)
{	
    WORD  lwTemp; 
    WORD  wTemp; 
// BYTE i,j;    //07Jun08
#ifdef MARTIN_SAVE_CHANNEL_READ_ADC
BYTE bAdc; //29Aug08
BYTE bAfc; //02Jul08
#else
BYTE fgAFCWIN;  //02Jul08
BYTE bAfc; //02Jul08

#endif
	
    switch(_bSearchState)
    {
    	case S_STATE_IDLE:			
      //        _fgTvIsSearch = 0;
		#ifdef MARTIN_MODIFY_AUTO_SCAN
		//  _bSearchUnLock=0x00; //martin 13May08
		#endif
		if(_bSearchMode == SEARCH_SEEK)
			{                  
                      bDisplaMode=TV_MENU_TYPE_STILL_DLG;//0x08;
			DataOutValid=0; 							  
			}
		else if(_bSearchMode == SEARCH_SCAN)
			{
                  
                      bDisplaMode=TV_MENU_TYPE_EXIT_SETUP;//martin17Oct08 0x04;
			DataOutValid=0; 							  
			}
		    _bSearchMode=SEARCH_IDLE;
      		break;
    	case S_STATE_CHK_VIDEO:
 		if (_bSearchCnt>0)
		{
   			--_bSearchCnt;
		    
		  if (_bSearchCnt==0)
		     {
 			 _bSearchPercent = 0;
			 /*
                  #ifdef MARTIN_MODIFY_AUTO_SCAN
                      _bLockStatus = bTV_PLL_Read();
                      if(_bLockStatus==0x7c )
                      {
                      bVideoCheck=0x01;	
                     //   DataOut[9] = 0x01;	
                       }
			else
				{
				 bVideoCheck=0x00;	
			//    DataOut[9] = 0x00;	
				}
                    #endif
					*/
          		 _bSearchState = S_STATE_IDLE;
			#ifdef MARTIN_MCU_AND_DVD_PROTOCOL
                         DataOutValid=0; //martin 09May08
			#endif			

		     }
		   else  if (_bSearchCnt<=100)
		     {
		     #ifdef MARTIN_MODIFY_AUTO_SCAN
                     if(ShadowDvdInfo[2]==0x01)   //stop check video  martin 12May08
			#else 
 	        //01Sep08   	if (DvdRxBuf[COMDVD_BYTE-1]==0)
			#endif
 	       	{
 	               	mMuteDisable();
 			 	_bSearchPercent = _bSearchCnt = 0;
          		 	_bSearchState = S_STATE_IDLE;
 	       	}	
              	  Delay1ms(10);
		     }
		     else
		     {
              	  Delay1ms(10);
		     }	 
		}
              break;
    	case S_STATE_SET:
		//DRS232LogS("S_STATE_SET: .\n");	
              _bSearchVerifyCnt = 0;
	//	_fgTvIsSearch = 1;
 	    //01Sep08   mMuteEnable();
      		if (dir == UP_SEARCH)
      		{
                //  if (_sTunerPLL.wDB>UHF_TOP)
		   if ((_sTunerPLL.wDB>UHF_TOP)||((_sTunerPLL.wDB>UHF_TOP_XF6A)&&(fgTunerType == TV_TYPE_XF6A))||(bTvTotalCh ==TV_CH_MAX))
                  {
                      #ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
                     fgTVSearhMute=0;   //05Aug08 
                    #endif
				                      
			if (bTvTotalCh>0)	  
		        {	
		        if(_bSearchMode ==  SEARCH_SCAN)
		        	{
		        bTvCurrChIndex=0x01;
		        WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);	  //07Jun08                                            
                            WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1);
		        	}
				 _bSearchState = S_STATE_ABORT; //martin 12May08
			 }
			 else   //13Jun08
			  	{
			  	      bTvTotalCh=0x00;
                                 WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);
				    bTvCurrChIndex=0x01;       //29Aug08                 
                                 WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1); //29Aug08					 
					  _bSearchState = S_STATE_IDLE; 
			  	}
                  
			_bSearchPercent = 100;		  
       		_bSearchCnt = S_TV_VERIFY_TIME;
			break;
	           }		    
      		}
      		else // down search
      		{
                  if ((_sTunerPLL.wDB<VHF_LOW_BOT)||((_sTunerPLL.wDB<VHF_LOW_BOT_XF6A)&&(fgTunerType == TV_TYPE_XF6A))||(bTvTotalCh==TV_CH_MAX)/*03Jun08*/)   //martin 12May08
	           {
                  #ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
                 fgTVSearhMute=0;   //05Aug08 
                #endif
                    
			if (bTvTotalCh>0)	  
		        {		
		        if(_bSearchMode ==  SEARCH_SCAN)
		        	{
		                WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);	  //07Jun08	  
		                 bTvCurrChIndex=0x01;                       
                            WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1);
		        	}
				     _bSearchState = S_STATE_ABORT; //martin 12May08
			 }
			 else   //13Jun08
			  	{
			  	bTvTotalCh=0x00;
                                 WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);
				 bTvCurrChIndex=0x01;       //29Aug08                 
                            WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1); //29Aug08				 
					  _bSearchState = S_STATE_IDLE; 
			  	}
			_bSearchPercent = 100;			
			break;
	           }		    
			
     	 	}
		     vFreqSwitch(dir); //17Sep08
		//    sTvCurrChannel.wFreq = _sTunerPLL.wDB;  //03Jun08			

		if(fgTunerType == TV_TYPE_XF6A)  //17Sep08
			{
                      wTemp = (UHF_TOP_XF6A-VHF_LOW_BOT_XF6A)/0x64;
		        lwTemp = (_sTunerPLL.wDB-VHF_LOW_BOT_XF6A);
			}
		else
			{
		        wTemp = (UHF_TOP-VHF_LOW_BOT)/0x64;
		        lwTemp = (_sTunerPLL.wDB-VHF_LOW_BOT);
			}
			 _bSearchPercent = (BYTE) (lwTemp/wTemp) & 0xff;
			  bDisplaMode=TV_MENU_TYPE_REDRAW_DLG;//martin17Oct08 0x02;
		   
			
              _sTunerPLL.bCB = TUNER_CB1;
		 sTvCurrChannel.wFreq = _sTunerPLL.wDB;
		 DataOutValid=0; //martin 03Jun08	   
	        vTvSearchSetFre();		 	
 		_bSearchCnt =15; //15Aug08  20; // 11Aug08  6; // 10Jul08  15;   //07Jul08                 
 		_bSearchState = S_STATE_SET_CHANGE;
 	     	break;
			
      case S_STATE_SET_CHANGE:
	  	//DRS232LogS("S_STATE_SET_CHANGE: .\n");	
	  	if ((--_bSearchCnt)>0)
			{
                          Delay1ms(5);
	  		}
		else
			{
                     #ifdef MARTIN_SAVE_CHANNEL_READ_ADC
                       bTvPllValue=0x00;
      		           bTvPllValue=bTV_PLL_Read();	//29Aug08
      		       #else	   
            	          bTvIfValue=0x00;
            		   bTvIfValue=bTV_IF_Read();	
      	                #endif		
      	  	        _bSearchCnt = 6; //15Aug08 test  10; // Aug08  2; //10Jul0810; //04Jul08 30; //10; //S_TV_WAIT_TIME1;  05Jun08 pm test
      		          _bSearchState = S_STATE_WAIT1;
		 	}
     		break;
			
    	case S_STATE_WAIT1:
		//DRS232LogS("S_STATE_WAIT1: .\n");		
		if ((--_bSearchCnt)>0)
			{			
			Delay1ms(5);	
			break;
			}
		else
      		  {  
      		    if(mReadDvdDat() ==0 )
      		    	   {
                            #ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
                             //    vPalMBugAdj(); //17Sep08 
				#endif	   
                                  _bSearchVerifyCnt =5;
      		    	  }
			      else	
                             _bSearchVerifyCnt = 10; //60; //15; 

				_bSearchState = S_STATE_CHECK_PLLLOCK;	   
      		  }
      		break;
    	case S_STATE_CHECK_PLLLOCK:
               //DRS232LogS("S_STATE_CHECK_PLLLOCK: .\n");		
	/*=============================================================================
	   =============================================================================*/
        //02Jul08      bTvIfValue=bTV_IF_Read();
	  Delay1ms(5);
         #ifdef MARTIN_SAVE_CHANNEL_READ_ADC
               bAdc=(bTvPllValue & 0x07);		 //29Aug08
	  #else		
          fgAFCWIN=(bTvIfValue & 0xc0);  //(((bTvIfValue & 0xc0)>>5)||((bTvIfValue & 0x40)>>6));
		bAfc=(bTvIfValue >>1) & 0x0f;
         #endif
		 
           //    DRS232LogB(bSetStepUp,bBackStepUp,bSetStepDown,bBackStepDown);      
			if(mReadDvdDat() ==0 )//10Jul08 			

⌨️ 快捷键说明

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