#include "TFT_SSD1963.H"
#include "HANZI1616.H"
//5寸屏的显示设置 800*480分辨率
unsigned int HDP=799;//479
unsigned int HT=978-7-0-0;//531
unsigned int HPS=93-7;//43
unsigned int LPS=40-0;
unsigned char HPW=46-0;
unsigned int VDP=479;
unsigned int VT=565-0;
unsigned int VPS=43-0;
unsigned int FPS=20;
unsigned char VPW=23;
u16 POINT_COLOR=RED; //默认红色
void TFT_LCD_GPIO_Config(void)
{
// GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
User_GPIO_Config(GPIOA,GPIO_Mode_OUT_PP, GPIO_MaxSpeed_50MHz, GPIO_Pins_4); //TFT LCD CS
User_GPIO_Config(GPIOB,GPIO_Mode_OUT_PP, GPIO_MaxSpeed_50MHz, GPIO_Pins_0|GPIO_Pins_1|GPIO_Pins_2|GPIO_Pins_3|GPIO_Pins_4|GPIO_Pins_5|GPIO_Pins_6|GPIO_Pins_7|GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_10|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14|GPIO_Pins_15);
User_GPIO_Config(GPIOC,GPIO_Mode_OUT_PP, GPIO_MaxSpeed_50MHz, GPIO_Pins_7|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14|GPIO_Pins_15);
// User_GPIO_Config(GPIOC,GPIO_Mode_OUT_PP, GPIO_MaxSpeed_50MHz, GPIO_Pins_6);
GPIO_WriteBit(GPIOA,GPIO_Pins_4,Bit_SET);
}
void LCD_DATA_Out(uint16_t data)
{
GPIO_Write(GPIOB, data);
}
uint16_t LCD_DATA_In(void)
{
return GPIO_ReadInputData(GPIOB);
}
void LCD_Write_cmd(unsigned char cmd)
{
RS_L;
RD_H;
CS_L;
LCD_DATA_Out(0X0000|cmd);
WR_L;
WR_H;
CS_H;
}
void LCD_Write_cmd_HalfWord(unsigned int cmd)
{
RS_L;
RD_H;
CS_L;
LCD_DATA_Out(cmd);
WR_L;
WR_H;
CS_H;
}
void LCD_Write_data_Byte(unsigned char data)
{
RS_H;
RD_H;
CS_L;
LCD_DATA_Out(0X0000|data);
WR_L;
WR_H;
CS_H;
}
void LCD_Write_data_HalfWord(unsigned int data)
{
RS_H;
RD_H;
CS_L;
LCD_DATA_Out(data);
WR_L;
WR_H;
CS_H;
}
uint16_t LCD_Read_data_HalfWord(void)
{
uint16_t data;
//---------set PORT B input
User_GPIO_Config(GPIOB,GPIO_Mode_IN_PU, GPIO_MaxSpeed_50MHz, GPIO_Pins_0|GPIO_Pins_1|GPIO_Pins_2|GPIO_Pins_3|GPIO_Pins_4|GPIO_Pins_5|GPIO_Pins_6|GPIO_Pins_7|GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_10|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14|GPIO_Pins_15);
//---------
RD_L;
WR_H;
RS_H;
CS_L;
data=LCD_DATA_In();
RD_H;
CS_H;
//---------set PORT B output
User_GPIO_Config(GPIOB,GPIO_Mode_OUT_PP, GPIO_MaxSpeed_50MHz, GPIO_Pins_0|GPIO_Pins_1|GPIO_Pins_2|GPIO_Pins_3|GPIO_Pins_4|GPIO_Pins_5|GPIO_Pins_6|GPIO_Pins_7|GPIO_Pins_8|GPIO_Pins_9|GPIO_Pins_10|GPIO_Pins_11|GPIO_Pins_12|GPIO_Pins_13|GPIO_Pins_14|GPIO_Pins_15);
//---------
return data;
}
void TFT_Init(void)
{
TFT_LCD_GPIO_Config();
RST_LCD_H;
Delay_ms(400);
RST_LCD_L;
Delay_ms(400);
RST_LCD_H;
Delay_ms(400);
#if 1
LCD_Write_cmd_HalfWord(0x00E2); //PLL 倍频到120M PLL=10*36/3=120M
LCD_Write_data_HalfWord(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystal
LCD_Write_data_HalfWord(0x0002);
LCD_Write_data_HalfWord(0x0004);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00E0);
LCD_Write_data_HalfWord(0x0001);
Delay_ms(100);
LCD_Write_cmd_HalfWord(0x00E0);
LCD_Write_data_HalfWord(0x0003); // PLL 使能 PLL作为时钟
Delay_ms(100);
LCD_Write_cmd_HalfWord(0x0001); // 软件复位
Delay_ms(100);
LCD_Write_cmd_HalfWord(0x00E6); //PLL setting for PCLK, depends on resolution
LCD_Write_data_HalfWord(0x0004);
LCD_Write_data_HalfWord(0x0093);
LCD_Write_data_HalfWord(0x00E0);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00B0); //设置LCD模式
LCD_Write_data_HalfWord(0x0000);
LCD_Write_data_HalfWord(0x0000);
LCD_Write_data_HalfWord((HDP>>8)&0X00FF); //Set HDP
LCD_Write_data_HalfWord(HDP&0X00FF);
LCD_Write_data_HalfWord((VDP>>8)&0X00FF); //Set VDP
LCD_Write_data_HalfWord(VDP&0X00FF);
LCD_Write_data_HalfWord(0x0000);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00B4); //HSYNC
LCD_Write_data_HalfWord((HT>>8)&0X00FF); //Set HT
LCD_Write_data_HalfWord(HT&0X00FF);
LCD_Write_data_HalfWord((HPS>>8)&0X00FF); //Set HPS
LCD_Write_data_HalfWord(HPS&0X00FF);
LCD_Write_data_HalfWord(HPW); //Set HPW
LCD_Write_data_HalfWord((LPS>>8)&0X00FF); //Set HPS
LCD_Write_data_HalfWord(LPS&0X00FF);
LCD_Write_data_HalfWord(0x0000);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00B6); //VSYNC
LCD_Write_data_HalfWord((VT>>8)&0X00FF); //Set VT
LCD_Write_data_HalfWord(VT&0X00FF);
LCD_Write_data_HalfWord((VPS>>8)&0X00FF); //Set VPS
LCD_Write_data_HalfWord(VPS&0X00FF);
LCD_Write_data_HalfWord(VPW); //Set VPW
LCD_Write_data_HalfWord((FPS>>8)&0X00FF); //Set FPS
LCD_Write_data_HalfWord(FPS&0X00FF);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00BA);
LCD_Write_data_HalfWord(0x000D); //GPIO[3:0] out 1
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00B8);
LCD_Write_data_HalfWord(0x0007); //GPIO3=input, GPIO[2:0]=output
LCD_Write_data_HalfWord(0x0001); //GPIO0 normal
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x0036); //rotation
LCD_Write_data_HalfWord(0x0000);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00F0); //16位 565模式
LCD_Write_data_HalfWord(0x0003);
Delay_ms(100);
// TFT_CLEAR(0,0,480,272);
LCD_Write_cmd_HalfWord(0x0029); //display on
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00BE); //set PWM for B/L
LCD_Write_data_HalfWord(0x0006);
LCD_Write_data_HalfWord(0x00FF);//0x0080
LCD_Write_data_HalfWord(0x0001);
LCD_Write_data_HalfWord(0x00f0);
LCD_Write_data_HalfWord(0x0000);
LCD_Write_data_HalfWord(0x0000);
Delay_ms(10);
LCD_Write_cmd_HalfWord(0x00d0);//设置动态背光控制配置
LCD_Write_data_HalfWord(0x000D);//0x000d
TFT_CLEAR(0,0,800,480);//480 272
#endif
}
//-------------------------------------------------------------------------------------
/****************************************************************************
* 名 称:void TFT_CLEAR(u8 x,u16 y,u8 len,u16 wid)
* 功 能:2.4 寸TFT 清屏函数
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
void TFT_CLEAR(u16 x,u16 y,u32 len,u32 wid)
{
u32 w;
LCD_Write_cmd_HalfWord(0x002A);
LCD_Write_data_HalfWord(x>>8);
LCD_Write_data_HalfWord(x);
LCD_Write_data_HalfWord((len-1)>>8);
LCD_Write_data_HalfWord((len-1));
LCD_Write_cmd_HalfWord(0x002b);
LCD_Write_data_HalfWord(y>>8);
LCD_Write_data_HalfWord(y);
LCD_Write_data_HalfWord((wid-1)>>8);
LCD_Write_data_HalfWord((wid-1));
LCD_Write_cmd_HalfWord(0x002c);
w=(len-x)*(wid-y);
while(w--) LCD_Write_data_HalfWord(0xffff);//0xffff
}
/****************************************************************************
* 名 称:void TFT_CLEAR(u8 x,u16 y,u8 len,u16 wid)
* 功 能:2.4 寸TFT 显示全屏单一色彩
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:无
****************************************************************************/
void TFT_Draw_color(u16 x,u16 y,u32 len,u32 wid,u16 color)
{
// u32 w;
int i,j;
LCD_Write_cmd_HalfWord(0x002A);
LCD_Write_data_HalfWord(x>>8);
LCD_Write_data_HalfWord(x);
LCD_Write_data_HalfWord((x+len-1)>>8);
LCD_Write_data_HalfWord((x+len-1));
LCD_Write_cmd_HalfWord(0x002b);
LCD_Write_data_HalfWord(y>>8);
LCD_Write_data_HalfWord(y);
LCD_Write_data_HalfWord((y+wid-1)>>8);
LCD_Write_data_HalfWord((y+wid-1));
LCD_Write_cmd_HalfWord(0x002c);
for(i=0; i<(wid); i++)
{
for(j=0; j<(len); j++)
{
LCD_Write_data_HalfWord(color);
}
}
}
void TFT_display_picture(u16 x,u16 y,u32 len,u32 wid,const uint8_t *text)
{
int i,j;
uint16_t color_data1,color_data2;
LCD_Write_cmd_HalfWord(0x002A);
LCD_Write_data_HalfWord(x>>8);
LCD_Write_data_HalfWord(x);
LCD_Write_data_HalfWord((x+len-1)>>8);
LCD_Write_data_HalfWord((x+len-1));
LCD_Write_cmd_H