📄 ili932x.c
字号:
/******************************************************************************
******************************************************************************/
#include "..\main\include.h"
//#include "include.h"
void Delay_nms(int n)
{
u32 f = n, k;
for (; f != 0; f--)
{
for (k = 0xFFF; k != 0; k--)
;
}
}
void FSMC_LCD_Init(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
p.FSMC_AddressSetupTime = 0x02;
p.FSMC_AddressHoldTime = 0x00;
p.FSMC_DataSetupTime = 0x05;
p.FSMC_BusTurnAroundDuration = 0x00;
p.FSMC_CLKDivision = 0x00;
p.FSMC_DataLatency = 0x00;
p.FSMC_AccessMode = FSMC_AccessMode_B;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* Enable FSMC Bank1_SRAM Bank */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
/****************************************************************
函数名:LCD配置函数
功能:配置所有和LCD相关的GPIO和时钟
引脚分配为:
*****************************************************************/
void LCD_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相应时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
/*所有LCD引脚配置为推挽输出*/
/*16位数据低8位*//*16位数据高8位*/
// 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);
//PD.14(D0), PD.15(D1), PD.00(D2), PD.01(D3), PD.08(D13), PD.09(D14), PD.10(D15)
//PD.04(RD), PD.05(WR)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
// Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
// PE.14(D11), PE.15(D12) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/* NE1 configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* RS */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//控制脚 PD2-复位,PD3-背光
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
FSMC_LCD_Init();//初始化FSMC总线
}
/**********************************************
函数名:LCD初始化函数
功能:初始化LCD
入口参数:无
返回值:无
***********************************************/
void LCD_Initialize(void)
{
u16 i;
LCD_Configuration();
LCD_Light_ON();
// DataToWrite(0xffff);//数据线全高
RST_TFT_H();
// WR_TFT_H();
// CS_TFT_H();
// RS_TFT_H();
// RD_TFT_H();
RST_TFT_H();
Delay_nms(1);
RST_TFT_L();
Delay_nms(1);
RST_TFT_H();
Delay_nms(1);
i=0x9325;
//i=0x7781;
if (i == 0x9325 || i == 0x9328)
{
LCD_WR_CmdPar(0x00e7, 0x0010);
LCD_WR_CmdPar(0x0000, 0x0001); //start internal osc
LCD_WR_CmdPar(0x0001, 0x0100);
LCD_WR_CmdPar(0x0002, 0x0700); //power on sequence
LCD_WR_CmdPar(0x0003, (1 << 12) | (1 << 5) | (1 << 4)); //65K
LCD_WR_CmdPar(0x0004, 0x0000);
LCD_WR_CmdPar(0x0008, 0x0207);
LCD_WR_CmdPar(0x0009, 0x0000);
LCD_WR_CmdPar(0x000a, 0x0000); //display setting
LCD_WR_CmdPar(0x000c, 0x0001); //display setting
LCD_WR_CmdPar(0x000d, 0x0000); //0f3c
LCD_WR_CmdPar(0x000f, 0x0000);
LCD_WR_CmdPar(0x0010, 0x0000);
LCD_WR_CmdPar(0x0011, 0x0007);
LCD_WR_CmdPar(0x0012, 0x0000);
LCD_WR_CmdPar(0x0013, 0x0000);
Delay_nms(1); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0010, 0x1590);
LCD_WR_CmdPar(0x0011, 0x0227);
Delay_nms(10); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0012, 0x009c);
Delay_nms(1); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0013, 0x1900);
LCD_WR_CmdPar(0x0029, 0x0023);
LCD_WR_CmdPar(0x002b, 0x000e);
Delay_nms(10); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0020, 0x0000);
LCD_WR_CmdPar(0x0021, 0x0000);
Delay_nms(1); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0030, 0x0007);
LCD_WR_CmdPar(0x0031, 0x0707);
LCD_WR_CmdPar(0x0032, 0x0006);
LCD_WR_CmdPar(0x0035, 0x0704);
LCD_WR_CmdPar(0x0036, 0x1f04);
LCD_WR_CmdPar(0x0037, 0x0004);
LCD_WR_CmdPar(0x0038, 0x0000);
LCD_WR_CmdPar(0x0039, 0x0706);
LCD_WR_CmdPar(0x003c, 0x0701);
LCD_WR_CmdPar(0x003d, 0x000f);
Delay_nms(10); //for (i = 50000; i > 0; i--);
LCD_WR_CmdPar(0x0050, 0x0000);
LCD_WR_CmdPar(0x0051, 0x00ef);
LCD_WR_CmdPar(0x0052, 0x0000);
LCD_WR_CmdPar(0x0053, 0x013f);
LCD_WR_CmdPar(0x0060, 0xa700);
LCD_WR_CmdPar(0x0061, 0x0001);
LCD_WR_CmdPar(0x006a, 0x0000);
LCD_WR_CmdPar(0x0080, 0x0000);
LCD_WR_CmdPar(0x0081, 0x0000);
LCD_WR_CmdPar(0x0082, 0x0000);
LCD_WR_CmdPar(0x0083, 0x0000);
LCD_WR_CmdPar(0x0084, 0x0000);
LCD_WR_CmdPar(0x0085, 0x0000);
LCD_WR_CmdPar(0x0090, 0x0010);
LCD_WR_CmdPar(0x0092, 0x0000);
LCD_WR_CmdPar(0x0093, 0x0003);
LCD_WR_CmdPar(0x0095, 0x0110);
LCD_WR_CmdPar(0x0097, 0x0000);
LCD_WR_CmdPar(0x0098, 0x0000);
//display on sequence
LCD_WR_CmdPar(0x0007, 0x0133);
LCD_WR_CmdPar(0x0020, 0x0000);
LCD_WR_CmdPar(0x0021, 0x0000);
}
else if (i == 0x9320)
{
LCD_WR_CmdPar(0x00, 0x0000);
LCD_WR_CmdPar(0x01, 0x0100); //Driver Output Contral.
LCD_WR_CmdPar(0x02, 0x0700); //LCD Driver Waveform Contral.
LCD_WR_CmdPar(0x03, 0x1030); //Entry Mode Set.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -