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

📄 teletext.c

📁 此程序为twell8806驱动程序
💻 C
字号:
//=============================================================================
//								Teletext 
//=============================================================================

#include "Config.h"
#include "reg.h"
#include "typedefs.h"
#include "I2C.h"
#include "main.h"
#include "debug.h"
#include "printf.h"
#include "TeleText.h"
#include "RegMap.h"

#ifdef SUPPORT_TELETEXT

static IDATA BYTE	TTToggle = 0x00;		// x0: display on	x1: display off
											// 0x: full mode	1x: FB mode

static       bit	f_TeleTextOn = 0;		// 0:OFF  1:ON


bit IsTeleTextOn(void)
{
	return f_TeleTextOn;
}

//=============================================================================
//   Command
//=============================================================================
#if TELETEXTDEVICE == PHILIPS_TTX

void TeleTextHPol(void)
{
	BYTE Vdata[4];

	Vdata[0] = 0xb3;
	Vdata[1] = 0xc1;
	Vdata[2] = 0xfd;
	Vdata[3] = 0x02;

	WriteI2CnLong(TEXTAddress, Vdata, 4);  
}

void TeleTextVPol(void)
{
	BYTE Vdata[4];

	Vdata[0] = 0xb3;
	Vdata[1] = 0xc1;
	Vdata[2] = 0xfe;
	Vdata[3] = 0x01;

	WriteI2CnLong(TEXTAddress, Vdata, 4);  
}

void TeleTextCancel(void)
{
	BYTE Vdata[1];
	
	TTToggle ^= 0x01;

	if     ( TTToggle & 0x01 ) Vdata[0] = 0x27;
	else if( TTToggle & 0x02 ) Vdata[0] = 0x3e;
	else                       Vdata[0] = 0x3f; 

	WriteI2CnLong(TEXTAddress, Vdata, 1); 

	#ifdef DEBUG_TELETEXT
	dPrintf("\r\nTeletext Cancel: Toggle : %2x",(WORD)TTToggle);
	#endif
}

void TeleTextPos(BYTE Hpos, BYTE Vpos)
{
	BYTE Vdata[4];

	Vdata[0] = 0x48;
	Vdata[1] = 0x08;
	Vdata[2] = Hpos;
	Vdata[3] = Vpos;

	WriteI2CnLong(TEXTAddress, Vdata, 4);  
}

void TeletextMix(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3e;
		
	WriteI2CnLong(TEXTAddress, Vdata, 1); 


}

void TeleTextONOFF(void)
{
	BYTE Vdata[1];

  if( !f_TeleTextOn ) 
  {
    f_TeleTextOn = 1;		

	SEL_MIX = 1;

	WriteDecoder(INFORM,  ReadDecoder(INFORM)  | 0x01 );	// 02: xxxx xxx1 Select RGB1
	WriteDecoder(ACNTL,   ReadDecoder(ACNTL)   & 0xfe );	// 06: xxxx xxx0 normal FB

	WriteDecoder(SCbGAIN, ReadDecoder(SCbGAIN) | 0x80 );	// 3d: 1xxx xxxx RGB H Sharpness On
	WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) & 0x7f );	// 3d: 0xxx xxxx normal DAC H sync
	WriteDecoder(RGBCONTROL, 0x00 );						// 36: 0000 0001 RGB ADC Power On, FB Gain:100%
	WriteDecoder(RGBMISC, 0x05 );							// 39: 0000 0101 Select RGB, FB control
	
	TTToggle ^= 0x02;

	//if( TTToggle & 0x02 ) Vdata[0] = 0x3e;		// mix
  	//else   
			Vdata[0] = 0x3f;
		
	WriteI2CnLong(TEXTAddress, Vdata, 1); 

  }
  else // TTX OFF
  {

	f_TeleTextOn = 0;	
	
	SEL_MIX = 0;

	TTToggle ^= 0x02;

	Vdata[0] = 0x03;
	WriteI2CnLong(TEXTAddress, Vdata, 1);  

	
	switch( GetInputSelection() ) {
	case SCART:
	case COMPOSITE:
	case SVIDEO:
	case TV:
		WriteDecoder(ACNTL,   ReadDecoder(ACNTL)   | 0x01 );	// 06: xxxx xxx1 pdwon FB
		WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 );	// 3d: 1xxx xxxx pdwon DAC H sync
		WriteDecoder(RGBCONTROL, 0xe3 );						// 3f: 0000 0001 main mode
		break;

	case COMPONENT:
		break;
	
	}

  }
	//#ifdef DEBUG_TELETEXT
	Printf("\r\nTeletext ON: Toggle : %2x",(WORD)TTToggle);
	//#endif
}

