📄 tft.c
字号:
_TFT_OSD_Draw_Symbo(0xff);
_TFT_OSD_Draw_Symbo(__bTftSetupMode);
_TFT_OSD_DrawBar(0xff);
#endif
#ifdef TFT_OSD_CONTROLED_BY_VX1818
// update current TFT UI
TFT_OSD_UpdateMode();
#endif
__dwTftCountTime=__dwCountSystem;
bKey=KEY_NO_KEY;
break;
case KEY_TFT_REVERSE:
#ifdef YHTANG_DEBUG
_printf("\n process key_reverse");
#endif
if(__bTftRevise==TFT_REVISE_NORMAL)
{
__bTftRevise=TFT_REVISE_UPDOWN;
#ifndef SERIAL_DEBUG
__sbTftud =1;
__sbTftlr =0;
#else
P5CON|=0x01;//set p5.0
P5CON|=0x04;//set p5.2
P5&=0xfb; //set p5.2 to low//lr
// for(__bTftTemp1=0;__bTftTemp1<50;__bTftTemp1++){}
P5|=0x01; //set p5.0 to high//ud
#endif
I2C_VX1818_Write(0xc0,0xf9);
}
else if(__bTftRevise==TFT_REVISE_UPDOWN)
{
__bTftRevise=TFT_REVISE_NORMAL;
#ifndef SERIAL_DEBUG
__sbTftud =0;
__sbTftlr =1;
#else
P5CON|=0x01;//set p5.0
P5CON|=0x04;//set p5.2
P5|=0x04; //set p5.2 to high//lr
// for(__bTftTemp1=0;__bTftTemp1<50;__bTftTemp1++){}
P5&=0xfe; //set p5.0 to low//ud
#endif
I2C_VX1818_Write(0xc0,0xff);
}
bKey=KEY_NO_KEY;
break;
case KEY_TFT_SIZE:
if(__bTftSize==TFT_TVTYPE_PS)
{
__bTftSize=TFT_TVTYPE_WIDE;
I2C_VX1818_Write(0xc1,0x7a);
}
else if(__bTftSize==TFT_TVTYPE_WIDE)
{
__bTftSize=TFT_TVTYPE_PS;
I2C_VX1818_Write(0xc1,0x79);
}
_TFT_Set_TvMode(__bMPEGVideoMode);
bKey=KEY_NO_KEY;
break;
case KEY_TFT_UP:
case KEY_TFT_DOWN:
if(__bTftSetupMode==TFT_SETUP_NULL)
{
bKey=KEY_INVALID;
}
else
{
switch(__bTftSetupMode)
{
case TFT_SETUP_BRIGHT:
if(bKey==KEY_TFT_UP)
{
if(__bTftBright<TFT_EPROM_MAX_BRIGHT)
__bTftBright++;
}
else if(bKey==KEY_TFT_DOWN)
{
if(__bTftBright>TFT_EPROM_MIN_BRIGHT)
__bTftBright--;
}
I2C_VX1818_Write(0x1E,(64+8*(__bTftBright-TFT_EPROM_MIN_BRIGHT)));
break;
case TFT_SETUP_CONTRAST:
if(bKey==KEY_TFT_UP)
{
if(__bTftContrast<TFT_EPROM_MAX_CONTRAST)
__bTftContrast++;
}
else if(bKey==KEY_TFT_DOWN)
{
if(__bTftContrast>TFT_EPROM_MIN_CONTRAST)
__bTftContrast--;
}
I2C_VX1818_Write(0x1f,(64+8*(__bTftContrast-TFT_EPROM_MIN_BRIGHT)-32));
break;
case TFT_SETUP_COLOR:
if(bKey==KEY_TFT_UP)
{
if(__bTftColor<TFT_EPROM_MAX_COLOR)
__bTftColor++;
}
else if(bKey==KEY_TFT_DOWN)
{
if(__bTftColor>TFT_EPROM_MIN_COLOR)
__bTftColor--;
}
I2C_VX1818_Write(0x20,(64+8*(__bTftColor-TFT_EPROM_MIN_BRIGHT)));
break;
case TFT_SETUP_RESET:
__bTftBright=TFT_EPROM_DEFAULT_BRIGHT;
__bTftContrast=TFT_EPROM_DEFAULT_CONTRAST;
__bTftColor=TFT_EPROM_DEFAULT_COLOR;
I2C_VX1818_Write(0x1E,(64+8*(__bTftBright-TFT_EPROM_MIN_BRIGHT)));
I2C_VX1818_Write(0x1f,(64+8*(__bTftContrast-TFT_EPROM_MIN_BRIGHT)-32));
I2C_VX1818_Write(0x20,(64+8*(__bTftColor-TFT_EPROM_MIN_BRIGHT)));
break;
}
_TFT_EpromData(TFT_WRITE_EPROM);
#ifdef TFT_OSD_CONTROLED_BY_CT908
_TFT_OSD_Draw_Symbo(__bTftSetupMode);
_TFT_OSD_DrawBar(__bTftSetupMode);
#endif
#ifdef TFT_OSD_CONTROLED_BY_VX1818
TFT_Driver_UpdateValue();
#endif
bKey=KEY_NO_KEY;
}
__dwTftCountTime=__dwCountSystem;
break;
default:
break;
}
return bKey;
}
#ifdef TFT_OSD_CONTROLED_BY_CT908
void _TFT_Draw_Background(void)
{
GDI_SetMixRatio(28);
GDI_SetCurrentRegion(0);
GDI_ActivateRegion();
// 1.Draw background frame.
GDI_DRAW_FRAME(TFT_MENU_TOP_H_START,
TFT_MENU_TOP_V_START,
TFT_MENU_BOT_H_END,
TFT_MENU_BOT_V_END,
GDI_ENTRY_4B_COLOR_WHITE,
GDI_ENTRY_4B_COLOR_TEXT_DISABLED,
GDI_ENTRY_4B_COLOR_CENTER,
FRAME_POP_SOLID,
2);
}
void _TFT_OSD_HiLight_Bar(BYTE bMode)
{
//draw the hightlight
GDI_FILL_RECT(TFT_MENU_TOP_H_START+TFT_H_START_GAP,
TFT_MENU_TOP_V_START+(bMode-1)*TFT_BAR_V_GAP+TFT_V_START_GAP,
TFT_MENU_TOP_H_START+TFT_H_START_GAP*3+32*2+TFT_BAR_WIDTH-8,
TFT_MENU_TOP_V_START+(bMode-1)*TFT_BAR_V_GAP+TFT_V_START_GAP+32,
GDI_ENTRY_4B_COLOR_YELLOW);
GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_BLACK);
}
void _TFT_OSD_UnHiLight_Bar(BYTE bMode)
{
//draw the hightlight
GDI_FILL_RECT(TFT_MENU_TOP_H_START+TFT_H_START_GAP,
TFT_MENU_TOP_V_START+(bMode-1)*TFT_BAR_V_GAP+TFT_V_START_GAP,
TFT_MENU_TOP_H_START+TFT_H_START_GAP*3+32*2+TFT_BAR_WIDTH-8,
TFT_MENU_TOP_V_START+(bMode-1)*TFT_BAR_V_GAP+TFT_V_START_GAP+32,
GDI_ENTRY_4B_COLOR_CENTER);
GDI_SetTextColor(TEXT_FG_COLOR, GDI_ENTRY_4B_COLOR_BLACK);
}
void _TFT_OSD_Draw_Symbo(BYTE bMode)
{
if(bMode==0xff)
{
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_CENTER);
GDI_CopyCodeString(aNDBright);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP);
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_CENTER);
GDI_CopyCodeString(aNDContrast);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP+1*TFT_BAR_V_GAP);
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_CENTER);
GDI_CopyCodeString(aNDColor);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP+2*TFT_BAR_V_GAP);
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_CENTER);
GDI_CopyCodeString(aNDReset);
GDI_DRAW_STRING(TFT_RESET_H_POS,TFT_RESET_V_POS);
}
else
{
GDI_SetTextColor(TEXT_SHADOW_COLOR_1, GDI_ENTRY_4B_COLOR_YELLOW);
switch(bMode)
{
case TFT_SETUP_BRIGHT:
GDI_CopyCodeString(aNDBright);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP);
break;
case TFT_SETUP_CONTRAST:
GDI_CopyCodeString(aNDContrast);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP+1*TFT_BAR_V_GAP);
break;
case TFT_SETUP_COLOR:
GDI_CopyCodeString(aNDColor);
GDI_DRAW_STRING(TFT_MENU_TOP_H_START+TFT_H_START_GAP, TFT_MENU_TOP_V_START+TFT_V_START_GAP+2*TFT_BAR_V_GAP);
break;
case TFT_SETUP_RESET:
GDI_CopyCodeString(aNDReset);
GDI_DRAW_STRING(TFT_RESET_H_POS,TFT_RESET_V_POS);
break;
default: break;
}
}
}
void _TFT_OSD_DrawBar(BYTE bValue)
{
// 4. Draw bars
if((bValue==0xff)||(bValue==TFT_SETUP_RESET))
{
for(__bTftTemp1=1;__bTftTemp1<4;__bTftTemp1++)
{
GDI_FILL_RECT(TFT_BAR_START_H_POS,
TFT_BAR_START_V_POS+(__bTftTemp1-1)*TFT_BAR_V_GAP,
TFT_BAR_START_H_POS+TFT_BAR_WIDTH,
TFT_BAR_START_V_POS+(__bTftTemp1-1)*TFT_BAR_V_GAP+TFT_BAR_HEIGHT,
GDI_ENTRY_4B_COLOR_BLACK);
GDI_FILL_RECT(TFT_BAR_START_H_POS+2,
TFT_BAR_START_V_POS+(__bTftTemp1-1)*TFT_BAR_V_GAP+2,
TFT_BAR_START_H_POS+TFT_BAR_WIDTH-2,
TFT_BAR_START_V_POS+(__bTftTemp1-1)*TFT_BAR_V_GAP+TFT_BAR_HEIGHT-2,
GDI_ENTRY_4B_COLOR_GREEN);
switch(__bTftTemp1)
{
case TFT_SETUP_BRIGHT:
__bTftTemp2=__bTftBright;
// if(__bTFTLevel==TFT_MAX_BRIGHT) __bTFTLevel=TFT_TOTAL_LEVELS;
break;
case TFT_SETUP_CONTRAST:
__bTftTemp2=__bTftContrast;
// if(__bTFTLevel==TFT_MAX_CONTRAST) __bTFTLevel=TFT_TOTAL_LEVELS;
break;
case TFT_SETUP_COLOR:
__bTftTemp2=__bTftColor;
// if(__bTFTLevel==TFT_MAX_CONTRAST) __bTFTLevel=TFT_TOTAL_LEVELS;
break;
}
GDI_FILL_RECT(TFT_BAR_START_H_POS+2+__bTftTemp2*TFT_BAR_SLIDE_GAP,
TFT_BAR_START_V_POS+(__bTftTemp1-1)*TFT_BAR_V_GAP+2,
TFT_BAR_START_H_POS+2+__bTftTemp2*TFT_BAR_SLIDE_GAP+TFT_BAR_SLIDE_WIDTH,
TFT_BAR_START_V_POS+TFT_BAR_HEIGHT+(__bTftTemp1-1)*TFT_BAR_V_GAP-2,
GDI_ENTRY_4B_COLOR_WHITE);
}
}
else
{
GDI_FILL_RECT(TFT_BAR_START_H_POS,
TFT_BAR_START_V_POS+(bValue-1)*TFT_BAR_V_GAP,
TFT_BAR_START_H_POS+TFT_BAR_WIDTH,
TFT_BAR_START_V_POS+(bValue-1)*TFT_BAR_V_GAP+TFT_BAR_HEIGHT,
GDI_ENTRY_4B_COLOR_BLACK);
GDI_FILL_RECT(TFT_BAR_START_H_POS+2,
TFT_BAR_START_V_POS+(bValue-1)*TFT_BAR_V_GAP+2,
TFT_BAR_START_H_POS+TFT_BAR_WIDTH-2,
TFT_BAR_START_V_POS+(bValue-1)*TFT_BAR_V_GAP+TFT_BAR_HEIGHT-2,
GDI_ENTRY_4B_COLOR_GREEN);
switch(bValue)
{
case TFT_SETUP_BRIGHT:
__bTftTemp2=__bTftBright;
break;
case TFT_SETUP_CONTRAST:
__bTftTemp2=__bTftContrast;
break;
case TFT_SETUP_COLOR:
__bTftTemp2=__bTftColor;
break;
default: break;
}
GDI_FILL_RECT(TFT_BAR_START_H_POS+2+__bTftTemp2*TFT_BAR_SLIDE_GAP,
TFT_BAR_START_V_POS+(bValue-1)*TFT_BAR_V_GAP+2,
TFT_BAR_START_H_POS+2+__bTftTemp2*TFT_BAR_SLIDE_GAP+TFT_BAR_SLIDE_WIDTH,
TFT_BAR_START_V_POS+TFT_BAR_HEIGHT+(bValue-1)*TFT_BAR_V_GAP-2,
GDI_ENTRY_4B_COLOR_WHITE);
}
}
void _TFT_OSD_Clear(void)
{
GDI_FILL_RECT(TFT_MENU_TOP_H_START,
TFT_MENU_TOP_V_START,
TFT_MENU_BOT_H_END,
TFT_MENU_BOT_V_END,
GDI_ENTRY_4B_COLOR_TRANSPARENT
);
}
#endif
#ifdef TFT_OSD_CONTROLED_BY_VX1818
void TFT_Driver_UpdateValue(void)
{
if(__bTftSetupMode<TFT_SETUP_RESET)
{
VX1818_OSD_ShowBar(__bTftSetupMode);
}
else
{
for(__bTftTemp1=1;__bTftTemp1<TFT_SETUP_RESET;__bTftTemp1++)
VX1818_OSD_ShowBar(__bTftTemp1);
}
}
/*********************************************************************
Turn on/off OSD Function (For VX1818)
Input Factor:
osd_en => 8 bits , Lower 3 bits is available,and higher 5 bits
must be zero.
0 bit => OSD Bottom Block enable or not
1 bit => OSD Content Block enable or not
2 bit => OSD Title Block enable or not
0 => Disable 1 => Enable
Output Factor:
None
Motion:
1.Setup the three block of osd enable or not
*********************************************************************/
void VX1818_OSD_Enable(BYTE bOsdEn)
{
bOsdEn &= 0x07; // Remove redundant bits
__bTftTemp1= TFT_Driver_Read(OSD_ALPHA_ENABLE);
// __bTftTemp1 &= 0xf8;
bOsdEn |= __bTftTemp1;
TFT_Driver_Write(OSD_ALPHA_ENABLE,bOsdEn);
}
void VX1818_OSD_DisEnable(BYTE bOsdEn)
{
__bTftTemp1= TFT_Driver_Read(OSD_ALPHA_ENABLE);
__bTftTemp1 &= ~bOsdEn;
TFT_Driver_Write(OSD_ALPHA_ENABLE,__bTftTemp1);
}
/*********************************************************************
Set position of OSD Function (For VX1818)
Input Factor:
block => 8 bits , Choose which block to set
0x01 => Title Block
0x02 => Content Block
0x03 => Bottom Block
posx => 8 bits , The position of X direction
posy => 8 bits , The position of Y direction
Output Factor:
None
Motion:
1.Set the position of OSD Block
*********************************************************************/
void VX1818_OSD_SetPos(BYTE bBlock,BYTE bPosx,BYTE bPosy)
{
switch(bBlock)
{
case 1: // Setup position of Title Block
TFT_Driver_Write(OSD_TITLE_HOR_INI_POS,bPosx);
TFT_Driver_Write(OSD_TITLE_VER_INI_POS,bPosy);
break;
case 2: // Setup position of Content Block
TFT_Driver_Write(OSD_CONTENT_HOR_INI_POS,bPosx);
TFT_Driver_Write(OSD_CONTENT_VER_INI_POS,bPosy);
break;
case 3: // Setup position of Bottom Block
TFT_Driver_Write(OSD_BOTTOM_HOR_INI_POS,bPosx);
TFT_Driver_Write(OSD_BOTTOM_VER_INI_POS,bPosy);
break;
default:
break;
}
}
/*********************************************************************
Set Size of OSD Function (For VX1818)
Input Factor:
block => 8 bits , Choose which block to set
0x01 => Title Block
0x02 => Content Block
0x03 => Bottom Block
sizex => 8 bits , The size of X direction (Lower 6bits are available)
Value range => for small font:01h-26h
for large font:01h-13h
sizey => 8 bits , The size of Y direction (Lower 5bits are available)
(Just for Content Block)
Value range => for small font:01h-15h
for large font:01h-0ah
Output Factor:
None
Motion:
1.Set the size of OSD Block
*********************************************************************/
void VX1818_OSD_SetSize(BYTE bBlock,BYTE bSizeX,BYTE bSizeY)
{
switch(bBlock)
{
case 1: // Setup x size of Title Block
TFT_Driver_Write(OSD_TITLE_CHAR_LEN,bSizeX);
break;
case 2: // Setup x and y size of Content Block
TFT_Driver_Write(OSD_CONTENT_HOR_LEN,bSizeX);
TFT_Driver_Write(OSD_CONTENT_VER_LEN,bSizeY);
break;
case 3: // Setup x size of Bottom Block
TFT_Driver_Write(OSD_BOTTOM_HOR_LENGHT,bSizeX);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -