📄 lcd_240x320.c
字号:
if ( ( (x0+x) < SCR_XSIZE_TFT_240320) && ( (y0+y) < SCR_YSIZE_TFT_240320) )
LCD_BUFER[y0+y][x0+x] = c ;
p = p + 2 ;
}
}
*/
}
///**********************************
//显示VGA Fill是8X16点阵的ASCLL码
//************************************
void Lcd_PutASCII(void *PDC,U32 x,U32 y,U8 Fill,U16 Fcolor,U16 Bcolor)
{
U16 i,j;
U8 *pZK;
U16 *lcdbuf;
pZK =(U8*) Font8x16 + Fill*16;//求Fill的字模首地址
for( i = 0 ; i < 16 ; i++ ) //连写16行
{
if( x < SCR_XSIZE_TFT_320240 && y < SCR_YSIZE_TFT_320240 )
{
Fill=*pZK;//取字模
lcdbuf =(U16 *)PDC + y*SCR_XSIZE_TFT_320240 + x;//确定数据在显示缓冲中的位置
for( j = 0; j < 8; j++)//scan 8 dots/line
{
if( Fill > 0x7f )//该点为1,则显示字体颜色
{
*lcdbuf++ = Fcolor;
}
else//为0,则显示背景颜色
{
*lcdbuf++ = Bcolor;
}
Fill=Fill<<1;//取下一个点
}
}
pZK++;//取下个字模
y++;//scan the next line
}
}
//**********************************************************
//汉字显示QW是16X16点阵的中文内码
//*************************************************
void Lcd_PutHZ(void *PDC,U32 x,U32 y,U16 QW,U16 Fcolor,U16 Bcolor)
{
U16 i,k;
U16 *pZK;
U16 *lcdbuf;
U16 Fill;
pZK=(U16*)Font16x16+(((QW>>8)-1)*94+(QW&0x00ff)-1)*16;//求QW的字模首地址
for( i = 0 ; i < 16 ; i++ ) //连写16行
{
if( x < SCR_XSIZE_TFT_320240 && y < SCR_YSIZE_TFT_320240 )
{
Fill=*pZK;//取字模
Fill=(Fill&0xff)<<8 | (Fill>>8);//交换高、低8位
lcdbuf =(U16 *)PDC + y*SCR_XSIZE_TFT_320240 + x;//确定数据在显示缓冲中的位置
for( k = 0; k < 16; k++)//scan disp 16 dots/line
{
if( Fill > 0x7fff )//该点为1,则显示字体颜色
{
*lcdbuf++ = Fcolor;
}
else//为0,则显示字体颜色
{
*lcdbuf++ = Bcolor;
}
Fill=Fill<<1;//取下一个点
}
}
pZK++;//取下个字模
y++;//scan the next line
}
}
//**************************************************************
//显示字符子程序
//*fmt,....是要显示的字符需用""号, "....\n" 其中\n是转行符。即显示字符并转行。
// "....%8d" 其中%8d是表示空8个格
// *fmt,后面可以直接加变量,而显示变量的值。
//***************************************************************
void Lcd_printf(void *PDC,U32 lcdx,U32 lcdy,U16 Fcolor,U16 Bcolor,char *fmt,...)
{
va_list ap;
char string[256];
unsigned char *pStr = (unsigned char *)string;
unsigned int i = 0;
va_start(ap,fmt);
vsprintf(string,fmt,ap);
va_end(ap);
while(*pStr != 0 )
{
switch(*pStr)
{
case '\n' :
{
lcdx = 0; //当遇到\n时转行
lcdy = lcdy +16; //
if( lcdy > SCR_YSIZE_TFT_320240-16)
{
lcdy = SCR_YSIZE_TFT_320240-16;
}
pStr++;
i++;
break;
}
default:
{
Uart_Printf("printf chinese!\n");
if( *pStr > 0xA0 & *(pStr+1) > 0xA0 ) //中文输出
{
if( lcdx > SCR_XSIZE_TFT_320240-16 )
{
lcdx = 0;
lcdy = lcdy + 16;
}
if( lcdy > SCR_YSIZE_TFT_320240-16)
{
lcdy = SCR_YSIZE_TFT_320240-16;
}
Lcd_PutHZ(PDC,lcdx , lcdy , (*pStr - 0xA0)<<8 | (*(pStr+1) - 0xA0),Fcolor,Bcolor);
lcdx = lcdx + 16;
pStr++;
i++;
pStr++;
i++;
}
else //英文输出
{
Uart_Printf("printf english!\n");
if( lcdx > SCR_XSIZE_TFT_320240-8 )
{
lcdx = 0;
lcdy = lcdy + 16;
}
if( lcdy > SCR_YSIZE_TFT_320240-16)
{
lcdy = SCR_YSIZE_TFT_320240-16;
}
Lcd_PutASCII(PDC,lcdx,lcdy,*pStr,Fcolor,Bcolor);
lcdx=lcdx + 8;
pStr++;
i++;
}
break;
}
}
if( i > 255 ) break;
}
}
void Lcd_Tft_240X320_Init( void )
{
Lcd_Port_Init();
//***********************************
//LTV350QV_Reset(); //reset LCD panel
LTV350QV_Power_ON();
//***********************************
Lcd_Init();
Lcd_EnvidOnOff(1); //turn on vedio
Lcd_ClearScr(0xffff); //fill all screen with some color
#define LCD_BLANK 16
#define C_UP ( LCD_XSIZE_TFT_240320 - LCD_BLANK*2 )
#define C_RIGHT ( LCD_XSIZE_TFT_240320 - LCD_BLANK*2 )
#define V_BLACK ( ( LCD_YSIZE_TFT_240320 - LCD_BLANK*4 ) / 6 )
Glib_FilledRectangle( LCD_BLANK, LCD_BLANK, ( LCD_XSIZE_TFT_320240 - LCD_BLANK ), ( LCD_YSIZE_TFT_320240 - LCD_BLANK ),0x0000); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*0), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1),(C_RIGHT), 0x001f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*1), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2),(C_RIGHT), 0x07e0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*2), (LCD_BLANK*2),(LCD_BLANK*2 + V_BLACK*3),(C_RIGHT), 0xf800); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*3), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4),(C_RIGHT),0xffe0); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*4), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5),(C_RIGHT),0xf81f); //fill a Rectangle with some color
Glib_FilledRectangle( (LCD_BLANK*2 + V_BLACK*5), (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*6),(C_RIGHT),0x07ff); //fill a Rectangle with some color
}
/**************************************************************
**************************************************************/
void Lcd_Tft_240X320( void )
{
Lcd_Init();
Lcd_EnvidOnOff(1); //turn on vedio
Lcd_ClearScr(0x00); //fill all screen with some color
Paint_Bmp( 0,0,320,240, xyx_240_320 ) ; //paint a bmp
}
/*****************************************
* *for LTV350QV_POE TFT LCD
*****************************************/
//short delay for about 90*time ns
void LTV350QV_Short_Delay(U8 time)
{
U8 i;
for(i=0;i<time*15;i++) ; //about 360 ns
}
//****************************************
void LTV350QV_Reset(void)
{
RST_L;
Delay(100);
RST_H;
Delay(1);
}
void LTV350QV_Register_Write(LTV350QV_SPI_Data regdata)
{
U8 i,temp1;
U16 temp2;
U32 temp3;
//write index
temp1=regdata.Device_ID<<2 | 0<<1 | 0<<0; //register index
temp2=regdata.Index;
temp3=(temp1<<24) | (temp2<<8);
CS_L;
LTV350QV_Short_Delay(1);
for(i=0;i<24;i++)
{
SCLK_L;
if(temp3 & (1<<(31-i)) ) //if is H
SDI_H;
else
SDI_L;
LTV350QV_Short_Delay(1); //setup time
SCLK_H;
LTV350QV_Short_Delay(1); //hold time
}
CS_H;
LTV350QV_Short_Delay(5);
//write instruction
temp1=regdata.Device_ID<<2 | 1<<1 | 0<<0; //instruction
temp2=regdata.Structure;
temp3=(temp1<<24) | (temp2<<8);
CS_L;
LTV350QV_Short_Delay(1);
for(i=0;i<24;i++)
{
SCLK_L;
if(temp3 & (1<<(31-i)) ) //if is H
SDI_H;
else
SDI_L;
LTV350QV_Short_Delay(1);
SCLK_H;
LTV350QV_Short_Delay(1);
}
CS_H;
}
U16 LTV350QV_Register_Read(U8 index)
{
U8 i,temp1;
U16 temp2;
U32 temp3;
//write index
temp1=LTV350QV_POE<<2 | 0<<1 | 1<<0; //register index
temp2=index;
temp3=(temp1<<24) | (temp2<<8);
CS_L;
LTV350QV_Short_Delay(1);
for(i=0;i<24;i++)
{
SCLK_L;
if(temp3 & (1<<(31-i)) ) //if is H
SDI_H;
else
SDI_L;
LTV350QV_Short_Delay(1); //setup time
SCLK_H;
LTV350QV_Short_Delay(1); //hold time
}
CS_H;
LTV350QV_Short_Delay(5);
//read instruction
temp1=LTV350QV_POE<<2 | 1<<1 | 1<<0; //instruction
temp3=temp1<<24;
CS_L;
LTV350QV_Short_Delay(1);
for(i=0;i<8;i++) //send device ID
{
SCLK_L;
if(temp3 & (1<<(31-i)) ) //if is H
SDI_H;
else
SDI_L;
LTV350QV_Short_Delay(1); //setup time
SCLK_H;
LTV350QV_Short_Delay(1); //hold time
}
temp2=0;
rGPCCON &=~(1<<20); //SDI input
for(i=0;i<16;i++) //read data from the register
{
SCLK_L;
LTV350QV_Short_Delay(1);
SCLK_H;
LTV350QV_Short_Delay(1);
if(SDI_STATE) //if H
temp2 |=1<<(15-i);
else //if L
;
LTV350QV_Short_Delay(1);
}
CS_H;
return temp2;
}
/****************************************
* *
****************************************/
void LTV350QV_Write(U16 index, U16 regdata)
{
LTV350QV_SPI_Data WriteData;
WriteData.Device_ID=LTV350QV_POE; //0x1d
WriteData.Index=index; //
WriteData.Structure=regdata;
LTV350QV_Register_Write(WriteData);
}
/****************************************
* *power ON sequence
****************************************/
void LTV350QV_Power_ON(void)
{
LTV350QV_Write(9, 0x0000);
Delay(150);
LTV350QV_Write(9, 0x4000);
LTV350QV_Write(10, 0x2000);
LTV350QV_Write(9, 0x4055);
Delay(550);
LTV350QV_Write(1, 0x409d);
LTV350QV_Write(2, 0x0284);
LTV350QV_Write(3, 0x0100);
LTV350QV_Write(4, 0x3000);
LTV350QV_Write(5, 0x4003);
LTV350QV_Write(6, 0x000a);
LTV350QV_Write(7, 0x0021);
LTV350QV_Write(8, 0x0c00);
LTV350QV_Write(10, 0x0103);
LTV350QV_Write(11, 0x0301);
LTV350QV_Write(12, 0x1f0f);
LTV350QV_Write(13, 0x1f0f);
LTV350QV_Write(14, 0x0707);
LTV350QV_Write(15, 0x0307);
LTV350QV_Write(16, 0x0707);
LTV350QV_Write(17, 0x0000);
LTV350QV_Write(18, 0x0004);
LTV350QV_Write(19, 0x0000);
Delay(200);
LTV350QV_Write(9, 0x4a55);
LTV350QV_Write(5, 0x5003);
}
/**********************************
* *power OFF sequence
**********************************/
void LTV350QV_Powen_OFF(void)
{
/* GON -> 0, POC -> 0 */
LTV350QV_Write(9, 0x4055);
/* DSC -> 0 */
LTV350QV_Write(5, 0x4003);
/* VCOMG -> 0 */
LTV350QV_Write(10, 0x0000);
Delay(20);
/* AP[2:0] -> 000 */
LTV350QV_Write(9, 0x4000);
}
//*************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -