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