TFT LCD 2.4寸屏 驱动程序
//头文件配置:
#include "stm32f10x_lib.h"
#include "Lcdili9320.h"
#include "Delay_nus.h"
#include "Delay_nms.h"
#include "spi_flash.h"
//底层硬件相关配置-----------------
//---------------------------------
/****************************************************************
函数名:Lcd配置函数
功能:配置所有和Lcd相关的GPIO和时钟
引脚分配为:
PE——16Bit数据总线
PD15——Lcd_rst
PD14——Lcd_rs
PD13——Lcd_wr
PD12——Lcd_rd
PD11——Lcd_cs
PB10——Lcd_blaklight 背光靠场效应管驱动背光模块
*****************************************************************/
void Lcd_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相应时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
/*所有Lcd引脚配置为推挽输出*/
/*16位数据*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/*控制脚*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*背光控制*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/**************************************
函数名:Lcd所有引脚变高
功能:与Lcd有关的所有引脚全部变高电平
入口参数:无
返回值:无
***********************************/
void Lcd_AllPin_H(void)
{
GPIO_SetBits(GPIOE,GPIO_Pin_All);//16位数据线变高
GPIO_SetBits(GPIOD,GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//控制脚变高
}
void Lcd_Data_All_L(void)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_All); //16位数据线变高
}
void Lcd_Rd_L(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
}
void Lcd_Rd_H(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_12);
}
void Lcd_Rst_L(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_15);
}
void Lcd_Rst_H(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_15);
}
void Lcd_Cs_L(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_11);
}
void Lcd_Cs_H(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_11);
}
void Lcd_Rs_L(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
}
void Lcd_Rs_H(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_14);
}
void Lcd_Wr_L(void)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_13);
}
void Lcd_Wr_H(void)
{
GPIO_SetBits(GPIOD,GPIO_Pin_13);
}
//通用子程序---------------------
//------------------------------
/**********************************************
函数名:Lcd初始化函数
功能:初始化Lcd
入口参数:无
返回值:无
***********************************************/
void Lcd_Init(void)
{
Lcd_Light_ON;
Lcd_AllPin_H();//所有引脚变高
Lcd_Rst_H();
Delay_nms(1);
Lcd_Rst_L();
Delay_nms(1);//10
Lcd_Rst_H();
Delay_nms(1);//50
//开始初始化
LCD_WR_REG(0x00e5,0x8000);//set the internal vcore voltage不知道干什么的?????
LCD_WR_REG(0x0000,0x0001);//开启内部OSC
Delay_nms(10);//延时10ms等待晶体稳定
LCD_WR_REG(0x0001,0x0100);//SS=1 S极输出移动方向S720到S1. SM=0 【GS=0】 G极扫描方向从上到下(详细DATASHEET)
LCD_WR_REG(0x0002,0x0700);//B/C=1 EOR=1 set the line inversion?不知道干什么????
LCD_WR_REG(0x0003,0x1030);//TFM=0,TRI=0,SWAP=1,16位system interface 写GRAM时翻转RGB数据到BRG数据?翻转干什么?????
//HWM=0,高速GRAM写操作禁止???????????????????高速写操作是否是激活RBG或其他动态画面显
//示模式??????? AM=0,ID[1.0]=11 AC由左到右又下到上自增
LCD_WR_REG(0x0004,0x0000);//比例缩放设置
LCD_WR_REG(0x0008,0x0202);
LCD_WR_REG(0x0009,0x0000);
LCD_WR_REG(0x000a,0x0000);
LCD_WR_REG(0x000c,0x0001);//system接口 显示静止画面
LCD_WR_REG(0x000d,0x0000);
LCD_WR_REG(0x000f,0x0000);//RBG 接口极性设置 DOTCLK ENABLE HSYNC???????????????????????????
LCD_WR_REG(0x0050,0x0000);//水平 GRAM起始位置
LCD_WR_REG(0x0051,0x00ef);//水平GRAM终止位置
LCD_WR_REG(0x0052,0x0000);//垂直GRAM起始位置
LCD_WR_REG(0x0053,0x013f);//垂直GRAM终止位置
LCD_WR_REG(0x0060,0x2700);//G扫描设置 从G1开始
LCD_WR_REG(0x0061,0x0001);//Enables the grayscale inversion of the image by setting REV=1.??????????????????????????????
LCD_WR_REG(0x006a,0x0000);//不使用卷曲功能
LCD_WR_REG(0x0080,0x0000);
LCD_WR_REG(0x0081,0x0000);
LCD_WR_REG(0x0082,0x0000);
LCD_WR_REG(0x0083,0x0000);
LCD_WR_REG(0x0084,0x0000);
LCD_WR_REG(0x0085,0x0000);
LCD_WR_REG(0x0090,0x0010);
LCD_WR_REG(0x0092,0x0000);
LCD_WR_REG(0x0093,0x0003);
LCD_WR_REG(0x0095,0x0110);
LCD_WR_REG(0x0097,0x0000);
LCD_WR_REG(0x0098,0x0000);
/*电源设置*/
LCD_WR_REG(0x0010,0x0000);
LCD_WR_REG(0x0011,0x0000);
LCD_WR_REG(0x0012,0x0000);
LCD_WR_REG(0x0013,0x0000);
Delay_nms(200);
LCD_WR_REG(0x0010,0x17b0);
LCD_WR_REG(0x0011,0x0137);
Delay_nms(50);
LCD_WR_REG(0x0012,0x0139);
Delay_nms(50);
LCD_WR_REG(0x0013,0x1700);
LCD_WR_REG(0x0029,0x000c);
Delay_nms(50);
LCD_WR_REG(0x0020,0x0000);//GRAM水平起始位置
LCD_WR_REG(0x0021,0x0000);//
LCD_WR_REG(0x0030,0x0000);
LCD_WR_REG(0x0031,0x0507);
LCD_WR_REG(0x0032,0x0104);
LCD_WR_REG(0x0035,0x0105);
LCD_WR_REG(0x0036,0x0404);
LCD_WR_REG(0x0037,0x0603);
LCD_WR_REG(0x0038,0x0004);
LCD_WR_REG(0x0039,0x0007);
LCD_WR_REG(0x003c,0x0501);
LCD_WR_REG(0x003d,0x0404);
//显示开启
LCD_WR_REG(0x0007,0x0073);//写入0173是显示当前GRAM内容 写入0073是不显示当前
}
1