📄 rwtuner.c
字号:
//#include"reg78e65.h"
#include<define.h>
//#include<IIC_c51.h>
//#include<rwtuner.h>
//#define uchar unsigned char
//#define BYTE uchar
#define C_CTRL_BYTE 0xc6
#define flg_VHFL 1
#define flg_VHFH 2
#define flg_UHF 8
#define TunerAdd 0xc2
uchar code PAL_DK_table[][3];
//extern uchar xdata IIC_buf[8];
//extern uchar idata cur_ch;
//extern uchar idata fac_TV_Format;
uchar idata fac_TV_Format;
void WritePLL(uchar band, uchar PLL_high, uchar PLL_low); //, bit sw)
void CH_set(uchar cur_ch);
//void STV_set()
bit Cpare_Tur_Fsh(void);
/************************
uchar code *tv_disp3[]={"NTSC ","PAL B/G","PAL I","PAL M ","SEC D/K","AUSTRIA ","MAX_FOMAT "};
**************************/
void WritePLL(uchar band, uchar PLL_high, uchar PLL_low)//, bit sw)
{
//if(sw=1)
//{
IIC_buf[0] = PLL_high;
IIC_buf[1] = PLL_low;
IIC_buf[2] = C_CTRL_BYTE;// #define C_CTRL_BYTE 0xc6
IIC_buf[3] = band;
//}
USendStr(TunerAdd,IIC_buf,4);
}
void CH_set(uchar cur_ch)
{
uchar idata PLL_high,PLL_low,PLL_band;
//uchar Pflg,i=3;
uchar *TunerTBL_Ptr;
fac_TV_Format=1;
switch(fac_TV_Format)
{ case 0:
TunerTBL_Ptr=&USA_table[0][0];
//IIC_buf[1]=0x16;
//IIC_buf[2]=0x30;
//IIC_buf[3]=0x08;
break;
case 1:
case 4:
case 6:
TunerTBL_Ptr=&CCIR_table[0][0];
//IIC_buf[1]=0xd6;
//IIC_buf[2]=0x70;
//IIC_buf[3]=0x09;
break;
case 2:
case 5:
TunerTBL_Ptr=&PAL_DK_table[0][0];
//IIC_buf[1]=0xd6;
//IIC_buf[2]=0x70;
//IIC_buf[3]=0x0b;
break;
case 3: //PAL I 只有ch21-ch69,即CCIR频道表的UHF段
TunerTBL_Ptr=&CCIR_table[0][0];
//cur_ch=20;
//IIC_buf[1]=0xd6;
//IIC_buf[2]=0x70;
//IIC_buf[3]=0x0a;
break;
case 7:
TunerTBL_Ptr=&AUTSTRLIA_table[0][0];
//IIC_buf[1]=0xd6;
//IIC_buf[2]=0x70;
//IIC_buf[3]=0x09;
break;
case 8:
default:
TunerTBL_Ptr=&USA2_table[0][0];
//IIC_buf[1]=0x16;
//IIC_buf[2]=0x30;
//IIC_buf[3]=0x08;
break;
}
PLL_high=*(TunerTBL_Ptr+(cur_ch-1)*3);
TunerTBL_Ptr++;
PLL_low=*(TunerTBL_Ptr+(cur_ch-1)*3);
TunerTBL_Ptr++;
PLL_band=*(TunerTBL_Ptr+(cur_ch-1)*3);
TunerTBL_Ptr++;
WritePLL(PLL_band,PLL_high,PLL_low);//,1);
//if(Pflg) break;
//--
//}while(i>=0);
ISendStr(0xa0,0x01,IIC_buf,4); //保存在24c01的0x01--0x04中
}
/************************
void TV_Scan(void)
{
BYTE PLL_high,PLL_low;
BYTE PLLband;
BYTE *TunerTBL_Ptr;
BYTE ANT_count;
bit ANT_locked;
bit ForceStop;
bit scan_tag;
ForceStop=scan_tag=0;
scaning=1;
cur_ch=2;
cur_prog=1;
Max_prog=1;
ANT_locked=0;
fac_TV_Disp=1;
ANT_X=0;
Stable=0;
OSD_format(NTSC);
BlueScreen(1);
IIC_buf[0]=0;
switch(fac_TV_Format)
{
case 0:
TunerTBL_Ptr=&USA_table[1][0];
//IIC_buf[1]=0x16;
//IIC_buf[2]=0x30;
//IIC_buf[3]=0x08;
break;
case 1:
case 4:
case 6:
TunerTBL_Ptr=&CCIR_table[1][0];
IIC_buf[1]=0xd6;
IIC_buf[2]=0x70;
IIC_buf[3]=0x09;
break;
case 2:
case 5:
TunerTBL_Ptr=&PAL_DK_table[0][0];
cur_ch=1;
IIC_buf[1]=0xd6;
IIC_buf[2]=0x70;
IIC_buf[3]=0x0b;
break;
case 3: //PAL I 只有ch21-ch69,即CCIR频道表的UHF段
TunerTBL_Ptr=&CCIR_table[1][0];
IIC_buf[1]=0xd6;
IIC_buf[2]=0x70;
IIC_buf[3]=0x0a;
break;
case 7:
TunerTBL_Ptr=&AUTSTRLIA_table[0][0];
cur_ch=1;
IIC_buf[1]=0xd6;
IIC_buf[2]=0x70;
IIC_buf[3]=0x09;
break;
case 8:
default:
TunerTBL_Ptr=&USA2_table[1][0];
IIC_buf[1]=0x16;
IIC_buf[2]=0x30;
IIC_buf[3]=0x08;
break;
}
if(fac_TV_Format)
USendStr(0x86,IIC_buf,4);
DelayX2ms(50);
TV_Disp();
while(*TunerTBL_Ptr!=0)
{
if(fac_TV_Disp) Disp_TV_ch();
PLL_high= *TunerTBL_Ptr;
TunerTBL_Ptr++;
PLL_low= *TunerTBL_Ptr;
TunerTBL_Ptr++;
PLLband=*TunerTBL_Ptr;
TunerTBL_Ptr++;
if(PLLband==flg_VHFL) PrintString(3,10,"VHF LOW... ");
else if(PLLband==flg_VHFH) PrintString(3,10,"VHF HIGH...");
else PrintString(3,10,"UHF... ");
PLL_low-=2; //按经验值,下降两步为最佳位置
WritePLL(PLLband,PLL_high,PLL_low,1); //写分频数据
DelayX2ms(15);
if(ANT_locked) ANT_count=1; //如果天线已锁定,则只做一次当前天线的搜索
else ANT_count=4; //天线未锁定,则做4次
scan_cnt=0;
scaning=1;
while(ANT_count)
{
if(!ANT_locked) ANT_X=1;
DelayX2ms(100);
if(scan_cnt>9)
{
//PrintHex(5,1,scan_cnt);
scan_cnt=0;
ANT_locked=1;
ANT_X=0;
IIC_buf[0]=cur_ch;
ISendStr(0xa2,cur_prog,IIC_buf,1);
cur_prog++;
CloseOSD();
DelayX2ms(50);
BlueScreen(0);
DelayX2ms(100);
TV_osd();
DelayX2ms(120);
//CloseOSD();
//TV_Disp();
//OSD_format(NTSC);
scan_tag=1;
break;
}
ANT_X=0;
ANT_count--;
if((remote_key==3)||(button_key==3)) {ForceStop=1;break;}
}
scaning=0;
//OSD_format(NTSC);
BlueScreen(1); ////
if(ForceStop) break;
cur_ch++;
}
Stable=1;
remote_key=0;//0xff;
button_key=0;
if(!scan_tag)
{
Max_prog=1;
IIC_buf[0]=2;
ISendStr(0xa2,1,IIC_buf,1);
}
else if(cur_prog==1)
Max_prog=cur_prog;
else {cur_prog-=1;Max_prog=cur_prog;}
cur_prog=1;
IIC_buf[0]=Max_prog;
IIC_buf[1]=cur_prog;
ISendStr(0xa0,0x04,IIC_buf,2);
DelayX2ms(5);
CH_set(cur_prog,0,1);
scaning=0;
ANT_X=1; //天线脉冲输出脚的复位放在后面的位置,使四路天线CPU有足够时间退出中断
}
/*********************************/
uchar code PAL_DK_table[][3]={
{0x00,0x00,0x00},
{0x05, 0x7C, flg_VHFL}, //ch1
{0x05, 0xFC, flg_VHFL},
{0x06, 0x7C, flg_VHFL},
{0x07, 0x34, flg_VHFL},
{0x07, 0xB4, flg_VHFL},
{0x09, 0x64, flg_VHFL},
{0x09, 0xE4, flg_VHFL},
{0x0A, 0x64, flg_VHFL},
{0x0A, 0xE4, flg_VHFL},
{0x0B, 0x64, flg_VHFL}, //ch10
{0x0B, 0xE4, flg_VHFL}, //ch11
{0x0C, 0x64, flg_VHFH},
{0x0C, 0xE4, flg_VHFH}, //ch13
{0x0D, 0x64, flg_VHFH}, //ch14
{0x0D, 0xE4, flg_VHFH},
{0x0E, 0x64, flg_VHFH},
{0x0E, 0xE4, flg_VHFH},
{0x0F, 0x64, flg_VHFH},
{0x0F, 0xE4, flg_VHFH},
{0x10, 0x64, flg_VHFH}, //ch20
{0x10, 0xE4, flg_VHFH},
{0x11, 0x64, flg_VHFH},
{0x11, 0xE4, flg_VHFH},
{0x12, 0x64, flg_VHFH},
{0x12, 0xE4, flg_VHFH},
{0x13, 0x64, flg_VHFH},
{0x13, 0xE4, flg_VHFH},
{0x14, 0x64, flg_VHFH},
{0x14, 0xE4, flg_VHFH},
{0x15, 0x64, flg_VHFH}, //ch30
{0x15, 0xE4, flg_VHFH},
{0x16, 0x64, flg_VHFH},
{0x16, 0xE4, flg_VHFH},
{0x17, 0x64, flg_VHFH},
{0x17, 0xE4, flg_VHFH},
{0x18, 0x64, flg_VHFH},
{0x18, 0xE4, flg_VHFH},
{0x19, 0x64, flg_VHFH},
{0x19, 0xE4, flg_VHFH},
{0x1A, 0x64, flg_VHFH}, //ch40
{0x1A, 0xE4, flg_VHFH},
{0x1B, 0x64, flg_VHFH},
{0x1B, 0xE4, flg_VHFH},
{0x1C, 0x64, flg_VHFH},
{0x1C, 0xE4, flg_VHFH}, //ch45
{0x1D, 0x64, flg_UHF}, //ch46
{0x1D, 0xE4, flg_UHF},
{0x1E, 0x64, flg_UHF},
{0x1E, 0xE4, flg_UHF},
{0x1F, 0x64, flg_UHF}, //ch50
{0x1F, 0xD4, flg_UHF},
{0x20, 0x54, flg_UHF},
{0x20, 0xD4, flg_UHF},
{0x21, 0x54, flg_UHF},
{0x21, 0xD4, flg_UHF},
{0x22, 0x54, flg_UHF}, //ch56
{0x22, 0xD4, flg_UHF},
{0x23, 0x54, flg_UHF},
{0x23, 0xD4, flg_UHF},
{0x24, 0x54, flg_UHF},
{0x24, 0xD4, flg_UHF},
{0x25, 0x54, flg_UHF},
{0x28, 0x54, flg_UHF},
{0x28, 0xD4, flg_UHF},
{0x29, 0x54, flg_UHF},
{0x29, 0xD4, flg_UHF}, //ch66
{0x2A, 0x54, flg_UHF},
{0x2A, 0xD4, flg_UHF},
{0x2B, 0x54, flg_UHF},
{0x2B, 0xD4, flg_UHF},
{0x2C, 0x54, flg_UHF},
{0x2C, 0xD4, flg_UHF},
{0x2D, 0x54, flg_UHF},
{0x2D, 0xD4, flg_UHF},
{0x2E, 0x54, flg_UHF},
{0x2E, 0xD4, flg_UHF}, //ch76
{0x2F, 0x54, flg_UHF},
{0x2F, 0xD4, flg_UHF},
{0x30, 0x54, flg_UHF},
{0x30, 0xD4, flg_UHF},
{0x31, 0x54, flg_UHF},
{0x31, 0xD4, flg_UHF},
{0x32, 0x54, flg_UHF},
{0x32, 0xD4, flg_UHF},
{0x33, 0x54, flg_UHF},
{0x33, 0xD4, flg_UHF},//ch86
{0x34, 0x54, flg_UHF},
{0x34, 0xD4, flg_UHF},
{0x35, 0x54, flg_UHF},
{0x35, 0xD4, flg_UHF},
{0x36, 0x54, flg_UHF},
{0x36, 0xD4, flg_UHF},
{0x37, 0x54, flg_UHF},
{0x37, 0xD4, flg_UHF},
{0x38, 0x54, flg_UHF}, //ch95
{0x00,0x00,0x00}};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -