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