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

📄 t108.c

📁 厂家提供的OSD芯片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 + -