tv.c

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

C
2,016
字号
               	     {
               	   
                          if((bAdc >= 0x01)&&(bAdc <= 0x03))
                          	{
                          	    bTvIfValue=0x00;				
      		                     bTvIfValue=bTV_IF_Read();	
					 Delay1ms(30);	
				    bAfc=((bTvIfValue >>1) & 0x0f);
				    if(((bAfc >= 0x00)&&(bAfc <= 0x02))||((bAfc >= 0x0d)&&(bAfc <= 0x0f)))
    					{	
    					#ifdef OPEN_PRINTF
                              	     //    DRS232LogB(bTvPllValue,bTvPllValue,bTvPllValue,0xff);  
                                       #endif
    					bSetStepUp=0x00;	//29Aug08
    					bSetStepDown=0x00;  //29Aug08
    					bBackStepUp=0x00;	//02Sep08
    					bBackStepDown=0x00;  //02Sep08
    				//	fgADCLoopCnt=0; //02Sep08
                                   if((_bSearchMode == SEARCH_SCAN)||((_bSearchMode == SEARCH_SEEK)&&((bTvCurrChIndex<0x01)||(bTvCurrChIndex > bTvTotalCh))))
    			    		{
    			    		  		bTvTotalCh++;
    	                               	bTvCurrChIndex = bTvTotalCh;
    					  WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);		   
    	                 	         WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1);
    			    		} 
    						 sTvCurrChannel.bSystem |= 0x80;	 //16Jun08   AFCAdj = on
    				        sTvCurrChannel.wFreq=_sTunerPLL.wDB;
    						WriteTVChannel(bTvCurrChIndex,sTvCurrChannel);	
                                           if(_bSearchMode == SEARCH_SCAN)
                                   	{
                                   	 if (dir == UP_SEARCH)
           		                      {
     			 	                    _sTunerPLL.wDB+= 0x50; //05Jun08 test
     			                      }
     			                    else
     			                       {
     				                    _sTunerPLL.wDB -= 0x50;
     				                 }
	                                          #ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
                                                   vPalMBugAdj(); //17Sep08 
				                       #endif	   
			
                                               _bSearchState = S_STATE_SET;
    								 break;
                                   	}
    				          else
       				  	{
       				  	bDisplaMode=TV_MENU_TYPE_STILL_DLG;//martin17Oct08 0x08;
       					DataOutValid=0; 	                                 
       					#ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
                                            fgTVSearhMute=0;   //05Aug08 
                                             _sTunerPLL.bCB = TUNER_CB1;
       	       	                   vTvSetCh();	  
                                            #endif		
					             #ifdef MARTIN_TUNER_XF6A_PAL_M_NOT_SYNC
                                                   vPalMBugAdj(); //17Sep08 
				                       #endif	   				
       						    _bSearchState = S_STATE_IDLE;			 
       							 break;
       				  	}	
    					}	
				else  if((bAfc >= 0x03) &&(bAfc <= 0x05))
					{
                                  //   if (dir == DOWN_SEARCH)
       		                      { 		                      	
 			 	                 if((bBackStepUp == 0x00)|| (bBackStepUp != bSetStepUp)) 
          		                    	    {
                                                  if(bSetStepUp==0x00)
                                               	   {
                                                       bSetStepUp=0x01;
                                               	    }
   						          bBackStepUp=bSetStepUp;		
    			 	                        bSetStepDown++;
          		                         }
       		                       }
 			 	        _sTunerPLL.wDB+= 0x01; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
				//	    DRS232LogS("bAfc >= 0x03: .\n");							   
								 break;						
                               	}
				else  if((bAfc >= 0x06) &&(bAfc <= 0x07))
					{
                                   //  if (dir == DOWN_SEARCH)
       		                      { 		                      	
 			 	                 if((bBackStepUp == 0x00)|| (bBackStepUp != bSetStepUp)) 
          		                    	    {
                                                  if(bSetStepUp==0x00)
                                               	  {
                                                       bSetStepUp=0x01;
                                               	   }
   						         bBackStepUp=bSetStepUp;		
    			 	                       bSetStepDown++;
          		                          }
       		                       }
 			 	        _sTunerPLL.wDB+= 0x02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
				//	DRS232LogS("bAfc >= 0x06b: .\n");						   
								 break;						
                               	}
				else  if((bAfc >= 0x08) &&(bAfc <= 0x0c))
					{
                                   //  if (dir == UP_SEARCH)
       		                      { 		                      	
 			 	                  if((bSetStepDown == 0x00)|| (bBackStepDown!= bSetStepDown)) 
       		                          {
                                                 if(bSetStepDown==0x00)
                                            	{
                                                    bSetStepDown=0x01;
                                            	}
						       bBackStepDown=bSetStepDown;		
 			 	                     bSetStepUp++;
       		                         } 		
       		                       }
 			 	        _sTunerPLL.wDB-= 0x02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
		             //         DRS232LogS("bAfc >= 0x08: .\n");								   
					 break;						
                               	}				
							   
                          	}
			    else if(bAdc == 0x00)
			    	{
			    	#if 1 //#ifdef OPEN_PRINTF
			//    	DRS232LogS("bAdc == 00: .\n");
				#endif	

                                        if((bSetStepDown >= 3)&&(bSetStepUp >= 3)) //fine overrun
                                        {
                                          bBackStepUp=0x00;	//02Sep08
                  			       bBackStepDown=0x00;  //02Sep08
                   			       bSetStepUp=0x00;
                  			       bSetStepDown=0x00;
                                           if (dir == UP_SEARCH)
                         		         {  							 	
                  			 	      _sTunerPLL.wDB += 0x20; 
                                             }
                  			       else	
                  			    	  {
                                                  _sTunerPLL.wDB -= 0x20; 
                  			    	   }
                  				  _bSearchState = S_STATE_SET;
                  		                 break;
                                        }

				
                              //    if (dir == UP_SEARCH)
       		                  { 	
       		                      if((bSetStepDown == 0x00)|| (bBackStepDown!= bSetStepDown)) 
       		                        {
                                                 if(bSetStepDown==0x00)
                                            	{
                                                    bSetStepDown=0x01;
                                            	}
						       bBackStepDown=bSetStepDown;		
 			 	                     bSetStepUp++;
       		                       } 			 	                
       		                     }					 
						  
					 if((bSetStepDown != 0)||(bSetStepUp != 0))
					 	 _sTunerPLL.wDB-= 0x01;
					  else 			
 			 	           _sTunerPLL.wDB-= 0x02; // 0X02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
								 break;
							 
			    	}
				/*
			    else if(bAdc == 0x01)
			    	{
			    	#ifdef OPEN_PRINTF
			    //	DRS232LogS("bAdc == 01: .\n");
				#endif	
                                if (dir == UP_SEARCH)
       		                      { 		                      	
 			 	                bSetStepUp++;
       		                       }
 			 	           _sTunerPLL.wDB-= 0x01; // 0X02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
								 break;
			    	}
			   else if(bAdc == 0x03)
			    	{
			    	#ifdef OPEN_PRINTF
			    //	 DRS232LogS("bAdc == 03: .\n");
			       #endif		
                                if (dir == DOWN_SEARCH)
       		                      { 		                      	
 			 	                bSetStepDown++;
       		                       }
 			 	           _sTunerPLL.wDB+= 0x01; // 0X02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
								 break;
			    	}
			    	*/
			   else if(bAdc == 0x04)
			    	{
			    	#if 1 //#ifdef OPEN_PRINTF			    	
			//    	DRS232LogS("bAdc == 04: .\n"); 
			         #endif
                                     if((bSetStepDown >= 3)&&(bSetStepUp >= 3)) //fine overrun
                                       {
                                          bBackStepUp=0x00;	//02Sep08
                  			       bBackStepDown=0x00;  //02Sep08
                   			       bSetStepUp=0x00;
                  			       bSetStepDown=0x00;
                                           if (dir == UP_SEARCH)
                         		         {  							 	
                  			 	      _sTunerPLL.wDB += 0x20; 
                                             }
                  			       else	
                  			    	  {
                                                  _sTunerPLL.wDB -= 0x20; 
                  			    	   }
                  				  _bSearchState = S_STATE_SET;
                  		                 break;
                                        }

					 
                            //    if (dir == DOWN_SEARCH)
       		                      { 	
       		                    if((bBackStepUp == 0x00)|| (bBackStepUp != bSetStepUp)) 
       		                    	{
                                               if(bSetStepUp==0x00)
                                            	{
                                                    bSetStepUp=0x01;
                                            	}
						     bBackStepUp=bSetStepUp;		
 			 	                  bSetStepDown++;
       		                       }
			         	     }
								
					
					 if((bSetStepDown != 0)||(bSetStepUp != 0))
					 	 _sTunerPLL.wDB+= 0x01;
					  else 
 			 	           _sTunerPLL.wDB+= 0x02; // 0X02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
								 break;
								 
			    	}
			   else   //adc > 04
			    	{         
                                    if((bSetStepDown >= 3)&&(bSetStepUp >= 3)) //fine overrun
                                       {
                                          bBackStepUp=0x00;	//02Sep08
                  			       bBackStepDown=0x00;  //02Sep08
                   			       bSetStepUp=0x00;
                  			       bSetStepDown=0x00;
                                           if (dir == UP_SEARCH)
                         		         {  							 	
                  			 	      _sTunerPLL.wDB += 0x20; 
                                             }
                  			       else	
                  			    	  {
                                                  _sTunerPLL.wDB -= 0x20; 
                  			    	   }
                  				  _bSearchState = S_STATE_SET;
                  		                 break;
                                        }					
			    	//	DRS232LogS("bAdc == 05: .\n"); 
 			 	           _sTunerPLL.wDB+= 0x02; // 0X02; //05Jun08 test
                                           _bSearchState = S_STATE_SET;
								 break;
			    	}
                        }	
			else  //TV NOT SYNC
				{
				     //nothing
				}


         if ((--_bSearchVerifyCnt)>0)
		 {   
		        _bSearchState = S_STATE_CHECK_PLLLOCK;
		        break;
		 }		  
	  else
		{		
		//	{DRS232LogS("bAdc fail .\n"); }
		   if((_bSearchMode == SEARCH_SCAN)||(_bSearchMode == SEARCH_SEEK))
			{
			
		//	  fgTVSyncFail=0;	 
		         if (dir == UP_SEARCH)
       		    {  							 	
			 	  _sTunerPLL.wDB += 0x20; //0x14; //18Jun08
			 	       bSetStepUp=0x00;
			              bSetStepDown=0x00;
			 	       bBackStepUp=0x00;	//02Sep08
					bBackStepDown=0x00;  //02Sep08
 			     }
 			  else
 			       { 		
 			        if(((bSetStepDown >= 3)&&(bSetStepUp >= 3))||(((bSetStepDown>= 1)||(bSetStepUp>= 1))&&(mReadDvdDat()))) 
 			        	{  //fine overrun
 			        	   bBackStepUp=0x00;	//02Sep08
					   bBackStepDown=0x00;  //02Sep08
 			        	   bSetStepUp=0x00;
			                 bSetStepDown=0x00;
                                       _sTunerPLL.wDB -= 0x20; 
 			        	}
				 else	
 				     _sTunerPLL.wDB -= 0x10;   //18Jun08 need slow for Manual search 
 			       }			  
			    vFreqSwitch(dir);
                        _bSearchState = S_STATE_SET;
		      }
		    else   //11Jun08
		       _bSearchState = S_STATE_IDLE;
		 break;	
			
    	     }
	
		break;	
		
    	case S_STATE_SEEK_STEP_WAIT:
       	if (_bSearchCnt>0)
       	{
       		--_bSearchCnt;
		//04Jun08	Delay1ms(20);
			if (_bSearchCnt==0)
			{
		       #if 0//	 #ifdef MARTIN_MODIFY_AUTO_SCAN
			  _bSearchState = S_STATE_CHECK_PLLLOCK;
			#else
                      	_bSearchState = S_STATE_SET;
			#endif			
			}
       	}
		break;
		
		
    	case S_STATE_ABORT:
      	       _bSearchPercent = 100;
            //  _bSearchMode = SEARCH_IDLE;
		if ((bTvTotalCh>0)&&(_bSearchMode ==  SEARCH_SCAN))	  
		{
		#ifdef MARTIN_ADD_SEARCH_TUNER_MUTE
                 fgTVSearhMute=0;   //05Aug08 
                #endif
		#ifdef MARTIN_MODIFY_AUTO_SCAN
                   bTvCurrChIndex=0x01; //martin 12May08
		#endif
              	sTvCurrChannel = ReadTVChannel(bTvCurrChIndex);
			_sTunerPLL.wDB = sTvCurrChannel.wFreq;	
                     _sTunerPLL.bCB = TUNER_CB1;
	       	vTvSetCh();	  
			   WriteE2prom(TV_LAST_CH_POS,&bTvCurrChIndex,1);			    		
			   WriteE2prom(TV_TOTAL_CH_POS,&bTvTotalCh,1);	//07Jul08	
		}	
		
			if(_bSearchMode ==  SEARCH_SEEK)
				 bDisplaMode=TV_MENU_TYPE_STILL_DLG;//martin17Oct08 0x08;
			else if(_bSearchMode ==  SEARCH_SCAN)
				 bDisplaMode=TV_MENU_TYPE_EXIT_SETUP;//martin17Oct08 0x04;
			else 
				 bDisplaMode=TV_MENU_TYPE_REDRAW_ITEM;//martin17Oct08 0x01;	
				 
		_bSearchMode = SEARCH_IDLE;				
 	        _bSearchState = S_STATE_IDLE;  //S_STATE_CHK_VIDEO;  12JuN08
       	_bSearchCnt = 0; //  S_TV_VERIFY_TIME;  12JuN08
		#ifdef MARTIN_MCU_AND_DVD_PROTOCOL
                DataOutValid=0; //martin 09May08
		#endif			

		break;	
     }
}

