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

📄 vbi_parser.c

📁 terawin的t103 LCD驱动程序
💻 C
字号:
#include "VBI_Parser.h"
#include "reg51.h"
#include "TW803Reg.h"
#include "twowire.h"
#include "OSDDRAW.h"
#include "T803OSD.h"
#ifdef VBI_CC
CC_Content idata cc_char;// kenny 20060315
 
BOOL VBI_Init(void)
{
	cc_char.preByte = 0;
	cc_char.Column = 0;
	cc_char.Row = 1;
	cc_char.Line = 0;
	I2CWriteByte(TW803_P0+4, 0x40, 0x05);
	I2CWriteByte(TW803_P0+4, 0x51, 0x01);
	return 1; 
}

BOOL CC_Parsing(void)
{
	uCHAR iptByte1, iptByte2;

//	iptByte1 = I2CReadByte(TW101+4, 0x61);
//	iptByte2 = I2CReadByte(TW101+4, 0x62);
//	if ( iptByte1 == 0xC2 || iptByte2 == 0xC2)
//		iptByte1 = iptByte2;

	if( !(I2CReadByte(TW803_P0+4, 0x65) & 0x01) ) 
		return FALSE;

	iptByte1 = I2CReadByte(TW803_P0+4, 0x61);
	iptByte2 = I2CReadByte(TW803_P0+4, 0x62);

	if ( iptByte1 == 0x42 || iptByte2 == 0x42)
		iptByte1 = iptByte2;

	if ( iptByte1 & 0x80 )
		iptByte1 -= 0x80;
	
	if ( iptByte2 & 0x80 )
		iptByte2 -= 0x80;	

	if ( iptByte1 >= 0x20 )
	{
		if ( cc_char.preByte == 0 )
		{
			if ( iptByte2 >=0x20 )	// one-byte char, one-byte char
			{
				OSDShowCCData(iptByte1,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
				OSDShowCCData(iptByte2,cc_char.Column+1,cc_char.Row,cc_char.TextAttr); 
				cc_char.Column += 2;
			}
			else // one-byte char, 1st byte of two-byte data
			{				 
				OSDShowCCData(iptByte1,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
				cc_char.Column++;
				cc_char.preByte = iptByte2;
			}
		}
		else
		{
			if ( ( cc_char.preByte == 0x11 && iptByte1 < 0x40 && iptByte1 >= 0x30 ) 
			  || ( cc_char.preByte == 0x19 && iptByte1 < 0x40 && iptByte1 >= 0x30 ) )
			{		
				if ( iptByte2 < 0x20 )
				{
					cc_char.preByte = 0x0F + (iptByte1 - 0x30 + 1 );
					OSDShowCCData(cc_char.preByte,cc_char.Column,cc_char.Row,cc_char.TextAttr); 

					cc_char.Column++;
					cc_char.preByte = iptByte2;
				}
				else
				{
					cc_char.preByte = 0x0F + (iptByte1 - 0x30 + 1 );
					OSDShowCCData(cc_char.preByte,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
					OSDShowCCData(iptByte2,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
					cc_char.Column += 2;
					cc_char.preByte = 0;
				}

			}
			else if ( ( cc_char.preByte == 0x11 && iptByte1 < 0x30 && iptByte1 >= 0x20 ) 
				   || ( cc_char.preByte == 0x19 && iptByte1 < 0x30 && iptByte1 >= 0x20 ) )
			{
				if ( iptByte2 < 0x20 )
				{
					if ( iptByte1 >= 0x20 && iptByte1 < 0x30 )
						cc_char.TextAttr = iptByte1 - 0x20;

					cc_char.preByte = iptByte2;
				}
				else
				{
					OSDShowCCData(iptByte2,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
					cc_char.Column++;
					cc_char.preByte = 0;

				} // end of [if ( iptByte2 < 0x20 )]

			}// end of [else if ( ( cc_char.preByte == 0x11 && iptByte1 < 0x30 && iptByte1 >= 0x20 )...]
			else if ( cc_char.preByte == 0x14 || cc_char.preByte == 0x1C )
			{
				if ( iptByte2 < 0x20 )
				{
					switch ( iptByte1 )
					{
						case 0x20: // pop-on mode
							break;
						case 0x21: //BS
							cc_char.Column--;
							break;
						case 0x22:
							break;
						case 0x23:
							break;
						case 0x24:
							break;
						case 0x25: // 2-rows roll-up mode
							cc_char.Line = 1*FONT_HEIGHT;
							break;
						case 0x26: // 3-rows roll-up mode
							cc_char.Line = 2*FONT_HEIGHT;
							break;
						case 0x27: // 4-rows roll-up mode
							cc_char.Line = 3*FONT_HEIGHT;
							break;
						case 0x28:
							break;
						case 0x29: // paint-on mode
							break;
						case 0x2A:
							break;
						case 0x2B: // text mode
							break;
						case 0x2C:
							cc_char.Line = 12*FONT_HEIGHT;
							cc_char.Column = 0;
							cc_char.Row = 1;
							break;
						case 0x2D: //CR
							if ( cc_char.Line > 0 )
							{
								cc_char.Line -= FONT_HEIGHT;
								OSDCfgWr(CHAR_DLY_2,cc_char.Line);  //v[7:0]	//00
							}

							cc_char.Column = 0;
							cc_char.Row ++;
							break;
						case 0x2E:
							break;
						case 0x2F:
							break;
					}
					cc_char.preByte = iptByte2;

				}
				else
				{
					OSDShowCCData(iptByte2,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
					cc_char.Column++;
					cc_char.preByte = 0;
				}

			}
			else if ( cc_char.preByte == 0x17 || cc_char.preByte == 0x1F )
			{
				if ( iptByte2 < 0x20 )
				{
					switch ( iptByte1 )
					{
						case 0x21:
							cc_char.Column += 1;	//TO1
							break;
						case 0x22:
							cc_char.Column += 2;	//TO2
							break;
						case 0x23:
							cc_char.Column += 3;	//TO3
							break;
					}
				}
				else
				{
					OSDShowCCData(iptByte2,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
					cc_char.Column++;
					cc_char.preByte = 0;
				}

			}
			else if ( cc_char.preByte <= 0x17 && iptByte1 >= 0x40 
				   || cc_char.preByte <= 0x1F && iptByte1 >= 0x60 )
			{
				if ( iptByte1 < 0x60 )
					cc_char.TextAttr = iptByte2 - 0x40 + 1;
				else
					cc_char.TextAttr = iptByte2 - 0x60 + 1;


				if ( cc_char.preByte == 0x11 )
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 1*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 2*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x12)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 3*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 4*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x15)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 5*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 6*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x16)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 7*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 8*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x17)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 9*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 10*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x10)
				{
					if ( cc_char.Line == 0)
						cc_char.Line = 11*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x13)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 12*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 13*FONT_HEIGHT;
				}
				else if ( cc_char.preByte == 0x14)
				{
					if ( iptByte1 < 0x60 && cc_char.Line == 0)
						cc_char.Line = 14*FONT_HEIGHT;
					else if ( iptByte1 >= 0x60 && cc_char.Line == 0)
						cc_char.Line = 15*FONT_HEIGHT;
				}

			}
			else
				return FALSE;

		}

	}
	else
	{
		if ( ( iptByte1 == 0x11 && iptByte2 < 0x40 && iptByte2 >= 0x30 ) 
		  || ( iptByte1 == 0x19 && iptByte2 < 0x40 && iptByte2 >= 0x30 ) )
		{	  
			iptByte1 = 0x0F + (iptByte2 - 0x30 + 1 );
			OSDShowCCData(iptByte1,cc_char.Column,cc_char.Row,cc_char.TextAttr); 
			cc_char.Column++;
		}
		// text attributes
		else if ( ( iptByte1 == 0x11 && iptByte2 < 0x30 && iptByte2 >= 0x20 ) 
			   || ( iptByte1 == 0x19 && iptByte2 < 0x30 && iptByte2 >= 0x20 ) )
		{
			if ( iptByte1 >= 0x20 && iptByte1 < 0x30 )
				cc_char.TextAttr = iptByte1 - 0x20 + 1;

		}
		// Command codes
		else if ( iptByte1 == 0x14 || iptByte1 == 0x1C )
		{
			switch ( iptByte2 )
			{
				case 0x20: // pop-on mode
					break;
				case 0x21: //BS
					cc_char.Column--;
					break;
				case 0x22:
					break;
				case 0x23:
					break;
				case 0x24:
					break;
				case 0x25: // 2-rows roll-up mode
					cc_char.Line = 1*FONT_HEIGHT;
					break;
				case 0x26: // 3-rows roll-up mode
					cc_char.Line = 2*FONT_HEIGHT;
					break;
				case 0x27: // 4-rows roll-up mode
//					cc_char.Line = 12*FONT_HEIGHT;
//					OSDCfgWr(CHAR_DLY_2,cc_char.Line);
					break;
				case 0x28:
					break;
				case 0x29: // paint-on mode
					break;
				case 0x2A:
					break;
				case 0x2B: // text mode
					break;
				case 0x2C:
					cc_char.Line = 12*FONT_HEIGHT;

					cc_char.Column = 0;
					cc_char.Row = 1;
					break;
				case 0x2D: //CR
					if ( cc_char.Line > 0 )
					{
						cc_char.Line -= FONT_HEIGHT;
						OSDCfgWr(CHAR_DLY_2,cc_char.Line);  //v[7:0]	//00
					}

					cc_char.Column = 0;
					if ( cc_char.Row < OSD_LINE_NUM )
						cc_char.Row ++;

					break;
				case 0x2E:
					break;
				case 0x2F:
					break;
			}
		}// Command codes
		else if ( iptByte1 == 0x17 || iptByte1 == 0x1F )
		{
			switch ( iptByte2 )
			{
				case 0x21:
					cc_char.Column += 1;	//TO1
					break;
				case 0x22:
					cc_char.Column += 2;	//TO2
					break;
				case 0x23:
					cc_char.Column += 3;	//TO3
					break;
			 }
		}

		// PAC
		else if ( iptByte1 <= 0x17 && iptByte2 >= 0x40 
			   || iptByte1 <= 0x1F && iptByte2 >= 0x60 )
		{
			if ( iptByte2 < 0x60 )
				cc_char.TextAttr = iptByte2 - 0x40 + 1;
			else
				cc_char.TextAttr = iptByte2 - 0x60 + 1;


			if ( iptByte1 == 0x11 )
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 1*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 2*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x12)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 3*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 4*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x15)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 5*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 6*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x16)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 7*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 8*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x17)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 9*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 10*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x10)
			{
				if ( cc_char.Line == 0)
					cc_char.Line = 11*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x13)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 12*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 13*FONT_HEIGHT;
			}
			else if ( iptByte1 == 0x14)
			{
				if ( iptByte2 < 0x60 && cc_char.Line == 0)
					cc_char.Line = 14*FONT_HEIGHT;
				else if ( iptByte2 >= 0x60 && cc_char.Line == 0)
					cc_char.Line = 15*FONT_HEIGHT;
			}
		}
		else
			return FALSE;

		cc_char.preByte = 0;


	}

}
#endif

⌨️ 快捷键说明

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