📄 t108.c
字号:
#include <reg51.h>
#include <intrins.h>
#include "common.h"
#include "T108.h"
#include "OSD_def.h"
#include "OSDPage.h"
sbit CHIP_RESET = P1^2;
unsigned char m_cSource;
unsigned char m_cStandard;
unsigned char m_cOSDFunc;
static unsigned int AutoDetcTime=0;
unsigned char code Init_T103[]={
0x0F,0xE0,
0x11,0x66,
0x16,0xD3,
0x18,0x01,
0x19,0x00,
0x1A,0x87,
0x1C,0xE0,
0x30,0x03,
0x31,0x85,
0x32,0x7C,
0x33,0xBF,
0x34,0x00,
0x3F,0x00,
0x40,0x00,
0x60,0x01,
0x66,0x88,
0x68,0x70,
0x69,0x70,
0x6C,0x70,
0x70,0x30,
0x72,0x60,
0x73,0x2D,
0x81,0x6A,
0x82,0x82,
0x85,0x12,
0x90,0x00,
0x91,0x87,
0x9D,0x10,
0x9E,0x80,
0x9F,0x80,
0xB0,0x3F,
0xB8,0x6C,
0xB9,0x02,
0xBA,0x00,
0xBB,0x01,
0xC1,0xC8,
0xC2,0x12,
0xC7,0x05,
0xCB,0x00,
0xE0,0xB9,
0xE1,0xFC,
0xE2,0x11,
0xE5,0x85,
0xFF, 0x00,
0x20,0x21,
0x21,0x79,
0x22,0x2D,
0x23,0x02,
0x24,0x0C,
0x25,0x4B,
0x26,0x02,
0x27,0x1C,
0x28,0x02,
0x29,0x29,
0x2B,0x00,
0x2C,0x18,
0x2D,0x03,
0x2E,0x00,
0x2F,0x00,
0x30,0x01,
0x31,0xFB,
0x32,0x01,
0x33,0x37,
0x35,0x06,
0x50,0x30,
0x51,0x10,
0x52,0x10,
0x56,0x12,
0xFF, 0x00,
0x01,0x02,
0x02,0x4B,
0x03,0x01,
0x07,0x21,
0x08,0x58,
0x09,0x2C,
0x0A,0x60,
0x0C,0x7A,
0x10,0x27,
0x1B,0x0F,
0x2E,0x9E,
0x2F,0x38,
0x30,0x26,
0x3F,0x00,
0x40,0x10,
0x41,0x3B,
0x80,0x05,
0x82,0x42,
};
void ClosePanel(unsigned char RV, unsigned char GV, unsigned char BV)
{
I2CWriteByte(TW803_P0,0x91, 0x87);
I2CWriteByte(TW803_P0,0xc2, 0x12);
I2CWriteByte(TW803_P0,0x9d, RV);
I2CWriteByte(TW803_P0,0x9e, GV);
I2CWriteByte(TW803_P0,0x9f, BV);
I2CWriteByte(TW803_P0,0xe2, 0x11);
}
void OpenPanel(void)
{
I2CWriteByte(TW803_P0,0x91, 0x07);
I2CWriteByte(TW803_P0,0xc2, 0x00);
I2CWriteByte(TW803_P0,0xe2, 0x11);
}
void SysInterruptEnable(void)
{
ET0 = 1; // Enable Timer0 interrupt
TR0 = 0;
EX1 = 1; // Enable INT1 (IR)
EA = 1; // Enable Interrupt
}
void McuIO_Init(void)
{
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
}
void InitT1xx(void)
{
unsigned char Index,RegCount;
unsigned char curID;
curID = TW803_P0;
RegCount = sizeof(Init_T103)/sizeof(Init_T103[0]);
for(Index=0; Index<RegCount; Index+=2)
{
if(Init_T103[Index]==0xFF)
curID+=0x02;
I2CWriteByte(curID,Init_T103[Index],Init_T103[Index+1]);
}
}
void DetectSignal(void)
{
unsigned char activeTEMP;
if(m_cSource == srCVBS)
{
activeTEMP=I2CReadByte(TW803_P2,0x3a)&0x01;
if(activeTEMP) //no signal
{
ClosePanel(0x10,0x80,0x80); //BLUE
}
else
{
I2CWriteByte(TW803_P2,0x3F,0x00);
twdDelay(100);
if((I2CReadByte(TW803_P2,0x3a)&0x0E)==0x0E)
OpenPanel();
}
}
else
{
OpenPanel();
}
}
void DetectStandard(void)
{
unsigned char regTEMP,stTEMP;
regTEMP = I2CReadByte(TW803_P0, 0x5A);
if((regTEMP>0x00)&&(regTEMP<0x0a)) //ntsc
//if((regTEMP>0x00)&&(regTEMP<0x14)) //ntsc
{
stTEMP = stNTSC;
}
else if((regTEMP>0x32)&&(regTEMP<0x3c)) //pal
//else if((regTEMP>0x32)&&(regTEMP<0x40)) //pal
{
stTEMP = stPAL;
}
if((stTEMP != m_cStandard)&&((stTEMP == stNTSC)||(stTEMP == stPAL)))
{
m_cStandard = stTEMP;
//ModeChange(m_cSource,m_cStandard);
}
}
void main(void)
{
McuIO_Init();
SysInterruptEnable();
CHIP_RESET = 0;
twdDelay(100);
CHIP_RESET = 1;
twdDelay(50);
serial_Init();
InitT1xx();
I2CWriteByte(TW803_P0,0xE3, 0x10);
I2CWriteByte(TW803_P0,0xE6, 0x2C);
I2CWriteByte(TW803_P0,0xe2, 0x11);
// COM_OUT_STRING("T108 Init OK");
OSD1Init();
// COM_OUT_STRING("T108 OSD1 Init OK");
OSD2Init();
// COM_OUT_STRING("T108 OSD2 Init OK");
m_cSource = srCVBS;
m_cStandard = stNTSC;
m_cOSDFunc = osdNOFUNC;
//OpenPanel();
// COM_OUT_STRING("Will Show OSD DEMO Page");
// COM_PAUSE();
DemoPage();
// COM_OUT_STRING("Will Enter while(1)...");
// COM_PAUSE();
while(1)
{
//VKey();
AutoDetcTime++;
if(AutoDetcTime>=0x4ff)
{
AutoDetcTime=0x00;
DetectStandard();
DetectSignal();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -