📄 tft.c
字号:
break;
default:
break;
}
}
/*********************************************************************
Clear font of OSD Function (For VX1818)
Input Factor:
stpos1 => 8 bits , Lower 2 bits is available.
The two bits is the 8-9bits address of
the starting point of the fontcodes.
stpos2 => 8 bits , The 0-7bits address of the starting point
of the fontcodes.
Output Factor:
None
Motion:
1.Clear 16 fonts of OSD from the starting point
*********************************************************************/
void VX1818_OSD_ClearAll(void)
{
BYTE bPos;
BYTE code Temp[] = {20,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b};
// TFT_Driver_Write(OSD_WRITE_DES_INITIAL_ADDR,0x10); // write command memory
// TFT_Driver_Write(OSD_INITIAL_ADDR,bPos); //
for (__bTftTemp1=0;__bTftTemp1<4;__bTftTemp1++)
{
bPos = 0x20 + __bTftTemp1 * 20; // (bTFT_Temp+1) * 0x10;
TFT_Driver_Con_Write(bPos,Temp[0],Temp);
}
// VX1818_OSD_ShowString(bPos, (BYTE *)Temp);
}
/*********************************************************************
Set block initial address in OSD Function (For VX1818)
Input Factor:
block => 8 bits , Choose which block to set
0x02 => Content Block
0x03 => Bottom Block
pos => 8 bits , The block initial address in OSD
Output Factor:
None
Motion:
1.Set the position of OSD Block
*********************************************************************/
void VX1818_OSD_SetAddr(BYTE bBlock,BYTE bPos)
{
switch(bBlock)
{
case 2: // Setup position of Content Block
TFT_Driver_Write(OSD_CONTENT_CMD_START_ADDR,bPos);
break;
case 3: // Setup position of Bottom Block
TFT_Driver_Write(OSD_BOTTOM_CMD_START_ADDR,bPos);
break;
default:
break;
}
}
/*********************************************************************
Set color of OSD's block Function (For VX1818)
Input Factor:
block => 8 bits , Choose which block to set
0x01 => Title Block
0x02 => Content Block
0x03 => Bottom Block
fb => 1 bit , 1 => Foreground color
0 => Background color
h => 1 bit , 1 => Highlight section color
0 => Normal color
color => 8 bits , The lower 4 bits are available.
Output Factor:
None
Motion:
1.Set the color of OSD Block
*********************************************************************/
void VX1818_OSD_SetColor(BYTE bBlock,BYTE bColor)
{
// BYTE bAddr;
switch(bBlock)
{
case 1: // Setup position of Title Block
if (bTFT_Status & TFT_HIGHLIGHT) // Highlight
__bTemp = OSD_TITLE_HL_COLOR;
else // Normal
__bTemp = OSD_TITLE_BG_FG_COLOR;
break;
case 2: // Setup position of Content Block
if (bTFT_Status & TFT_HIGHLIGHT) // Highlight
__bTemp = OSD_CONTENT_HL_BG_FG_COLOR;
else // Normal
__bTemp = OSD_CONTENT_BG_FG_COLOR;
break;
case 3: // Setup position of Bottom Block
if (bTFT_Status & TFT_HIGHLIGHT) // Highlight
__bTemp = OSD_BOTTOM_HL_BG_FG_COLOR;
else // Normal
__bTemp = OSD_BOTTOM_BG_FG_COLOR;
break;
default:
break;
}
__bTftTemp1= TFT_Driver_Read(__bTemp);
if (bTFT_Status & TFT_FOREGROUND) // Foreground
{
__bTftTemp1 &= 0xf0; // Remove lower 4 bits of bTFT_Temp
bColor &= 0x0f; // Remove higher 4 bits of color
__bTftTemp1 |= bColor; // set lower 4 bits of color to lower 4 bits of bTFT_Temp
}
else // Background
{
__bTftTemp1 &= 0x0f; // Remove higher 4 bits of bTFT_Temp
bColor &= 0x0f; // Remove higher 4 bits of color
bColor <<= 4; // Shift color left 4 bits
__bTftTemp1 |= bColor; // set higher 4 bits of color to higher 4 bits of bTFT_Temp
}
TFT_Driver_Write(__bTemp, __bTftTemp1);
}
/*********************************************************************
Set Start and End point of Highlight/Blink Section of OSD Function (For VX1818)
Input Factor:
block => 8 bits , Choose which block to set
0x01 => Title Block
0x02 => Content Block
0x03 => Bottom Block
hb => 1 bit , Switch Highlight/Blink
0 => Highlight
1 => Blink
xstart => 8 bits , The highlight starting of X direction
p.s. Lower 6 bits are available
xend => 8 bits , The highlight ending of X direction
p.s. Lower 6 bits are available
ystart => 8 bits , The highlight starting of Y direction
p.s. Lower 5 bits are available
yend => 8 bits , The highlight ending of Y direction
p.s. Lower 5 bits are available
Output Factor:
None
*********************************************************************/
void VX1818_OSD_SetHighLightBlink(BYTE bBlock,BYTE bBlink,BYTE bXstart,BYTE bXend,BYTE bYstart,BYTE bYend)
{
bXstart &= 0x3f;
bXend &= 0x3f;
bYstart &= 0x1f;
bYend &= 0x1f;
switch(bBlock)
{
case 1: // Setup x size of Title Block
if (bBlink) // Blink section
{
TFT_Driver_Write(OSD_TTTLE_BLINK_START,bXstart); // Start
TFT_Driver_Write(OSD_TTTLE_BLINK_END,bXend); // End
}
else // Highlight section
{
TFT_Driver_Write(OSD_TITLE_HL_START,bXstart); // Start
TFT_Driver_Write(OSD_TITLE_HL_END,bXend); // End
}
break;
case 2: // Setup x and y size of Content Block
if (bBlink) // Blink section
{
TFT_Driver_Write(OSD_CONTENT_BLINK_HOR_START,bXstart); // xStart
TFT_Driver_Write(OSD_CONTENT_BLINK_HOR_STOP,bXend); // xEnd
TFT_Driver_Write(OSD_CONTENT_BLINK_VER_START,bYstart); // yStart
TFT_Driver_Write(OSD_CONTENT_BLINK_VER_STOP,bYend); // yEnd
}
else // Highlight section
{
TFT_Driver_Write(OSD_CONTENT_HL_HOR_START_POS,bXstart); // xStart
TFT_Driver_Write(OSD_CONTENT_HL_HOR_END_POS,bXend); // xEnd
TFT_Driver_Write(OSD_CONTENT_HL_VER_START_POS,bYstart); // yStart
TFT_Driver_Write(OSD_CONTENT_HL_VER_END_POS,bYend); // yEnd
}
break;
case 3: // Setup x size of Bottom Block
if (bBlink) // Blink section
{
TFT_Driver_Write(OSD_BOTTOM_BLINK_START,bXstart); // Start
TFT_Driver_Write(OSD_BOTTOM_BLINK_STOP,bXend); // End
}
else // Highlight section
{
TFT_Driver_Write(OSD_BOTTOM_HL_START,bXstart); // Start
TFT_Driver_Write(OSD_BOTTOM_HL_STOP,bXend); // End
}
break;
default:
break;
}
}
/*********************************************************************
Set OSD blinking rate Function (For VX1818)
Input Factor:
blink => 8 bits , OSD blinking rate
P.S. Lower 6 bits are available
Output Factor:
None
*********************************************************************/
void VX1818_OSD_SetBlink(BYTE bBlink)
{
bBlink &= 0x3f; // Remove redundant bits
TFT_Driver_Write(OSD_BLACK_RATE,bBlink);
}
/*********************************************************************
Set OSD alpha-blending Function (For VX1818)
Input Factor:
alpha => 8 bits , OSD alpha-blending
P.S. Lower 4 bits are available
Output Factor:
None
*********************************************************************/
void VX1818_OSD_SetAlpha(BYTE bAlpha)
{
bAlpha <<= 4;
bAlpha &= 0xf0; // Remove redundant bits
__bTemp = TFT_Driver_Read(OSD_ALPHA_ENABLE);
// shi_sub_read(VX1818,osd2,0x00,&temp9);
__bTemp&= 0x0f;
__bTemp|= bAlpha;
TFT_Driver_Write(OSD_ALPHA_ENABLE,__bTemp);
}
void VX1818_OSD_Initial(void)
{
// 1 draw menu
TFT_Driver_Write(OSD_WRITE_DES_INITIAL_ADDR,0x10); //
VX1818_OSD_ClearAll();
TFT_Driver_Con_Write(0x20, aBright[0], aBright);
TFT_Driver_Con_Write(0x34, aContrast[0], aContrast);
TFT_Driver_Con_Write(0x48, aColor[0], aColor);
TFT_Driver_Con_Write(0x5c, aReset[0], aReset);
/*
VX1818_OSD_ClearAll();
VX1818_OSD_ShowString(0x20, (BYTE *)aBright);
VX1818_OSD_ShowString(0x30, (BYTE *)aContrast);
VX1818_OSD_ShowString(0x40, (BYTE *)aColor);
VX1818_OSD_ShowString(0x50, (BYTE *)aReset);
*/
// 2. set color / highlight
VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x03,0x14,__bTftSetupMode,__bTftSetupMode);
// 3. show the bar
for(__bTftTemp1 =TFT_SETUP_BEGIN;__bTftTemp1 < TFT_SETUP_RESET;__bTftTemp1 ++)
VX1818_OSD_ShowBar(__bTftTemp1);
// enable blocks
// VX1818_OSD_Enable(0x02); //yhtang_0719
}
void VX1818_OSD_ShowBar(BYTE bPara)
{
BYTE i;
BYTE bOsdTemp;
if(bPara == 1) bOsdTemp = __bTftBright;
else if(bPara == 2) bOsdTemp = __bTftContrast;
else if(bPara == 3) bOsdTemp = __bTftColor;
bPara = 0x20 + (bPara -1)* 0x14 + 2;
TFT_Driver_Write(OSD_INITIAL_ADDR,bPara);
TFT_Driver_Write(OSD_WRITE_DATA,0x58);
bPara++;
for (i=0;i<16;i++) //16
{
TFT_Driver_Write(OSD_INITIAL_ADDR,bPara+i);
if(i< bOsdTemp)
TFT_Driver_Write(OSD_WRITE_DATA,0x61);
else
TFT_Driver_Write(OSD_WRITE_DATA,0x59);
}
bPara += 16;
TFT_Driver_Write(OSD_INITIAL_ADDR,bPara);
TFT_Driver_Write(OSD_WRITE_DATA,0x62);
}
void VX1818_OSD_Test(void)
{
BYTE i;
_REG[0] = 18;
_REG[1] = 0x58;
_REG[18] = 0x62;
for(i=2;i<=17;i++)
_REG[i] = 0x61;
// BYTE code bTest[] = {18,0x58,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x62};
TFT_Driver_Con_Write(0x22, _REG[0], _REG);
}
void TFT_OSD_Initial(void)
{
VX1818_OSD_Initial();
}
void TFT_OSD_UpdateMode(void)
{
if(__bTftSetupMode==TFT_SETUP_BEGIN)
{
VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0,0,TFT_SETUP_END,TFT_SETUP_END);
}
else
{
VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0,0,__bTftSetupMode-1,__bTftSetupMode-1);
}
if(__bTftSetupMode <TFT_SETUP_END)
VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x00,0x15,__bTftSetupMode,__bTftSetupMode);
else
VX1818_OSD_SetHighLightBlink(BLOCK_CONTENT,0,0x0,0x05,__bTftSetupMode,__bTftSetupMode);
}
void TFT_OSD_Battery(BYTE bBatt)
{
if(bBatt)
{
TFT_Driver_Write(0X54,aBattery[0]); //OSD TITLE SIZE
TFT_Driver_Write(0X55,0); //OSD TITLE HILIGHT BEGIN POSITION
TFT_Driver_Write(0X56,0); //OSD TITLE HILIGHT STOP POSITION
TFT_Driver_Write(0X57,0); //OSD TITLE BLINK BEGIN POSITION
TFT_Driver_Write(0X58,aBattery[0]); //OSD TITLE BLINK STOP POSITION
TFT_Driver_Write(0X59,0X15); //OSD TITLE X POSITION
TFT_Driver_Write(0X5A,0X07); //OSD TITLE Y POSITION
TFT_Driver_Write(0X5B,0X8C); //OSD TITLE COLOR
TFT_Driver_Write(0X5C,0X8C); //OSD TITLE COLOR
TFT_Driver_Write(0Xfd,0X10); //OSD TITLE COLOR
TFT_Driver_Con_Write(0,aBattery[0],aBattery);
// VX1818_OSD_SetHighLightBlink(BLOCK_TITLE,1,0x0,0x10,0,0);
VX1818_OSD_Enable(0x04);
}
else
{
VX1818_OSD_DisEnable(0x04); // hwtan.portable ??? need testing
}
}
void TFT_OSD_Off(void)
{
VX1818_OSD_DisEnable(0x02); // hwtan.portable ??? need testing
// VX1818_OSD_ClearAll(); //yhtang_0719
}
void TFT_OSD_SHOW_AVIN(void)
{
TFT_Driver_Write(0X54,aAv[0]); //OSD TITLE SIZE
TFT_Driver_Write(0X55,0); //OSD TITLE HILIGHT BEGIN POSITION
TFT_Driver_Write(0X56,aAv[0]); //OSD TITLE HILIGHT STOP POSITION
TFT_Driver_Write(0X57,0); //OSD TITLE BLINK BEGIN POSITION
TFT_Driver_Write(0X58,0); //OSD TITLE BLINK STOP POSITION
TFT_Driver_Write(0X59,0X20); //OSD TITLE X POSITION
TFT_Driver_Write(0X5A,0X07); //OSD TITLE Y POSITION
// TFT_Driver_Write(0X5B,0X8C); //OSD TITLE COLOR
// TFT_Driver_Write(0X5C,0X8C); //OSD TITLE COLOR
bTFT_Status |= TFT_FOREGROUND; bTFT_Status &= ~TFT_HIGHLIGHT;
//VX1818_OSD_SetColor(BLOCK_CONTENT, LIGHTGREEN);
VX1818_OSD_SetColor(BLOCK_TITLE, YELLOW);
bTFT_Status &= ~TFT_FOREGROUND; bTFT_Status &= ~TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_TITLE, TRANSPORT);
bTFT_Status |= TFT_FOREGROUND; bTFT_Status |= TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_TITLE, HOTPINK);
bTFT_Status &= ~TFT_FOREGROUND; bTFT_Status |= TFT_HIGHLIGHT;
VX1818_OSD_SetColor(BLOCK_TITLE, TRANSPORT);
TFT_Driver_Write(0Xfd,0X10); //OSD TITLE COLOR
TFT_Driver_Con_Write(0,aAv[0],aAv);
}
#endif
// ***********************************************************
// Function TFT_Driver_Write
// write config settings into TFT Drvier's register(I2C with subaddress)
// argument: bSunAddr -- the IC's sub_address you want to write to
// vValue -- the value you want to write
// return : none
// note:
// ***********************************************************
void TFT_Driver_Write(BYTE bSubAddr,BYTE bValue)
{
// extern void _I2C_Write();
_REG[0] = bSubAddr;
_REG[1] = bValue;
_I2C_Write(VX1818_ID,(BYTE *)_REG,2);
}
// note, the bcount can not exceed 26
void TFT_Driver_Con_Write(BYTE bSubAddr,BYTE bCount, BYTE* pbValue)
{
BYTE i;
for(i=0;i<bCount;i++) {
TFT_Driver_Write(OSD_INITIAL_ADDR, bSubAddr +i);
TFT_Driver_Write(OSD_WRITE_DATA,pbValue[i+1]);
}
}
// ***********************************************************
// Function TFT_Drive_Read
// Read config settings from TFT Driver IC's register(I2C with subaddress, VX1818 ,eg)
// argument: bAddr -- the IC's sub_address you want to write to
// return : the value read out
// note:
// ***********************************************************
BYTE TFT_Driver_Read(BYTE bAddr)
{
extern BYTE _bHALTemp;
_I2C_Read( VX1818_ID, bAddr, 1, &_bHALTemp);
return _bHALTemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -