|
|
#include "stm32f10x.h" |
|
|
#include "Lcd_Driver.h" |
|
|
#include "LCD_Config.h" |
|
|
#include "delay.h" |
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>SPI<EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><EFBFBD>Ľӿ<EFBFBD>IO<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4 IO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ |
|
|
/****************************************************************************** |
|
|
<EFBFBD>ӿڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Lcd_Driver.h<EFBFBD>ڶ<EFBFBD><EFBFBD>壬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>LCD_GPIO_Init() |
|
|
#define LCD_CTRL GPIOB //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TFT<EFBFBD><EFBFBD><EFBFBD>ݶ˿<EFBFBD> |
|
|
#define LCD_LED |
|
|
#define LCD_RS GPIO_Pin_11 //PB11--->>TFT --RS/DC |
|
|
#define LCD_CS GPIO_Pin_12 //PB11--->>TFT --CS/CE |
|
|
#define LCD_RST |
|
|
#define LCD_SCL GPIO_Pin_13 //PB13--->>TFT --SCL/SCK |
|
|
#define LCD_SDA GPIO_Pin_15 //PB15 MOSI--->>TFT --SDA/DIN |
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
|
//Һ<EFBFBD><EFBFBD>IO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
void LCD_GPIO_Init(void) |
|
|
{ |
|
|
GPIO_InitTypeDef GPIO_InitStructure; |
|
|
|
|
|
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE); |
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15; |
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; |
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure); |
|
|
} |
|
|
|
|
|
//<EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
void SPI_WriteData(u8 Data) |
|
|
{ |
|
|
unsigned char i=0; |
|
|
for(i=8;i>0;i--) |
|
|
{ |
|
|
if(Data&0x80) |
|
|
LCD_SDA_SET; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
else LCD_SDA_CLR; |
|
|
|
|
|
LCD_SCL_CLR; |
|
|
LCD_SCL_SET; |
|
|
Data<<=1; |
|
|
} |
|
|
} |
|
|
|
|
|
//<EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<EFBFBD><EFBFBD>8λָ<EFBFBD><EFBFBD> |
|
|
void Lcd_WriteIndex(u8 Index) |
|
|
{ |
|
|
//SPI д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ʼ |
|
|
LCD_CS_CLR; |
|
|
LCD_RS_CLR; |
|
|
SPI_WriteData(Index); |
|
|
LCD_CS_SET; |
|
|
} |
|
|
|
|
|
//<EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
void Lcd_WriteData(u8 Data) |
|
|
{ |
|
|
LCD_CS_CLR; |
|
|
LCD_RS_SET; |
|
|
SPI_WriteData(Data); |
|
|
LCD_CS_SET; |
|
|
} |
|
|
|
|
|
//<EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<EFBFBD><EFBFBD>16λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
void LCD_WriteData_16Bit(u16 Data) |
|
|
{ |
|
|
LCD_CS_CLR; |
|
|
LCD_RS_SET; |
|
|
SPI_WriteData(Data>>8); //д<EFBFBD><EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
SPI_WriteData(Data); //д<EFBFBD><EFBFBD><EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
LCD_CS_SET; |
|
|
} |
|
|
|
|
|
void Lcd_WriteReg(u8 Index,u8 Data) |
|
|
{ |
|
|
Lcd_WriteIndex(Index); |
|
|
Lcd_WriteData(Data); |
|
|
} |
|
|
|
|
|
void Lcd_Reset(void) |
|
|
{ |
|
|
// LCD_RST_CLR; |
|
|
delay_ms(100); |
|
|
// LCD_RST_SET; |
|
|
delay_ms(50); |
|
|
} |
|
|
|
|
|
//LCD Init For 1.44Inch LCD Panel with ST7735R. |
|
|
void Lcd_Init(void) |
|
|
{ |
|
|
LCD_GPIO_Init(); |
|
|
Lcd_Reset(); //Reset before LCD Init. |
|
|
|
|
|
//LCD Init For 1.44Inch LCD Panel with ST7735R. |
|
|
Lcd_WriteIndex(0x11);//Sleep exit |
|
|
delay_ms (120); |
|
|
|
|
|
//ST7735R Frame Rate |
|
|
Lcd_WriteIndex(0xB1); |
|
|
Lcd_WriteData(0x01); |
|
|
Lcd_WriteData(0x2C); |
|
|
Lcd_WriteData(0x2D); |
|
|
|
|
|
Lcd_WriteIndex(0xB2); |
|
|
Lcd_WriteData(0x01); |
|
|
Lcd_WriteData(0x2C); |
|
|
Lcd_WriteData(0x2D); |
|
|
|
|
|
Lcd_WriteIndex(0xB3); |
|
|
Lcd_WriteData(0x01); |
|
|
Lcd_WriteData(0x2C); |
|
|
Lcd_WriteData(0x2D); |
|
|
Lcd_WriteData(0x01); |
|
|
Lcd_WriteData(0x2C); |
|
|
Lcd_WriteData(0x2D); |
|
|
|
|
|
Lcd_WriteIndex(0xB4); //Column inversion |
|
|
Lcd_WriteData(0x07); |
|
|
|
|
|
//ST7735R Power Sequence |
|
|
Lcd_WriteIndex(0xC0); |
|
|
Lcd_WriteData(0xA2); |
|
|
Lcd_WriteData(0x02); |
|
|
Lcd_WriteData(0x84); |
|
|
Lcd_WriteIndex(0xC1); |
|
|
Lcd_WriteData(0xC5); |
|
|
|
|
|
Lcd_WriteIndex(0xC2); |
|
|
Lcd_WriteData(0x0A); |
|
|
Lcd_WriteData(0x00); |
|
|
|
|
|
Lcd_WriteIndex(0xC3); |
|
|
Lcd_WriteData(0x8A); |
|
|
Lcd_WriteData(0x2A); |
|
|
Lcd_WriteIndex(0xC4); |
|
|
Lcd_WriteData(0x8A); |
|
|
Lcd_WriteData(0xEE); |
|
|
|
|
|
Lcd_WriteIndex(0xC5); //VCOM |
|
|
Lcd_WriteData(0x0E); |
|
|
|
|
|
Lcd_WriteIndex(0x36); //MX, MY, RGB mode |
|
|
Lcd_WriteData(0xC8); |
|
|
|
|
|
//ST7735R Gamma Sequence |
|
|
Lcd_WriteIndex(0xe0); |
|
|
Lcd_WriteData(0x0f); |
|
|
Lcd_WriteData(0x1a); |
|
|
Lcd_WriteData(0x0f); |
|
|
Lcd_WriteData(0x18); |
|
|
Lcd_WriteData(0x2f); |
|
|
Lcd_WriteData(0x28); |
|
|
Lcd_WriteData(0x20); |
|
|
Lcd_WriteData(0x22); |
|
|
Lcd_WriteData(0x1f); |
|
|
Lcd_WriteData(0x1b); |
|
|
Lcd_WriteData(0x23); |
|
|
Lcd_WriteData(0x37); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x07); |
|
|
Lcd_WriteData(0x02); |
|
|
Lcd_WriteData(0x10); |
|
|
|
|
|
Lcd_WriteIndex(0xe1); |
|
|
Lcd_WriteData(0x0f); |
|
|
Lcd_WriteData(0x1b); |
|
|
Lcd_WriteData(0x0f); |
|
|
Lcd_WriteData(0x17); |
|
|
Lcd_WriteData(0x33); |
|
|
Lcd_WriteData(0x2c); |
|
|
Lcd_WriteData(0x29); |
|
|
Lcd_WriteData(0x2e); |
|
|
Lcd_WriteData(0x30); |
|
|
Lcd_WriteData(0x30); |
|
|
Lcd_WriteData(0x39); |
|
|
Lcd_WriteData(0x3f); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x07); |
|
|
Lcd_WriteData(0x03); |
|
|
Lcd_WriteData(0x10); |
|
|
|
|
|
Lcd_WriteIndex(0x2a); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x7f); |
|
|
|
|
|
Lcd_WriteIndex(0x2b); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(0x9f); |
|
|
|
|
|
Lcd_WriteIndex(0xF0); //Enable test command |
|
|
Lcd_WriteData(0x01); |
|
|
Lcd_WriteIndex(0xF6); //Disable ram power save mode |
|
|
Lcd_WriteData(0x00); |
|
|
|
|
|
Lcd_WriteIndex(0x3A); //65k mode |
|
|
Lcd_WriteData(0x05); |
|
|
|
|
|
|
|
|
Lcd_WriteIndex(0x29);//Display on |
|
|
} |
|
|
|
|
|
|
|
|
/************************************************* |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD_Set_Region |
|
|
<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lcd<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD> |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
*************************************************/ |
|
|
void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end) |
|
|
{ |
|
|
Lcd_WriteIndex(0x2a); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(x_start+2); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(x_end+2); |
|
|
|
|
|
Lcd_WriteIndex(0x2b); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(y_start+3); |
|
|
Lcd_WriteData(0x00); |
|
|
Lcd_WriteData(y_end+3); |
|
|
|
|
|
Lcd_WriteIndex(0x2c); |
|
|
|
|
|
} |
|
|
|
|
|
/************************************************* |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD_Set_XY |
|
|
<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lcd<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xy<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
*************************************************/ |
|
|
void Lcd_SetXY(u16 x,u16 y) |
|
|
{ |
|
|
Lcd_SetRegion(x,y,x,y); |
|
|
} |
|
|
|
|
|
|
|
|
/************************************************* |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LCD_DrawPoint |
|
|
<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
*************************************************/ |
|
|
void Gui_DrawPoint(u16 x,u16 y,u16 Data) |
|
|
{ |
|
|
Lcd_SetRegion(x,y,x+1,y+1); |
|
|
LCD_WriteData_16Bit(Data); |
|
|
|
|
|
} |
|
|
|
|
|
/***************************************** |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>TFTijһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ |
|
|
<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>color <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫֵ |
|
|
******************************************/ |
|
|
unsigned int Lcd_ReadPoint(u16 x,u16 y) |
|
|
{ |
|
|
unsigned int Data; |
|
|
Lcd_SetXY(x,y); |
|
|
|
|
|
//Lcd_ReadData();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> |
|
|
//Data=Lcd_ReadData(); |
|
|
Lcd_WriteData(Data); |
|
|
return Data; |
|
|
} |
|
|
/************************************************* |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Lcd_Clear |
|
|
<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫCOLOR |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
*************************************************/ |
|
|
void Lcd_Clear(u16 Color) |
|
|
{ |
|
|
unsigned int i,m; |
|
|
Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1); |
|
|
Lcd_WriteIndex(0x2C); |
|
|
for(i=0;i<X_MAX_PIXEL;i++) |
|
|
for(m=0;m<Y_MAX_PIXEL;m++) |
|
|
{ |
|
|
LCD_WriteData_16Bit(Color); |
|
|
} |
|
|
} |
|
|
|
|
|
|