|
|
|
|
#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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|