/*void TeleTextOFF(void)
{
	BYTE Vdata[1];

	f_TeleTextOn = 0;	
	
	SEL_MIX = 0;

	TTToggle ^= 0x02;

	Vdata[0] = 0x03;
	WriteI2Cn(TEXTAddress, Vdata, 1);  

	
	switch( GetInputSelection() ) {
	case COMPOSITE:
	case SVIDEO:
	case TV:
		WriteDecoder(ACNTL,   ReadDecoder(ACNTL)   | 0x01 );	// 06: xxxx xxx1 pdwon FB
		WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 );	// 3d: 1xxx xxxx pdwon DAC H sync
		WriteDecoder(RGBCONTROL, 0xe3 );						// 3f: 0000 0001 main mode
		break;

	case COMPONENT:
		break;
	
	case SCART:
		break;
	}
}
*/	
void TeleTextRed(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x20;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextGreen(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x21;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextYellow(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x22;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextCyan(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3d;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextHold(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x25;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextTime(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x07;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextSize(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3a;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextIndex(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x28;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextMode(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x29;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextPageUp(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3b;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextPageDown(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3c;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
//=============================================================================
//
//=============================================================================
void TeleTextInit(void)
{
	BYTE CODE ReData[8] = { 0x00, 0x26, 0x0f, 0x8f, 0x95, 0x0a, 0x00, 0x00 };
	
	TeleTextHPol();		delay(1);
	TeleTextVPol();		delay(1);
	TeleTextPos(0x05, 0x2a);

	WriteI2CnLong(TEXTAddress, ReData, 8);	
}

void TeleTextNumber(BYTE num)
{
	BYTE buf;
	BYTE Vdata[1];

	buf = ToNumber(num);

	if( buf == 0xff ) return;

	if(buf == 0)
		Vdata[0] = 0x39;
  	else
		Vdata[0] = (buf | 0x30) - 0x01;

	WriteI2CnLong(TEXTAddress, Vdata, 1);  
}


#else // ET_TTX

void TeleTextCancel(void)
{
	BYTE Vdata[1];
	
/*	TTToggle ^= 0x01;

	if     ( TTToggle & 0x01 ) Vdata[0] = 0x27;
	else if( TTToggle & 0x02 ) Vdata[0] = 0x3e;
	else                       Vdata[0] = 0x3f; 
*/
	Vdata[0] = 0x10; 
	WriteI2CnLong(TEXTAddress, Vdata, 1); 

	#ifdef DEBUG_TELETEXT
	dPrintf("\r\nTeletext Cancel: Toggle : %2x",(WORD)TTToggle);
	#endif
}

void TeletextMix(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x73;
		
	WriteI2CnLong(TEXTAddress, Vdata, 1); 


}

void TeleTextONOFF(void)
{
	BYTE Vdata[1];

  if( !f_TeleTextOn ) 
  {
    f_TeleTextOn = 1;		

	SEL_MIX = 1;
//
	WriteDecoder(INFORM,  ReadDecoder(INFORM)  | 0x01 );	// 02: xxxx xxx1 Select RGB1
	WriteDecoder(ACNTL,   ReadDecoder(ACNTL)   & 0xfe );	// 06: xxxx xxx0 normal FB

	WriteDecoder(SCbGAIN, ReadDecoder(SCbGAIN) | 0x80 );	// 3d: 1xxx xxxx RGB H Sharpness On
	WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) & 0x7f );	// 3d: 0xxx xxxx normal DAC H sync
	WriteDecoder(RGBCONTROL, 0x00 );						// 36: 0000 0001 RGB ADC Power On, FB Gain:100%
	WriteDecoder(RGBMISC, 0x05 );							// 39: 0000 0101 Select RGB, FB control
//	
	TTToggle ^= 0x02;

	//if( TTToggle & 0x02 ) Vdata[0] = 0x3e;		// mix
  	//else   
	Vdata[0] = 0x71;
		
	WriteI2CnLong(TEXTAddress, Vdata, 1); 

  }
  else // TTX OFF
  {

	f_TeleTextOn = 0;	
	
	SEL_MIX = 0;

	TTToggle ^= 0x02;

	Vdata[0] = 0x70;
	WriteI2CnLong(TEXTAddress, Vdata, 1);  

	
	switch( GetInputSelection() ) {
	case SCART:
	case COMPOSITE:
	case SVIDEO:
	case TV:
		WriteDecoder(ACNTL,   ReadDecoder(ACNTL)   | 0x01 );	// 06: xxxx xxx1 pdwon FB
		WriteDecoder(SCrGAIN, ReadDecoder(SCrGAIN) | 0x80 );	// 3d: 1xxx xxxx pdwon DAC H sync
		WriteDecoder(RGBCONTROL, 0xe3 );						// 3f: 0000 0001 main mode
		break;

	case COMPONENT:
		break;
	
	}

  }
	#ifdef DEBUG_TELETEXT
	Printf("\r\nTeletext ON: Toggle : %2x",(WORD)TTToggle);
	#endif
}

void TeleTextRed(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x38;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextGreen(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x39;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextYellow(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3a;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextCyan(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3b;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextHold(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x1a;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

/*void TeleTextTime(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x07; // ???
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextSize(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x13;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextIndex(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x3c;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
/*
void TeleTextMode(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x29;	// ???
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
*/
void TeleTextPageUp(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x16;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}

void TeleTextPageDown(void)
{
	BYTE Vdata[1];

	Vdata[0] = 0x15;
	WriteI2CnLong(TEXTAddress, Vdata, 1);
}
//=============================================================================
//
//=============================================================================
void TeleTextInit(void)
{

}

void TeleTextNumber(BYTE num)
{
	BYTE buf;
	BYTE Vdata[1];

	buf = ToNumber(num);

	if( buf == 0xff ) return;

	Vdata[0] = buf | 0x20;

	WriteI2CnLong(TEXTAddress, Vdata, 1);  
}

#endif




#endif // SUPPORT_TELETEXT




⌨️ 快捷键说明

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