📄 tvmodule.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 + -