⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rwtuner.c

📁 我写的stv2248 芯片的驱动程序
💻 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 + -