⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ili932x.c

📁 STM32 单片机例程
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
******************************************************************************/
#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 + -