📄 t100_old.c
字号:
#include "REG51.H"
#include <intrins.h>
#include "Remote.h"
#define OSD_EN
typedef unsigned char uCHAR;
//#include "T100Data_A.h"
//#include "T100Data_PA.h"
#include "T100Data_AU.h"
//#include "T100Data_LG.h"
//#include "T100Data_FOX.h"
#ifdef OSD_EN
#include "OSDFont1218_shinco.h"
#include "OSD1218_shinco.h"
#endif
sbit T100_RESET = P1^4;
sbit SCL = P1^6;
sbit SDA = P1^7;
sbit BL_EN = P0^7;
#if 1
#define kyKEY_MSK 0x81
#define KEYPORT P0
#define kyMENU 0x08
#define kyDEC 0x04
#define kyINC 0x02
#define kySOURCE 0x10
#define kyUD_LR 0x20
#define kyFULL_43 0x40
#else
#define kyKEY_MSK 0xc0
#define KEYPORT P2
#define kyMENU 0x02
#define kyDEC 0x08
#define kyINC 0x04
#define kySOURCE 0x10
#define kyUD_LR 0x20
#define kyFULL_43 0x01//0x40
#endif
/*sbit kyMENU = P0^1;
sbit kyDEC = P0^2;
sbit kyINC = P0^3;
sbit kySOURCE = P0^4;
sbit kyUD_LR = P0^5;
sbit kyFULL_43 = P0^6;//*/
bit bNTSC_PAL = 0; //0:PAL 1:NTSC
bit bFULL_43 = 1; //0:4:3 1:FULL
bit bUP_DOWN = 1; //0:Down to Up 1:Up to Down
bit bLEFT_RIGHT = 1; //0:Right to Left 1:Left to Right
uCHAR cSource = 3; //2-4:CVBS2-4 5:S-Video 6:ITU656
uCHAR cStandard = 0xff; //0:PAL 4:NTSC
uCHAR cKey_Curr,cKey_Pre;
void Initial(void);
void Delay_ms(uCHAR);
void InitT100(void);
void ClosePanel(void);
void OpenPanel(void);
void DetectNTSC_PAL(void);
void SetSource(void);
void SetMode(void);
void SetUD_LR(void);
void I2CWriteTbl(char*);
uCHAR I2CReadByte(uCHAR, uCHAR);
uCHAR I2CWriteByte(uCHAR,uCHAR,uCHAR);
void kyKeypad(void);
#ifdef OSD_EN
void InitOSD(void);
void OSDDisable(void);
void OSDEnable(void);
void OSDCtrl(char cDir);
uCHAR cLanguage=0; //0:English 1:French 2:German 3:Spanish 4:Japenese 5:Russian
uCHAR cOSDFunc=0; //0:OSD Off 1:Bright 2:Color 3:Screen
uCHAR cBright,cColor;
#endif
void main(void)
{
// Initial();
while(1)
{
kyKeypad();
DetectNTSC_PAL();
// OSDEnable();
}//while
}//main
void Initial(void)
{
//Initial 8051
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
//8051Register Set
IE = 0; // disable all interrupt
TMOD = 0x11; // Timer1 Mode 1, Timer0 Mode 1;
//TMOD = 0x01; // Timer0 Mode 1;
EX0 = 0; // disable external interrupt 0, IE[0]
EX1 = 0;
//ET0 = 1; // enable bTimer 0
//IT0 = 1; // falling endge generate interrupt, TCON[0]
INT0 = 1;
IT1 = 1; // falling endge generate interrupt, TCON[0]
INT1 = 1;
//Initial T100
T100_RESET = 0 ;
Delay_ms(50);
T100_RESET = 1 ;
Delay_ms(20);
InitT100();
// SetUD_LR();
#ifdef OSD_EN
InitOSD();
#endif
}//Initial
void Delay_ms(uCHAR cTime)
{
uCHAR i,j;
for(i=0;i<cTime;i++)
{
for(j=0;j<250;j++)_nop_();
for(j=0;j<250;j++)_nop_();
for(j=0;j<250;j++)_nop_();
for(j=0;j<250;j++)_nop_();
}//For
}//Delay
void InitT100(void)
{
#if 1
I2CWriteTbl(TCONData);
ClosePanel();
I2CWriteTbl(T100Init);
I2CWriteTbl(GAMMAData);
I2CWriteTbl(FilterData);
SetMode();
SetSource();
SetUD_LR();
#else
uCHAR cTemp1,cAddr;
for(cTemp1=0;cTemp1<PAGE2_E;cTemp1++)
{
if(cTemp1<PAGE1_S)cAddr=0x50;
else if(cTemp1<PAGE2_S)cAddr=0x52;
else cAddr=0x54;
I2CWriteByte(cAddr,RegisterMap[cTemp1],T100CVBS[cTemp1]);
}
#endif
// OpenPanel();
}//InitT100
void ClosePanel(void)
{
BL_EN=1;
I2CWriteByte(TW100, 0xC2, I2CReadByte(TW100, 0xC2)|0x12);
I2CWriteByte(TW100, 0x91, 0x87);//I2CReadByte(TW101, PATTERN_CTRL)|0x80); //Enable Frame Background Color
}
void OpenPanel(void)
{
I2CWriteByte(TW100, 0xC2, I2CReadByte(TW100, 0xC2)&0xED);
I2CWriteByte(TW100, 0x91, I2CReadByte(TW100, 0x91)&~0x80); //Enable Frame Background Color
Delay_ms(10);
BL_EN=0;
}
void DetectNTSC_PAL(void)
{
static int wBuff=0x000;
uCHAR cBuff[2];
wBuff+=1;
if(wBuff==0x01)
{
wBuff=0x00;
for(cBuff[1]=0;cBuff[1]<1;cBuff[1]++)
{
cBuff[0] = I2CReadByte(TW100, 0x5A)&0xe0;
if(cBuff[0]==cStandard)break;
}
#ifdef ESS
if((bNTSC_PAL)&&(cSource==6))
{
cBuff[1] = I2CReadByte(TW100, 0x82);
if(cBuff[1]>0x90)I2CWriteByte(TW100+2, 0xd3,0x06);
else if(cBuff[1]<0x78)I2CWriteByte(TW100+2, 0xd3,0x04);
}
if((!bNTSC_PAL)&&(cSource==6))
{
cBuff[1] = I2CReadByte(TW100, 0x82);
if(cBuff[1]>0xb0)I2CWriteByte(TW100+2, 0xd3,0x0b);
else if(cBuff[1]<0x78)I2CWriteByte(TW100+2, 0xd3,0x04);
}
#endif
if(cBuff[0]!=cStandard)
{
cStandard=cBuff[0];
if(cStandard)bNTSC_PAL = 0;
else bNTSC_PAL = 1;
ClosePanel();
T100_RESET = 0 ;
Delay_ms(30);
T100_RESET = 1 ;
Delay_ms(5);
ClosePanel();
// InitT100();
I2CWriteTbl(T100Init);
I2CWriteTbl(TCONData);
I2CWriteTbl(GAMMAData);
I2CWriteTbl(FilterData);
SetMode();
SetSource();
SetUD_LR();
// SetMode();
OpenPanel();
}
}
}
void SetSource(void)
{
switch(cSource)
{
case 2: I2CWriteTbl(CVBS2Data);
break;
case 3: I2CWriteTbl(CVBS3Data);
break;
case 4: I2CWriteTbl(CVBS4Data);
break;
case 5: I2CWriteTbl(SVIDEOData);
break;
case 6: I2CWriteTbl(ITU656Data);
}
}
void SetMode(void)//N/P,Full/4:3
{
if(bNTSC_PAL)//NTSC&&FULL
{
I2CWriteTbl(NTSC_FULLData);
if((!bFULL_43))//NTSC&&4:3
I2CWriteTbl(NTSC_43Data);
if(cSource!=5)I2CWriteByte(TW100+4,0x00,0x00);
}
else//PAL&&FULL
{
I2CWriteTbl(PAL_FULLData);
if((!bFULL_43))//PAL&&4:3
I2CWriteTbl(PAL_43Data);
if(cSource!=5)I2CWriteByte(TW100+4,0x00,0x36);
}
if(cSource==5)I2CWriteByte(TW100+4,0x0f,0x01);
}
void SetUD_LR(void)
{
uCHAR cTemp;
if(bUP_DOWN&bLEFT_RIGHT)
{
cTemp=UD_LR;
}
else if(bUP_DOWN&!bLEFT_RIGHT)
{
cTemp=UD_RL;
}
else if(!bUP_DOWN&bLEFT_RIGHT)
{
cTemp=DU_LR;
}
else if(!bUP_DOWN&!bLEFT_RIGHT)
{
cTemp=DU_RL;
}
I2CWriteByte(TW100,0xe1,cTemp);
}
#define Set_SDA_High SDA = 1,SDA = 1
#define Set_SDA_Low SDA = 0,SDA = 0
#define Set_SCL_High SCL = 1,SCL = 1
#define Set_SCL_Low SCL = 0,SCL = 0
#define SDA_High SDA!=0
#define SDA_Low SDA==0
#define SCL_High SCL!=0
#define SCL_Low SCL==0
#define TWD_SPEED 0x01 //value: 1 (Fastest), 2 (slower), ... N (much slower)
#define TWD_LONG_TIME (TWD_SPEED*8)
#define TWD_SHORT_TIME (TWD_SPEED*1)
void StartCondition(void)
{
uCHAR ix;
uCHAR cTWtrytime=0;
EA=0;
while(++cTWtrytime)
{
Set_SDA_High;
Set_SCL_High; /* make sure two line is release */
for(ix = 0; ix < TWD_LONG_TIME; ix++)
{ }; /* Delay 12us */
Set_SDA_Low;
for(ix = 0; ix < TWD_LONG_TIME; ix++)
{ }; /* Delay 12us */
if((SCL_High)&&(SDA_Low))
break;
}
for(ix = 0; ix < TWD_SHORT_TIME; ix++)
{ }; /* Delay 12us */
}
//----------------------------------------
// P_Condition for TWD protocol
//----------------------------------------
void StopCondition(void)
{
uCHAR ix;
uCHAR cTWtrytime=0;
Set_SDA_Low;
Set_SCL_High;
for(ix = 0; ix < TWD_SHORT_TIME; ix++)
{ }; /* delay 12us */
while(SCL_Low && ++cTWtrytime)
{ };
for(ix = 0; ix < TWD_SHORT_TIME; ix++)
{ }; /* delay 12us */
Set_SDA_High;
for(ix = 0; ix < TWD_SHORT_TIME; ix++)
{ }; /* delay 12us */
EA=1;
}
//--------------------------------------------------
// Send_Byte
// Send a byte to master with a acknowledge bit
//--------------------------------------------------
uCHAR Send_Byte(uCHAR cData)
{
uCHAR ix, j, cAcknowledge;
uCHAR cTWtrytime=0;
cAcknowledge = 0;
for(ix = 0; ix < 8; ix++)
{
Set_SCL_Low;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
if(cData&0x80)Set_SDA_High;
else Set_SDA_Low;
cData<<=1;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_High;
while(SCL_Low && ++cTWtrytime)
{ };
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
}
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_Low;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SDA_High; /* release data line for acknowledge */
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_High; /* Send a clock for Acknowledge */
while(SCL_Low)
{ };
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
if(SDA_High) cAcknowledge = 1; /* No Acknowledge */
Set_SCL_Low; /* Finish Acknoledge */
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
return(cAcknowledge);
}
//--------------------------------------------------
// Read_Byte
// Read a byte from master with a acknowledge bit
//--------------------------------------------------
uCHAR Read_Byte(uCHAR cNum)
{
uCHAR ix, j;
uCHAR cRetval=0;
for(ix=0;ix<8;ix++){
Set_SCL_High;
while(SCL_Low){};
for(j=0;j<TWD_SHORT_TIME;j++){};
cRetval = (SDA_High)? (cRetval|(1<<(7-ix))):cRetval ; /* MSB First */
Set_SCL_Low;
}
if(cNum==1)
Set_SDA_High;
else
Set_SDA_Low;
//SDA = (cNum==1) 1:0;
Set_SCL_High;
while(SCL_Low){};
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
Set_SCL_Low;
Set_SDA_High;
for(j = 0; j < TWD_SHORT_TIME; j++)
{ };
return cRetval;
}
uCHAR I2CReadByte(uCHAR cAddr, uCHAR cReg)
{
uCHAR cTemp;
StartCondition();
Send_Byte(cAddr);
Send_Byte(cReg);
StartCondition();
Send_Byte(cAddr|0x01);
cTemp=Read_Byte(1);
StopCondition();
return cTemp;
}
uCHAR I2CWriteByte(uCHAR cAddr,uCHAR cReg,uCHAR cData)
{
StartCondition();
Send_Byte(cAddr);
Send_Byte(cReg);
Send_Byte(cData);
StopCondition();
return 0;
}
void I2CWriteTbl(char *pString)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -