不含stm32 底层的代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MyStm32Code/bsp/Inc/bsp_lcd.h

189 lines
6.2 KiB

2 years ago
#ifndef __BSP_LCD_H
#define __BSP_LCD_H
#ifdef __cplusplus
extern "C" {
#endif
#include "main.h"
#include "stm32f4xx.h"
#include "bsp_ltdc.h"
#include "bsp_dma2d.h"
#include "fonts.h"
#define POLY_X(Z) ((int32_t)((Points + Z)->X))
#define POLY_Y(Z) ((int32_t)((Points + Z)->Y))
#define ABS(X) ((X) > 0 ? (X) : -(X))
//LCD参数
#define LCD_DEFAULT_FONT Font16
/**
* @brief LCD液晶类型
*/
typedef enum
{
INCH_5 = 0x00, /* 野火5寸屏 */
INCH_7, /* 野火7寸屏 */
INCH_4_3, /* 野火4.3寸屏 */
LCD_TYPE_NUM /* LCD类型总数*/
}LCD_TypeDef;
// 前使用的LCD,默认为4.3寸屏 */
extern LCD_TypeDef cur_lcd;
typedef struct
{
uint32_t TextColor;
uint32_t BackColor;
sFONT *pFont;
sFONT *pCnFont;
}LCD_DrawPropTypeDef;
typedef struct
{
int16_t X;
int16_t Y;
}Point, *pPoint;
/**
* @brief
*/
typedef enum
{
CENTER_MODE = 0x01, /* 居中对齐 */
RIGHT_MODE = 0x02, /* 右对齐 */
LEFT_MODE = 0x03 /* 左对齐 */
}Text_AlignModeTypdef;
typedef struct
{
// uint16_t pixel_width; // 像素宽
// uint16_t pixel_height; // 像素高
uint16_t width; //LCD 宽度
uint16_t height; //LCD 高度
uint8_t dir; //横屏还是竖屏控制:0,竖屏;1,横屏。
uint8_t pixelsize; //像素大小。
uint32_t color_format; // Layer2 Addr
uint32_t color;
uint32_t backcolor;
LCD_DrawPropTypeDef draw_prop[2];
uint8_t show_num_mode; // 显示数组模式, 0 多余位补0 , 1 不补0
uint16_t activelayer; //active layer
uint32_t layeraddr[2]; // Layer0 Addr
}MY_LCD_TypeDef;
extern MY_LCD_TypeDef my_lcd; //管理LCD重要参数
void LCD_Init(void);
uint8_t LCD_DeInit(void);
void LCD_DisplayDirection(uint8_t dir);
void LCD_SetLayer( uint8_t layer,uint32_t buf_addr, uint32_t layer_color_format,
uint32_t layer_back_color,uint8_t alpha );
void LCD_Set_Active_layer( uint8_t layer_no );
void LCD_SetTextColor(uint32_t Color);
uint32_t LCD_GetTextColor(void);
void LCD_SetBackColor(uint32_t Color);
uint32_t LCD_GetBackColor(void);
void LCD_SetColors(uint32_t TextColor, uint32_t BackColor);
void LCD_SetFont(sFONT *fonts);
sFONT *LCD_GetFont(void);
void LCD_Draw_Point(uint16_t x,uint16_t y,uint32_t color);
uint32_t LCD_Read_Point(uint16_t x,uint16_t y);
// static void LCD_Draw_Point(uint16_t x,uint16_t y,uint32_t color);
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3);
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_DrawCircle(uint16_t x, uint16_t y, uint16_t r);
void LCD_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t color);
void LCD_Color_Fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t *color);
void LCD_Clear( uint32_t color);
void LCD_DisplayChar(uint16_t x, uint16_t y, uint8_t c); // 显示单个ASCII字符
void LCD_DisplayString( uint16_t x, uint16_t y, char *p);
//>>>>> 显示整数或小数
void LCD_ShowNumMode(uint8_t mode); // 设置显示模式,多余位填充空格还是填充0
void LCD_DisplayNumber( uint16_t Line, int32_t number, uint8_t len) ; // 显示整数
void LCD_DisplayDecimals( uint16_t Line, double decimals, uint8_t len, uint8_t decs) ; // 显示小数
// 中文
void LCD_DispChar_CH (uint16_t Xpos, uint16_t Ypos, uint16_t Text);
void LCD_DisplayStringLine_EN_CH(uint16_t Line, uint8_t *ptr);
void LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode);
void LCD_DisplayStringLine(uint16_t Line, uint8_t *ptr);
void LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
void LCD_FillRect(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
void LCD_FillCircle(uint16_t x, uint16_t y, uint16_t r);
void LCD_DrawImage(uint16_t x,uint16_t y,uint16_t width,uint16_t height,const uint8_t *pImage) ;
//画笔颜色 ARGB8888
#if LCD_PIXFORMAT == LTDC_PIXEL_FORMAT_ARGB8888 || LCD_PIXFORMAT == LTDC_PIXEL_FORMAT_RGB888
#define LCD_COLOR_BLUE ((uint32_t)0xFF0000FF)
#define LCD_COLOR_GREEN ((uint32_t)0xFF00FF00)
#define LCD_COLOR_RED ((uint32_t)0xFFFF0000)
#define LCD_COLOR_CYAN ((uint32_t)0xFF00FFFF)
#define LCD_COLOR_MAGENTA ((uint32_t)0xFFFF00FF)
#define LCD_COLOR_YELLOW ((uint32_t)0xFFFFFF00)
#define LCD_COLOR_LIGHTBLUE ((uint32_t)0xFF8080FF)
#define LCD_COLOR_LIGHTGREEN ((uint32_t)0xFF80FF80)
#define LCD_COLOR_LIGHTRED ((uint32_t)0xFFFF8080)
#define LCD_COLOR_LIGHTCYAN ((uint32_t)0xFF80FFFF)
#define LCD_COLOR_LIGHTMAGENTA ((uint32_t)0xFFFF80FF)
#define LCD_COLOR_LIGHTYELLOW ((uint32_t)0xFFFFFF80)
#define LCD_COLOR_DARKBLUE ((uint32_t)0xFF000080)
#define LCD_COLOR_DARKGREEN ((uint32_t)0xFF008000)
#define LCD_COLOR_DARKRED ((uint32_t)0xFF800000)
#define LCD_COLOR_DARKCYAN ((uint32_t)0xFF008080)
#define LCD_COLOR_DARKMAGENTA ((uint32_t)0xFF800080)
#define LCD_COLOR_DARKYELLOW ((uint32_t)0xFF808000)
#define LCD_COLOR_WHITE ((uint32_t)0xFFFFFFFF)
#define LCD_COLOR_LIGHTGRAY ((uint32_t)0xFFD3D3D3)
#define LCD_COLOR_GRAY ((uint32_t)0xFF808080)
#define LCD_COLOR_DARKGRAY ((uint32_t)0xFF404040)
#define LCD_COLOR_BLACK ((uint32_t)0xFF000000)
#define LCD_COLOR_BROWN ((uint32_t)0xFFA52A2A)
#define LCD_COLOR_ORANGE ((uint32_t)0xFFFFA500)
#define LCD_COLOR_TRANSPARENT ((uint32_t)0xFF000000)
#else
# RGB565
#define LCD_COLOR_WHITE 0xFFFF
#define LCD_COLOR_BLACK 0x0000
#define LCD_COLOR_BLUE 0x001F
#define LCD_COLOR_RED 0xF800
#define LCD_COLOR_MAGENTA 0xF81F
#define LCD_COLOR_GREEN 0x07E0
#define LCD_COLOR_CYAN 0x7FFF
#define LCD_COLOR_YELLOW 0xFFE0
#define LCD_COLOR_BROWN 0XBC40 //棕色
#define LCD_COLOR_GRAY 0X8430 //灰色
#define LCD_COLOR_LIGHTGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LCD_COLOR_BRRED_RGB565 0XFC07 //棕红色
#define LCD_COLOR_BRED_RGB565 0XF81F
#define LCD_COLOR_GRED_RGB565 0XFFE0
#define LCD_COLOR_GBLUE_RGB565 0X07FF
#endif
#ifdef __cplusplus
}
#endif
#endif
/**
* LCD_ShowString(10,80,240,24,24,"LTDC TEST");
*/