- #include "main.h"
-
- void LCD_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
- FSMC_NORSRAMTimingInitTypeDef writeTiming;
-
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE, ENABLE);//使能PD,PE时钟
- RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟
-
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;//PD12 RESET PD13 推挽输出,控制背光
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
- GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化 //PB15 推挽输出,控制背光
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_7 |\
- GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|\
- GPIO_Pin_15;//PD0,1,4,5,7,8,9,10,11,14,15 AF OUT
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
- GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
-
- 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;//PE7~15,AF OUT
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
- GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//PD0,AF12
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//PD1,AF12
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//PD15,AF12
-
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//PE7,AF12
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//PE15,AF12
-
- readWriteTiming.FSMC_AddressSetupTime = 0XF; //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns
- readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
- readWriteTiming.FSMC_DataSetupTime = 60; //数据保存时间为60个HCLK =6*60=360ns
- readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
- readWriteTiming.FSMC_CLKDivision = 0x00;
- readWriteTiming.FSMC_DataLatency = 0x00;
- readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A
-
- writeTiming.FSMC_AddressSetupTime =9; //地址建立时间(ADDSET)为9个HCLK =54ns
- writeTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(A
- writeTiming.FSMC_DataSetupTime = 8; //数据保存时间为6ns*9个HCLK=54ns
- writeTiming.FSMC_BusTurnAroundDuration = 0x00;
- writeTiming.FSMC_CLKDivision = 0x00;
- writeTiming.FSMC_DataLatency = 0x00;
- writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A
-
- FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//
- FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
- FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; //SRAM
- FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit
- FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
- FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
- 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_Enable; // 读写使用不同的时序
- FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
- FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming; //写时序
- FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); // 使能BANK1
-
- delay_ms(50); // delay 50 ms
- LCD_LED = 1; //点亮背光
-
- }
- /****************************************************************************
- * 名 称:void wr_cmd(u16 data)
- * 功 能:向写命令
- * 入口参数:data 命令参数
- * 出口参数:无
- * 说 明:
- * 调用方法:wr_cmd(0x002A);
- ****************************************************************************/
- __inline void wr_cmd(u16 data) {
-
- Bank1_LCD_R = data;
- }
-
- /****************************************************************************
- * 名 称:void wr_dat(u16 data)
- * 功 能:向写数据
- * 入口参数:data 数据
- * 出口参数:无
- * 说 明:
- * 调用方法:wr_dat(0x0000);
- ****************************************************************************/
- __inline void wr_dat(u16 data) {
- Bank1_LCD_D = data;
- }
- void lcd_reset(void)
- {
- GPIO_ResetBits(GPIOD, GPIO_Pin_12);
- delay_ms(100);
- GPIO_SetBits(GPIOD, GPIO_Pin_12);
- delay_ms(100);
- }
- void lcd_write_cmd(unsigned int val)
- {
- wr_cmd(val);
- }
- void lcd_write_data(unsigned int val)
- {
- wr_dat(val);
- }
- void lcd_set_color(unsigned int color)
- {
- unsigned int i, j;
- lcd_write_cmd(0x002a);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x00ef);
- lcd_write_cmd(0x002b);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0001);
- lcd_write_data(0x003f);
- lcd_write_cmd(0x002c);
- for(i=0; i<240; i++)
- {
- for (j=0; j<320; j++)
- {
- lcd_write_data(color);
- }
- }
- }
- void lcd_init(void)
- {
-
- delay_ms(120);
- lcd_write_cmd(0x0001);
- delay_ms(120);
- lcd_write_cmd(0x00f0);
- lcd_write_data(0x005a);
- lcd_write_data(0x005a);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x0000);
- lcd_write_cmd(0x00ff);
- lcd_write_data(0x0030);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0040);
- lcd_write_cmd(0x0011);
- delay_ms(120);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x0001);
- lcd_write_data(0x0026);
- lcd_write_data(0x0026);
- lcd_write_data(0x0007);
- lcd_write_data(0x0011);//*****//
- lcd_write_data(0x0057);
- lcd_write_data(0x0057);
- lcd_write_data(0x002c);
- lcd_write_cmd(0x00f4);
- lcd_write_data(0x0060);//*****//
- lcd_write_data(0x0060);//*****//
- lcd_write_data(0x006F);//*****//
- lcd_write_data(0x006F);//*****//
- lcd_write_data(0x0044);
- lcd_write_cmd(0x00f5);
- lcd_write_data(0x0012);
- lcd_write_data(0x0011);
- lcd_write_data(0x0003);
- lcd_write_data(0x00f0);
- lcd_write_data(0x0030);
- lcd_write_data(0x001f);
- delay_ms(10);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x0003);
- delay_ms(20);
- lcd_write_cmd(0x00ff);
- lcd_write_data(0x0030);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0070);
- delay_ms(20);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x000f);
- lcd_write_cmd(0x00ff);
- lcd_write_data(0x0030);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0078);
- delay_ms(20);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x001f);
- lcd_write_cmd(0x00ff);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0078);
- delay_ms(20);
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x001f);
- delay_ms(40);
-
- lcd_write_cmd(0x00f3);
- lcd_write_data(0x00ff);//changed
- lcd_write_data(0x0026);
- lcd_write_data(0x0026);
- lcd_write_data(0x0007);//changed
- lcd_write_data(0x0055);
- lcd_write_data(0x0057);
- lcd_write_data(0x0057);
- lcd_write_data(0x002c);
- delay_ms(50);
- lcd_write_cmd(0x0011);
- delay_ms(100);
- //initializing sequence
- lcd_write_cmd(0x00f2);
- lcd_write_data(0x0013);
- lcd_write_data(0x0013);
- lcd_write_data(0x0001);
- lcd_write_data(0x0008);
- lcd_write_data(0x0008);
- lcd_write_data(0x0008);
- lcd_write_data(0x0008);
- lcd_write_data(0x0010);
- lcd_write_data(0x0000);//changed
- lcd_write_data(0x0010);
- lcd_write_data(0x0010);
- lcd_write_cmd(0x00fd);
- lcd_write_data(0x0055);
- lcd_write_cmd(0x0035);
- lcd_write_data(0x0000);
- lcd_write_cmd(0x0036);
- lcd_write_data(0x0048);
- lcd_write_cmd(0x003a);
- lcd_write_data(0x0055);
- lcd_write_cmd(0x00fe);
- lcd_write_data(0x0016);
- lcd_write_data(0x0016);
- lcd_write_data(0x0028);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0006);
-
- lcd_write_cmd(0x00f6);
- lcd_write_data(0x0010);
- lcd_write_data(0x0080);
- lcd_write_data(0x0000);
- lcd_write_data(0x0010);
-
- lcd_write_cmd(0x0051);
- lcd_write_data(0x00ff);
-
- lcd_write_cmd(0x0053);
- lcd_write_data(0x0000);
-
- lcd_write_cmd(0x0055);
- lcd_write_data(0x0000);
-
- lcd_write_cmd(0x005e);
- lcd_write_data(0x0000);
-
- lcd_write_cmd(0x00ca);
- lcd_write_data(0x0080);
- lcd_write_data(0x0080);
- lcd_write_data(0x0020);
- lcd_write_cmd(0x00cb);
- lcd_write_data(0x0001);
- //gamma setting
- lcd_write_cmd(0x00f7);
- lcd_write_data(0x0092);
- lcd_write_data(0x001a);
- lcd_write_data(0x001e);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x001d);
- lcd_write_data(0x001e);
- lcd_write_data(0x0026);
- lcd_write_data(0x001c);
- lcd_write_data(0x001c);
- lcd_write_data(0x0024);
- lcd_write_data(0x001b);
- lcd_write_data(0x0009);
- lcd_write_data(0x0011);
- lcd_write_data(0x0018);
- lcd_write_cmd(0x00f8);
- lcd_write_data(0x001a);
- lcd_write_data(0x0000);
- lcd_write_data(0x001e);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x0024);
- lcd_write_data(0x001e);
- lcd_write_data(0x001f);
- lcd_write_data(0x0027);
- lcd_write_data(0x001e);
- lcd_write_data(0x000a);
- lcd_write_data(0x0011);
- lcd_write_data(0x0011);
- lcd_write_cmd(0x00f9);
- lcd_write_data(0x0086);
- lcd_write_data(0x001a);
- lcd_write_data(0x0010);
- lcd_write_data(0x0010);
- lcd_write_data(0x001d);
- lcd_write_data(0x001b);
- lcd_write_data(0x001f);
- lcd_write_data(0x0027);
- lcd_write_data(0x001b);
- lcd_write_data(0x001f);
- lcd_write_data(0x0027);
- lcd_write_data(0x001e);
- lcd_write_data(0x000a);
- lcd_write_data(0x0011);
- lcd_write_data(0x0018);
- lcd_write_cmd(0x00fa);
- lcd_write_data(0x001a);
- lcd_write_data(0x0000);
- lcd_write_data(0x001e);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x0024);
- lcd_write_data(0x001e);
- lcd_write_data(0x001f);
- lcd_write_data(0x0027);
- lcd_write_data(0x001e);
- lcd_write_data(0x000a);
- lcd_write_data(0x0011);
- lcd_write_data(0x0011);
- lcd_write_cmd(0x00fb);
- lcd_write_data(0x0080);
- lcd_write_data(0x001a);
- lcd_write_data(0x001e);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x001b);
- lcd_write_data(0x001e);
- lcd_write_data(0x0026);
- lcd_write_data(0x0017);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x0014);
- lcd_write_data(0x0000);
- lcd_write_data(0x0011);
- lcd_write_data(0x0018);
- lcd_write_cmd(0x00fc);
- lcd_write_data(0x001a);
- lcd_write_data(0x0000);
- lcd_write_data(0x001e);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x001a);
- lcd_write_data(0x001d);
- lcd_write_data(0x0024);
- lcd_write_data(0x001e);
- lcd_write_data(0x001f);
- lcd_write_data(0x0027);
- lcd_write_data(0x001e);
- lcd_write_data(0x000a);
- lcd_write_data(0x0011);
- lcd_write_data(0x0011);
- // address set
- lcd_write_cmd(0x002a);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x00ef);
- lcd_write_cmd(0x002b);
- lcd_write_data(0x0000);
- lcd_write_data(0x0000);
- lcd_write_data(0x0001);
- lcd_write_data(0x003f);
- // display on
- lcd_write_cmd(0x0029);
- // RAM write
- lcd_write_cmd(0x002c);
- }
复制代码- #ifndef __LCD_H
- #define __LCD_H
- #include "main.h"
- #define Bank1_LCD_R (*(volatile unsigned short int*)0x60000000) //disp Reg ADDR
- #define Bank1_LCD_D (*(volatile unsigned short int*)0x60020000) //disp Data ADDR
-
- /*硬件相关的宏定义*/
- /********************************************************************************/
- #define LCD_LED PDout(13) // LCD_LED开关
- /********************************************************************************/
- void LCD_Init(void);
- __inline void wr_cmd(u16 data);
- __inline void wr_dat(u16 data);
- void lcd_write_cmd(unsigned int cmd);
- void lcd_write_data(unsigned int dat);
- void lcd_reset(void);
- void lcd_write_cmd(unsigned int val);
- void lcd_write_data(unsigned int val);
- void lcd_set_color(unsigned int color);
- void lcd_init(void);
- #endif
-
-
复制代码- #include "main.h"
- int main(void)
- {
- //系统时钟 相关模块等初始化
- Init_All_Periph();
- while(1)
- {
- lcd_set_color(0x00f8); //display 蓝色
- lcd_set_color(0xe007); //display 红色
- lcd_set_color(0x1f00); //display 绿色
- }
- }
- /*********************************************END OF FILE**********************/
复制代码
只是一个刷屏程序,献给有需要的人,采用STM32F407驱动
屏幕链接https://item.taobao.com/item.htm ... racelogww=ltckbburl
LCD.zip
(2.04 KB, 下载次数: 14)
|
点评