void vTVKeyPreProc(BYTE save_key)
{  
#ifdef MARTIN_SUPPORT_CHNNEL_SKIP
        BIT bChannelSkip;
        BYTE bTempChIndex;
        BYTE bSkipOut;
#endif		
	switch (save_key)
	{
	case IR_CHANNEL_UP:   //IR_RIGHT:   martin 14May08
	fgAFCADJCnt=0x00; //02Aug08
	     bTvLastChannel= bTvCurrChIndex;  //07Oct08
	#ifdef MARTIN_SUPPORT_CHNNEL_SKIP
	bTempChIndex=bTvCurrChIndex;   //17Jul08
	#endif

        if (bTvTotalCh>0x01) 
        	{
        	  if(bTvCurrChIndex>=bTvTotalCh)
			bTvCurrChIndex=0x01;
		 else
			 bTvCurrChIndex++;	
		   #ifdef MARTIN_SUPPORT_CHNNEL_SKIP
		     bSkipOut =(bTvTotalCh-0x01);
		sTvCurrChannel = ReadTVChannel(bTvCurrChIndex);
		 //01Aug08   Delay1ms(50); 
		 bChannelSkip= (sTvCurrChannel.bSystem & 0x40) >> 6;
                  while(!bChannelSkip)    
			{
			bSkipOut--;
			if(bSkipOut == 0x00)
				{
				  bTvCurrChIndex=bTempChIndex;
                             sTvCurrChannel = ReadTVChannel(bTvCurrChIndex);
				  break;			 

⌨️ 快捷键说明

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