#ifndef __LCD_H #define __LCD_H #include "stm32f4xx.h" #define LCD_CLK 9 // 定义LCD驱动时钟,这里为了方便计算数值应在10-70之间,单位为M #define HBP 40 #define VBP 8 #define HSW 1 #define VSW 1 #define HFP 5 #define VFP 8 #define LCD_Width 480 // LCD的像素长度 #define LCD_Height 272 // LCD的像素宽度 #define LCD_Pixels (LCD_Width * LCD_Height) // 分辨率 #define LCD_MemoryAdd 0xD0000000 // 显存的起始地址 // 第二层的显存的偏移地址 // 这里预留了emWin使用32位色格式时,三缓冲所需的空间 // 计算方法,以32位颜色格式为例,每个像素点占4字节,使用emWin三缓冲所需空间为:480*272*4*3 // #define LCD_MemoryAdd_OFFSET ((uint32_t)LCD_Width * LCD_Height * 4 * 3) /*---------------------- 函数声明 -------------------------*/ void LCD_Init(void); void LCD_Backlight(u8 power); /*-----------------------引脚定义--------------------------*/ // IO口时钟 #define LCD_GPIO_CLK \ RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | \ RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOK | \ RCC_AHB1Periph_GPIOI // 红色数据线 #define LTDC_R0_PORT GPIOI #define LTDC_R0_PIN GPIO_Pin_15 #define LTDC_R0_PINSOURCE GPIO_PinSource15 #define LTDC_R1_PORT GPIOJ #define LTDC_R1_PIN GPIO_Pin_0 #define LTDC_R1_PINSOURCE GPIO_PinSource0 #define LTDC_R2_PORT GPIOJ #define LTDC_R2_PIN GPIO_Pin_1 #define LTDC_R2_PINSOURCE GPIO_PinSource1 #define LTDC_R3_PORT GPIOJ #define LTDC_R3_PIN GPIO_Pin_2 #define LTDC_R3_PINSOURCE GPIO_PinSource2 #define LTDC_R4_PORT GPIOJ #define LTDC_R4_PIN GPIO_Pin_3 #define LTDC_R4_PINSOURCE GPIO_PinSource3 #define LTDC_R5_PORT GPIOJ #define LTDC_R5_PIN GPIO_Pin_4 #define LTDC_R5_PINSOURCE GPIO_PinSource4 #define LTDC_R6_PORT GPIOJ #define LTDC_R6_PIN GPIO_Pin_5 #define LTDC_R6_PINSOURCE GPIO_PinSource5 #define LTDC_R7_PORT GPIOJ #define LTDC_R7_PIN GPIO_Pin_6 #define LTDC_R7_PINSOURCE GPIO_PinSource6 // 绿色数据线 #define LTDC_G0_PORT GPIOJ #define LTDC_G0_PIN GPIO_Pin_7 #define LTDC_G0_PINSOURCE GPIO_PinSource7 #define LTDC_G1_PORT GPIOJ #define LTDC_G1_PIN GPIO_Pin_8 #define LTDC_G1_PINSOURCE GPIO_PinSource8 #define LTDC_G2_PORT GPIOJ #define LTDC_G2_PIN GPIO_Pin_9 #define LTDC_G2_PINSOURCE GPIO_PinSource9 #define LTDC_G3_PORT GPIOJ #define LTDC_G3_PIN GPIO_Pin_10 #define LTDC_G3_PINSOURCE GPIO_PinSource10 #define LTDC_G4_PORT GPIOJ #define LTDC_G4_PIN GPIO_Pin_11 #define LTDC_G4_PINSOURCE GPIO_PinSource11 #define LTDC_G5_PORT GPIOK #define LTDC_G5_PIN GPIO_Pin_0 #define LTDC_G5_PINSOURCE GPIO_PinSource0 #define LTDC_G6_PORT GPIOK #define LTDC_G6_PIN GPIO_Pin_1 #define LTDC_G6_PINSOURCE GPIO_PinSource1 #define LTDC_G7_PORT GPIOK #define LTDC_G7_PIN GPIO_Pin_2 #define LTDC_G7_PINSOURCE GPIO_PinSource2 // 蓝色数据线 #define LTDC_B0_PORT GPIOJ #define LTDC_B0_PIN GPIO_Pin_12 #define LTDC_B0_PINSOURCE GPIO_PinSource12 #define LTDC_B1_PORT GPIOJ #define LTDC_B1_PIN GPIO_Pin_13 #define LTDC_B1_PINSOURCE GPIO_PinSource13 #define LTDC_B2_PORT GPIOJ #define LTDC_B2_PIN GPIO_Pin_14 #define LTDC_B2_PINSOURCE GPIO_PinSource14 #define LTDC_B3_PORT GPIOJ #define LTDC_B3_PIN GPIO_Pin_15 #define LTDC_B3_PINSOURCE GPIO_PinSource15 #define LTDC_B4_PORT GPIOK #define LTDC_B4_PIN GPIO_Pin_3 #define LTDC_B4_PINSOURCE GPIO_PinSource3 #define LTDC_B5_PORT GPIOK #define LTDC_B5_PIN GPIO_Pin_4 #define LTDC_B5_PINSOURCE GPIO_PinSource4 #define LTDC_B6_PORT GPIOK #define LTDC_B6_PIN GPIO_Pin_5 #define LTDC_B6_PINSOURCE GPIO_PinSource5 #define LTDC_B7_PORT GPIOK #define LTDC_B7_PIN GPIO_Pin_6 #define LTDC_B7_PINSOURCE GPIO_PinSource6 // 控制信号线 #define LTDC_CLK_PORT GPIOI // LCD时钟引脚 #define LTDC_CLK_PIN GPIO_Pin_14 #define LTDC_CLK_PINSOURCE GPIO_PinSource14 #define LTDC_HSYNC_PORT GPIOI // 行同步 #define LTDC_HSYNC_PIN GPIO_Pin_12 #define LTDC_HSYNC_PINSOURCE GPIO_PinSource12 #define LTDC_VSYNC_PORT GPIOI // 帧同步 #define LTDC_VSYNC_PIN GPIO_Pin_13 #define LTDC_VSYNC_PINSOURCE GPIO_PinSource13 #define LTDC_DE_PORT GPIOK // 数据使能 #define LTDC_DE_PIN GPIO_Pin_7 #define LTDC_DE_PINSOURCE GPIO_PinSource7 #define LTDC_Black_PORT GPIOD // 背光 #define LTDC_Black_PIN GPIO_Pin_13 typedef struct { int xs; int ys; int xe; int ye; } LCD_WindowStruct; typedef struct { int x_size; int y_size; int color; int bkColor; int effective; // 1,绘制窗口有效 LCD_WindowStruct win; LCD_WindowStruct realwin; u16 *draw; u16 *show; void (*fresh)(void); int LcdSwitchEn; int LayerBuffEnter; } LCD_Struct; // 函数:LCD层设置初始化 void LCD_LayerInit(void); // 获取图像显示地址 u32 *LCD_GetShowAddr(void); // 获取图像绘制地址 u32 *LCD_GetDrawAddr(void); u32 LCD_SetLayer(u32 AddrIndex); u32 LCD_SetDrawLayer(u32 Index); u32 LCD_SetLcdColor(u32 color); u32 LCD_SetLcdBkColor(u32 color); u32 LCD_SetLcdColor16(u32 color); u32 LCD_SetLcdBkColor16(u32 color); u32 LCD_GetLcdColor(void); u32 LCD_GetLcdBkColor(void); u32 LCD_GetLcdColor16(void); u32 LCD_GetLcdBkColor16(void); // 层复制 void LCD_LayerCopy(int dst, int src); // 开始在缓冲区绘制 void LCD_LayerBufferOn(void); // 显示缓冲层 void LCD_LayerBuffShow(void); // 获取屏幕刷新状态,1,已刷新 int LCD_GetLayerUpdataStat(void); // 进入缓冲区 void LCD_EnterLayerBuff(void); // 切换层,不用复制显示,播放视频时用 void LCD_SwitchLayerBuff(void); // 退出缓冲区 void LCD_ExitLayerBuff(void); // 设置活动窗口 void LCD_SetWindow(int x_s, int y_s, int x_size, int y_size); int LCD_GetWindowSizeX(void); int LCD_GetWindowSizeY(void); int LCD_GetLcdSizeX(void); int LCD_GetLcdSizeY(void); // 设置绘制模式,1,不绘制背景,0,绘制背景 void LCD_SetLcdDrawMode(int mode); void LCD_Clear(void); // 清除矩形内的显示 void LCD_ClearRect(int x, int y, int x_size, int y_size); void LCD_DrawPoint(int x, int y, u32 mode); void LCD_DrawPointSafe(int x, int y, u32 mode); // 以指定颜色画点,而不是前景色 void LCD_DrawPointSafeColor(int x, int y, u16 color); // 以指定色透明度画点0~32 void LCD_DrawPointSafeColorAlpha(int x, int y, u16 color, u8 alpha); // 填充矩形,已窗口坐标为原点 void LCD_FillRectByColor(int x, int y, int x_size, int y_size); // 以透明度填充矩形,已窗口坐标为原点 void LCD_FillRectByColorAlpha(int x, int y, int x_size, int y_size, u8 alpha); // void LCD_FillRect16 (u16 *buff,int xsize,int ysize); // void LCD_FillRectOff16 (u16 *buff,int x_s,int y_s,int xsize,int ysize); void LCD_FillRectOff16At(int s_x, int s_y, int s_xsize, int s_ysize, u16 *buff, int x_s, int y_s, int xsize, int ysize); // 用有透明度的图片填充 void LCD_FillRectOffAtAlpha(int s_x, int s_y, int s_xsize, int s_ysize, void *buff, int x_s, int y_s, int xsize, int ysize); void LCD_GetColors(u16 *buff, int x_s, int y_s, int x_size, int y_size); #endif