?? tuner.c
字號:
#include "Globe.h"
//#define SlvTuner 0xC0
//#define CH_IN_EAD 2
#define PictureIF 38.0
#define TUNER_IF 0x86
//#define C_CTRL_BYTE 0x88
BYTE PLL_Band;
WORD PB;
BIT NOSign;
BYTE TunerADC;
WORD H_Count;
WORD V_Count;
BYTE code TunerBar_Code[5] =
{_Tuner_BAR_EMP,_Tuner_BAR_1,_Tuner_BAR_2,_Tuner_BAR_3,_Tuner_BAR_FULL};
//BYTE OSD_H_Start;
void Write_PLL_IF(void)
{
IICBuf.ByteArray[0] = 0xd6;//0xd6;
IICWrite(TUNER_IF, 0x00, 1);
DelayX10ms(50);
IICBuf.ByteArray[0] = 0x70;//0x94;//0x70;
IICWrite(TUNER_IF, 0x01, 1);
DelayX10ms(50);
IICBuf.ByteArray[0] = 0x0e;//0x48;//0x4a;//0x0e;
IICWrite(TUNER_IF, 0x02, 1);
DelayX10ms(50);
}
void GetBand(WORD PLL)
{
if(PLL<=TV_BAND_VH_LLIMIT)
PLL_Band = VLF_BAND; // 0x01
else if(PLL<= TV_BAND_VU_LLIMIT)
PLL_Band = VHF_BAND; //0x02
else
PLL_Band = UHF_BAND; //0x04
}
void Write_PLL(BYTE band,WORD PLL)
{
BYTE TV_Add;
//DelayX10ms(3000);
TV_Add = (BYTE)(PLL>>8);
IICBuf.ByteArray[0] = (BYTE)PLL;
IICBuf.ByteArray[1] = C_CTRL_BYTE; //0xc6;
IICBuf.ByteArray[2] = band;
IICBuf.ByteArray[3] = 0x98;
IICBuf.ByteArray[4] = 0x60;
IICWrite(SlvTuner, TV_Add, 5);
//DelayX10ms(3000);
}
void ManualSearch(BYTE Key_direction)
{
BYTE i,j;
WORD PB1,PB2;
BYTE AFC;
BIT channel_found=0;
//CloseOSD(); //////////////////OpenOSD_Border();
//ResetOSD();
if(PB < (TV_BAND_VL_LLIMIT-0x80)||PB > (TV_BAND_VU_HLIMIT+0x80))
PB = TV_BAND_VL_LLIMIT;
byM230_DA3 = 0; //靜音
if(Key_direction == PLUS_KEY&&PB<TV_BAND_VU_HLIMIT)
{
gotoxy(Menu_HStart1+2,Menu_VStart3);
PrintChar(_RIGHT, Arrow_Color, 0);
PB+=30;
do{
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Forward_50KHZ(10);
//GetRemoteKey();
GetKey();
if(KeyCode == SUBTRACT_KEY)
{
ManualSearch(KeyCode);
return;
}
HSYNC_Range();
DelayTuner(5);
}
while((NOSign == 1)&&(PB<=TV_BAND_VU_HLIMIT));
if((NOSign == 0)&&(PB<=TV_BAND_VU_HLIMIT))
{
PB-=5;
PB1 = PB;
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Forward_50KHZ(4);
DelayTuner(5);
Tuner_ADC();
PB2 = PB;
}
while(TunerADC!=2&&TunerADC!=3&&(PB2-PB1)<10);
if(TunerADC>=2)
for(j=0;j<5;j++)
{
PB-=3;
for(i=0;1<6;i++)
{
Forward_50KHZ(1);
DelayTuner(5);
AFC=Tuner_AFC();
if(AFC<=3||AFC>=0x0c)
break;
}
if((AFC<=3||AFC>=0x0c)&&VIF_Level())
{
channel_found = 1;
i =EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
i = EAD_TV_START + i*CH_IN_EAD;
EEPROM_Wr_Byte(i, PB>>8);
EEPROM_Wr_Byte(i+1, PB&0xff);
}
}
}
}
while(channel_found==0&&PB<=TV_BAND_VU_HLIMIT);
}
else if(Key_direction == SUBTRACT_KEY&&PB>TV_BAND_VL_LLIMIT)
{
gotoxy(Menu_HStart1+2,Menu_VStart3);
PrintChar(_LEFT, Arrow_Color, 0);
PB-=30;
do{
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Back_50KHZ(10);
//GetRemoteKey();
GetKey();
if(KeyCode == PLUS_KEY)
{
ManualSearch(KeyCode);
return;
}
HSYNC_Range();
DelayTuner(5);
}
while((NOSign == 1)&&(PB>=TV_BAND_VL_LLIMIT));
if((NOSign == 0)&&(PB>=TV_BAND_VL_LLIMIT))
{
PB+=5;
PB1 = PB;
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Back_50KHZ(3);
DelayTuner(5);
Tuner_ADC();
PB2 = PB;
}
while(TunerADC!=2&&TunerADC!=3&&(PB1-PB2)<10);
if(TunerADC>=2)
for(j=0;j<5;j++)
{
PB+=4;
for(i=0;1<6;i++)
{
Back_50KHZ(1);
DelayTuner(5);
AFC=Tuner_AFC();
if(AFC<=3||AFC>=0x0c)
break;
}
if((AFC<=2||AFC>=0x0d)&&VIF_Level())
{
channel_found = 1;
i =EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
i = EAD_TV_START + i*CH_IN_EAD;
EEPROM_Wr_Byte(i, PB>>8);
EEPROM_Wr_Byte(i+1, PB&0xff);
}
}
}
}
while(channel_found==0&&PB>=TV_BAND_VL_LLIMIT);
/*{
//PB-=30;
do{
do{
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Back_50KHZ(10);
//GetRemoteKey();
GetKey();
if(KeyCode == PLUS_KEY)
{
ManualSearch(KeyCode);
return;
}
HSYNC_Range();
DelayTuner(5);
}
while((NOSign == 1)&&(PB>=TV_BAND_VL_LLIMIT));
PB+=5;
PB1 = PB;
do{
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
Back_50KHZ(4);
DelayTuner(5);
Tuner_ADC();
PB2 = PB;
}
while(TunerADC!=2&&TunerADC!=3&&((PB1-PB2)<10));
if(TunerADC>=2)
for(j=0;j<5;j++)
{
PB+=3;
for(i=0;i<6;i++)
{
Back_50KHZ(1);
DelayTuner(5);
AFC=Tuner_AFC();
if(AFC<=3||AFC>=0x0c)
break;
}
if((AFC<=3||AFC>=0x0c)&&VIF_Level())
{
channel_found = 1;
i = EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
i = EAD_TV_START + i*CH_IN_EAD;
EEPROM_Wr_Byte(i+1, PB>>8);
EEPROM_Wr_Byte(i+2, PB&0xff);
}
}
}
while(channel_found==0&&PB>=TV_BAND_VU_LLIMIT);*/
}
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
if(channel_found)
Get_CH(EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT));
else
{
GetBand(TV_BAND_VL_LLIMIT);
Write_PLL(PLL_Band, TV_BAND_VL_LLIMIT);
PB = TV_BAND_VL_LLIMIT;
i = EAD_TV_START+CH_IN_EAD*EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
//EEPROM_Wr_Byte(i,TV_CHDEF_STATE);
EEPROM_Wr_Byte(i,PB>>8);
EEPROM_Wr_Byte(i+1,PB&0xff);
}
byM230_DA3 = EEPROM_Rd_Byte(EAD_VOL);
}
void AutoSearch(void)
{
BYTE i,m,AFC,ChannelNUM=0;
WORD PB1,PB2;
KeyCode=NO_KEY;
REM_KeyCode=NO_KEY;
PB = TV_BAND_VL_LLIMIT;
Initial_EEPROM_PLL();
EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT,0);
EEPROM_Wr_Byte(EAD_TV_CHANNEL_SUM,0);
byM230_DA3 = 0; //靜音
//ResetOSD();
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
//PAL_NTSC = 0;
//Print_CH(24, 1, ChannelNUM);
do{
SetWatchDog(4);
Show_Menu();
AFC = 8;
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
//Print_CH(24, 1, ChannelNUM);
Forward_50KHZ(5);
//GetRemoteKey();
GetKey();
if(KeyCode == MENU_KEY||REM_KeyCode == REM_MENU)
{
Get_CH(0);
return;
}
HSYNC_Range();
DelayTuner(5);
}
while(NOSign == 1&&PB<=TV_BAND_VU_HLIMIT);
PB-=4;
PB1 = PB;
do{
SetWatchDog(4);
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
//Print_CH(24, 1, ChannelNUM);
Forward_50KHZ(2);
HSYNC_Range2();
DelayTuner(5);
PB2 = PB;
}
while(NOSign == 1&&(PB2-PB1)<10);
if(NOSign == 0)
for(m=0;m<3;m++)
{
PB-=4;
for(i=0;1<8;i++)
{
Print_PLL(8, VIDEO_BAR_VStart+1, PB);
Show_Menu();
//Print_CH(24, 1, ChannelNUM);
Forward_50KHZ(2);
DelayTuner(5);
AFC = Tuner_AFC();
if(AFC<=6||AFC>=9)
break;
}
if(AFC>=9)
//for(j=1;j<5;j++)
{
PB-=2;
for(i=0;i<6;i++)
{
Forward_50KHZ(1);
DelayTuner(5);
AFC = Tuner_AFC();
if(AFC<=2||AFC>=0x0d)
break;
}
PB+=3;
for(i=0;i<6;i++)
{
Back_50KHZ(1);
DelayTuner(5);
AFC = Tuner_AFC();
if(AFC<=2||AFC>=0x0d)
break;
}
} // >62.5k
else if(AFC<=6)
//for(j=1;j<5;j++)
{
PB+=2;
for(i=0;i<6;i++)
{
Back_50KHZ(1);
DelayTuner(5);
AFC = Tuner_AFC();
if(AFC<=2||AFC>=0x0d)
break;
}
PB-=3;
for(i=0;i<6;i++)
{
Forward_50KHZ(1);
DelayTuner(5);
AFC = Tuner_AFC();
if(AFC<=2||AFC>=0x0d)
break;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -