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

📄 tvmodule.c

📁 金星车载TV PAL制频头UV7305BDI控制源代码
💻 C
字号:
#include <REG52.H>
#include <Function.H>
#include <constant.h>
#include <Extern.h>

//TV高频头的中频部分设置(制式设置)
//MidFreqIC_Addr: 中频IC的IIC地址,如TDA9885T的是0xC0或0xC2
//wdata:写入中频的数据,其中wdata[0]是
//if success return 0,else return 1;
bit SetTV_Module(unsigned char MidFreqIC_Addr,unsigned char *wdata,unsigned char num)
{
	unsigned char i;
	bit errorflag=0;
	i=ERRORCOUNT;

	while(--i)
	{
		IICStart();
		IICSendByte(MidFreqIC_Addr);
		if(IICRecAck())
			continue;
		while(num--)
		{
			IICSendByte(*wdata++);
			if(!IICRecAck())
				continue;
			errorflag=1;
			break;
		}
		if(!errorflag)
			break;
	}
	IICStop();
	Delay(255);
	Delay(255);
	Delay(255);
	Delay(255);
	if(i==0)
		errorflag=1;
	return(errorflag);
}

//modeflag= {TV_PAL_DK ,TV_PAL_I,TV_PAL_BG,TV_SECAM_L,TV_SECAM_L1)
//
//

bit SetMode_JS6B2121(unsigned char modeflag)
{
   switch(modeflag)
   {
      case TV_PAL_DK :
           buf_eeprom[0]=JS121_PAL_DK[0];
           buf_eeprom[1]=JS121_PAL_DK[1];
           buf_eeprom[2]=JS121_PAL_DK[2];
           buf_eeprom[3]=JS121_PAL_DK[3];
           if(!SetTV_Module(JS6B2121M_WRITE,buf_eeprom,4))
           {
               TV_mode=modeflag;
               return(0);
           }
           break;
      case TV_PAL_I :
           buf_eeprom[0]=JS121_PAL_I[0];
           buf_eeprom[1]=JS121_PAL_I[1];
           buf_eeprom[2]=JS121_PAL_I[2];
           buf_eeprom[3]=JS121_PAL_I[3];
           if(!SetTV_Module(JS6B2121M_WRITE,buf_eeprom,4))
           {
               TV_mode=modeflag;
               return(0);
           }
           break;
      case TV_PAL_BG :
           buf_eeprom[0]=JS121_PAL_BG[0];
           buf_eeprom[1]=JS121_PAL_BG[1];
           buf_eeprom[2]=JS121_PAL_BG[2];
           buf_eeprom[3]=JS121_PAL_BG[3];
           if(!SetTV_Module(JS6B2121M_WRITE,buf_eeprom,4))
           {
               TV_mode=modeflag;
               return(0);
           }
           break;
      case TV_SECAM_L :
           buf_eeprom[0]=JS121_SECAM_L[0];
           buf_eeprom[1]=JS121_SECAM_L[1];
           buf_eeprom[2]=JS121_SECAM_L[2];
           buf_eeprom[3]=JS121_SECAM_L[3];
           if(!SetTV_Module(JS6B2121M_WRITE,buf_eeprom,4))
           {
               TV_mode=modeflag;
               return(0);
           }
           break;
      case TV_SECAM_L1 :
           buf_eeprom[0]=JS121_SECAM_L1[0];
           buf_eeprom[1]=JS121_SECAM_L1[1];
           buf_eeprom[2]=JS121_SECAM_L1[2];
           buf_eeprom[3]=JS121_SECAM_L1[3];
           if(!SetTV_Module(JS6B2121M_WRITE,buf_eeprom,4))
           {
               TV_mode=modeflag;
               return(0);
           }
           break;
      default:break;
   }
   return(1);
}



//要求一表示TV制式的全局变量:TV_mode
bit AdjustTV_JS6B2121(unsigned int nVal)
{

 switch(TV_mode)
 {
  case TV_PAL_DK:
       if(nVal<0x1004)
            buf_eeprom[3]=0x01;        //VL
       else if(nVal<0x27C4)
            buf_eeprom[3]=0x02;   //VH
       else if(nVal<0x4680)
            buf_eeprom[3]=0x04;   //UHF
       else return(1);
       break;
  case TV_PAL_I:
       if(nVal<0x0E72)buf_eeprom[3]=0x01;         //VL
       else if(nVal<0x27C2)buf_eeprom[3]=0x02;    //VH
       else if(nVal<=0x4662)buf_eeprom[3]=0x04;   //UHF
       else return(1);
       break;
  case TV_PAL_BG:
       break;
  case TV_SECAM_L:
       if(nVal<0x07FF)                          //VL1  L'
       {
          SetMode_JS6B2121(TV_SECAM_L1);
          buf_eeprom[3]=0x01;
       }
       else if(nVal<0x0F10)buf_eeprom[3]=0x01;    //VL2
       else if(nVal<=0x2AA8)buf_eeprom[3]=0x02;   //UHF
       else if(nVal<=0x46DC)buf_eeprom[3]=0x04;   //UHF
       else return(1);
       break;
  case TV_SECAM_L1:
       if(nVal<0x07FF)                          //VL1  L'
           buf_eeprom[3]=0x01;
       else if(nVal<0x0F10)
       {
          SetMode_JS6B2121(TV_SECAM_L);
          buf_eeprom[3]=0x01;
       }
       else if(nVal<=0x2AA8)
       {
          SetMode_JS6B2121(TV_SECAM_L);
          buf_eeprom[3]=0x02;
       }
       else if(nVal<=0x46DC)
       {
          SetMode_JS6B2121(TV_SECAM_L);
          buf_eeprom[3]=0x04;
       }
       else return(1);
       break;
  default:
       break;
 }
 buf_eeprom[0]=(unsigned char)(nVal>>8);
 buf_eeprom[1]=(unsigned char)(nVal&0x00FF);
 buf_eeprom[2]=0xC8;
 buf_eeprom[4]=0xD8;
 buf_eeprom[5]=0x60;
 return(SetTV_Module(JS6B2121H_WRITE,buf_eeprom,6));
}






//raddr: TALN-M200T read first address
//rdata: data buffer
//num:   valid data num
bit ReadTV_JS6B2121(unsigned char *rdata)
{
	unsigned char i;
	bit errorflag=1;
	i=ERRORCOUNT;
	while(i--)
	{
		IICStart();
		IICSendByte(JS6B2121M_READ);
		if(IICRecAck())
			continue;
		*rdata=IICReceiveByte();        //read last byte data
		IICNoAck();
		IICStop();
		errorflag=0;
		break;
	}
	return(errorflag);
}

//raddr: TALN-M200T read first address
//rdata: data buffer
//num:   valid data num
bit ReadTV_JS6B2121H(unsigned char *rdata)
{
	unsigned char i;
	bit errorflag=1;
	i=ERRORCOUNT;
	while(i--)
	{
		IICStart();
		IICSendByte(JS6B2121H_READ);
		if(IICRecAck())
			continue;
		*rdata=IICReceiveByte();        //read last byte data
		IICNoAck();
		IICStop();
		errorflag=0;
		break;
	}
	return(errorflag);
}


/*
#define TDA9885_WRITE	0x86
#define TDA9885_READ	0x87

bit SetTVPal(unsigned char addr,unsigned char num, unsigned char *wdata)
{
	unsigned char i;
	bit errorflag=0;
	i=ERRORCOUNT;
	while(i--)
	{
		IICStart();
		IICSendByte(TDA9885_WRITE);
		if(IICRecAck())
			continue;
		IICSendByte(addr);
		if(IICRecAck())
			continue;
		while(num--)
		{
			IICSendByte(*wdata++);
			if(!IICRecAck())
				continue;
			errorflag=1;
			break;
		}
		if(!errorflag)
			break;
	}
	IICStop();
	Delay(255);
	Delay(255);
	Delay(255);
	Delay(255);
	if(i==0)
		errorflag=1;
	return(errorflag);
}



bit ReadTVPal(unsigned char *rdata,unsigned char num)
{
	unsigned char i;
	bit errorflag=1;
	i=ERRORCOUNT;
	while(i--)
	{
		IICStart();
		IICSendByte(TDA9885_WRITE);
		if(IICRecAck())
			continue;
		IICSendByte(00);
		if(IICRecAck())
			continue;
		IICStart();
		IICSendByte(TDA9885_READ);
		if(IICRecAck())
			continue;
		while(--num)
		{
			*rdata++=IICReceiveByte();
			IICACK();
		}
		*rdata=IICReceiveByte();        //read last byte data
		IICNoAck();
		IICStop();
		errorflag=0;
		break;
	}
	return(errorflag);
}

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -