HW_Lib/lib/tft/inc/tft.h

399 lines
13 KiB
C
Raw Normal View History

2024-09-16 14:51:12 +00:00
#ifndef HW_LIB_TFT_H
#define HW_LIB_TFT_H
2024-08-29 08:46:54 +00:00
#ifdef __cplusplus
extern "C" {
#endif
2024-09-17 08:32:06 +00:00
#include <stdbool.h>
2024-08-29 08:46:54 +00:00
#include "stdint.h"
2024-09-16 14:51:12 +00:00
#include "stdlib.h"
2024-09-17 08:45:15 +00:00
/*功能配置区*/
2024-09-17 08:32:06 +00:00
//#define REFRESH_CALL_ENABLE 1 //使用DMA或者整体刷新函数
2024-08-29 08:46:54 +00:00
#define HZK_FONT //使用HZK 12/16 字体 tools下可自由生成
#define UTF8_TO_UNICODE //启用UTF8转换显示
//#define LVGL_FONT //启用LVGL字体
2024-09-17 08:45:15 +00:00
/*启用设备配置区*/
2024-09-17 08:32:06 +00:00
#define TFT_ST7735 0x5CU
2024-09-17 08:45:15 +00:00
#define TFT_ST7796 0x1E74U
2024-09-16 14:51:12 +00:00
2024-08-29 08:46:54 +00:00
typedef struct TFT_Dev TFT_T;
2024-09-17 08:45:15 +00:00
/**
* @brief
* @param reg: []
* @param pdata: []
* @param ldata: []
* @return uint8_t
* @example write_status = TFT_WRITE_REG(reg_addr, data_buffer, data_length);
**/
2024-09-17 08:32:06 +00:00
typedef uint8_t (*TFT_WRITE_REG_t)(uint8_t reg, uint8_t *pdata, size_t ldata);
2024-08-29 08:46:54 +00:00
2024-09-17 08:45:15 +00:00
/**
* @brief
* @param reg: []
* @param pdata: []
* @param ldata: []
* @return uint8_t
* @example read_status = TFT_READ_REG(reg_addr, data_buffer, data_length);
**/
2024-09-17 08:32:06 +00:00
typedef uint8_t (*TFT_READ_REG_t)(uint8_t reg, uint8_t *pdata, size_t ldata);
2024-09-17 08:45:15 +00:00
/**
* @brief
* @param data: []
* @param len: []
* @return uint8_t
* @example send_status = TFT_SEND_DATA(data_buffer, data_length);
**/
2024-09-17 08:32:06 +00:00
typedef uint8_t (*TFT_SEND_DATA_t)(uint8_t *data, size_t len);
2024-09-17 08:45:15 +00:00
/**
* @brief
* @param data: []
* @param len: []
* @return uint8_t
* @example recv_status = TFT_RECV_DATA(data_buffer, data_length);
**/
2024-09-17 08:32:06 +00:00
typedef uint8_t (*TFT_RECV_DATA_t)(uint8_t *data, size_t len);
2024-09-16 14:51:12 +00:00
2024-08-29 08:46:54 +00:00
/**
* @brief TFT
2024-09-16 14:51:12 +00:00
* @param data: []
2024-08-29 08:46:54 +00:00
* @return uint8_t
*/
typedef uint8_t (*TFT_BLACKLIGHT_t)(uint8_t data);
2024-09-16 14:51:12 +00:00
/**
* @brief TFT
* @param ms: []
* @return uint8_t
*/
2024-09-17 08:32:06 +00:00
typedef void (*TFT_DELAY_t)(uint32_t ms);
2024-09-16 14:51:12 +00:00
2024-08-29 08:46:54 +00:00
#if REFRESH_CALL_ENABLE
2024-09-16 14:51:12 +00:00
/**
* @brief TFT
*/
typedef void (*TFT_REFRESH_t)(TFT_T *dev);
2024-08-29 08:46:54 +00:00
#endif
/**
* @brief TFT
*/
typedef enum {
2024-09-17 08:45:15 +00:00
TFT_ERROR,/**< 错误状态 */
2024-09-17 08:32:06 +00:00
TFT_IDLE, /**< 空闲状态 */
TFT_WRITE, /**< 写入状态 */
TFT_REFRESH, /**< 刷新状态 */
2024-08-29 08:46:54 +00:00
} TFT_STATE_T;
2024-09-16 14:51:12 +00:00
typedef enum {
2024-09-17 08:32:06 +00:00
LONGITUDINAL = 0x01U,/* 液晶屏纵向选择 */
2024-09-16 14:51:12 +00:00
LONGITUDINAL_180,/* 液晶屏纵向旋转 180° 方向选择 */
HORIZONTAL,/* 液晶屏横向选择 */
HORIZONTAL_180,/* 液晶屏横向旋转 180° 方向选择 */
} TFT_DIR_T;
typedef union TFT_Color {
uint16_t color;
uint16_t u16;
uint8_t u8[2];
} TFT_Color_t;
2024-08-29 08:46:54 +00:00
/**
* @brief TFT
*/
struct TFT_Dev {
2024-09-17 08:45:15 +00:00
uint32_t id; /**< TFT设备ID */
uint8_t setxcmd; /**< 设置X坐标命令 */
uint8_t setycmd; /**< 设置Y坐标命令 */
uint8_t wgramcmd; /**< 写GRAM命令 */
TFT_DIR_T dir: 4; /**< 显示方向占4位 */
TFT_STATE_T state: 4; /**< TFT状态占4位 */
uint16_t width; /**< 显示宽度 */
uint16_t height; /**< 显示高度 */
TFT_WRITE_REG_t writeReg; /**< 写寄存器函数指针 */
TFT_READ_REG_t readReg; /**< 读寄存器函数指针 */
TFT_SEND_DATA_t sendData; /**< 发送数据函数指针 */
TFT_RECV_DATA_t recvData; /**< 接收数据函数指针 */
TFT_BLACKLIGHT_t blacklight; /**< TFT背光控制函数指针 */
TFT_DELAY_t delay; /**< TFT延迟函数指针类型 */
2024-08-29 08:46:54 +00:00
#if REFRESH_CALL_ENABLE
2024-09-17 08:45:15 +00:00
TFT_REFRESH_t call; /**< TFT刷新函数指针仅在REFRESH_CALL_ENABLE宏定义启用时有效 */
2024-08-29 08:46:54 +00:00
#endif
};
2024-09-17 08:45:15 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief TFT
* @param dev: [] TFT
* @return void
* @example TFT_Init(&myTFT);
**/
void TFT_Init(TFT_T *dev);
/**
* @brief TFTID
* @param dev: [] TFT
* @return uint32_t ID
* @example TFT_ReadID(myTFT);
**/
uint32_t TFT_ReadID(TFT_T *dev);
/**
* @brief TFT
* @param dev: [] TFT
* @param dir: []
* @return void
* @example TFT_SetDir(&myTFT, TFT_DIR_LANDSCAPE);
**/
void TFT_SetDir(TFT_T *dev, TFT_DIR_T dir);
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @return void
* @example TFT_SetCur(&myTFT, 100, 50);
**/
void TFT_SetCur(TFT_T *dev, uint16_t x, uint16_t y);
2024-08-29 08:46:54 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief
* @param pcolor: []
* @param bcolor: []
* @return void
* @example TFT_SetColor(0xFFFF, 0x0000);
**/
void TFT_SetColor(uint16_t pcolor, uint16_t bcolor);
2024-09-16 14:51:12 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param width: []
* @param height: []
* @return void
* @example TFT_SetWindow(&myTFT, 10, 10, 100, 80);
**/
void TFT_SetWindow(TFT_T *dev, uint16_t x, uint16_t y, uint16_t width, uint16_t height);
/**
* @brief
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @return TFT_Color_t
* @example TFT_GetPixel(&myTFT, 20, 30);
**/
TFT_Color_t TFT_GetPixel(TFT_T *dev, uint16_t x, uint16_t y);
2024-09-16 14:51:12 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param color: []
* @return void
* @example TFT_SetPixel(&myTFT, 50, 60, TFT_COLOR_RED);
**/
void TFT_SetPixel(TFT_T *dev, uint16_t x, uint16_t y, TFT_Color_t color);
2024-09-16 14:51:12 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief TFT
* @param dev: [] TFT
* @param value: []
* @return void
* @example TFT_SetBacklight(&myTFT, 50);
**/
void TFT_SetBacklight(TFT_T *dev, uint8_t value);
2024-08-29 08:46:54 +00:00
2024-09-17 08:32:06 +00:00
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param width: []
* @param height: []
* @param color: []
* @return void
* @example TFT_FillRect(&myTFT, 20, 30, 100, 80, &color_array);
**/
void TFT_FillRect(TFT_T *dev, uint16_t x, uint16_t y, uint16_t width, uint16_t height, TFT_Color_t *color);
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param width: []
* @param height: []
* @param color: []
* @return void
* @example TFT_Fill(&myTFT, 20, 30, 100, 80, TFT_COLOR_BLUE);
**/
void TFT_Fill(TFT_T *dev, uint16_t x, uint16_t y, uint16_t width, uint16_t height, TFT_Color_t color);
/**
* @brief TFT
* @param dev: [] TFT
* @param color: []
* @return void
* @example TFT_FillColor(&myTFT, TFT_COLOR_WHITE);
**/
void TFT_FillColor(TFT_T *dev, TFT_Color_t color);
/**
* @brief TFT线
* @param dev: [] TFT
* @param x1: [] X
* @param y1: [] Y
* @param x2: [] X
* @param y2: [] Y
* @return void
* @example TFT_DrawLine(&myTFT, 10, 20, 100, 120);
**/
void TFT_DrawLine(TFT_T *dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
/**
* @brief TFT
* @param dev: [] TFT
* @param x1: [] X
* @param y1: [] Y
* @param x2: [] X
* @param y2: [] Y
* @return void
* @example TFT_DrawRect(&myTFT, 10, 20, 100, 80);
**/
void TFT_DrawRect(TFT_T *dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param r: []
* @return void
* @example TFT_DrawCircle(&myTFT, 50, 50, 30);
**/
void TFT_DrawCircle(TFT_T *dev, uint16_t x, uint16_t y, uint16_t r);
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param chr: []
* @param size: []
* @param mode: [] (1)(0)
* @return void
* @example TFT_ShowChar(&myTFT, 30, 40, 'A', 2);
**/
void TFT_ShowChar(TFT_T *dev, uint16_t x, uint16_t y, uint8_t chr, uint16_t size, bool mode);
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param str: []
* @param size: []
* @param mode: [] (1)(0)
* @return void
* @example TFT_ShowString(&myTFT, 20, 30, "Hello", 1);
**/
void TFT_ShowString(TFT_T *dev, uint16_t x, uint16_t y, uint8_t *str, uint16_t size, bool mode);
#ifdef HZK_FONT
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param str: []
* @param mode: [] (1)(0)
* @return void
* @example TFT_ShowCHString(&myTFT, 20, 30, "你好");
**/
void TFT_ShowCHString(TFT_T *dev, uint16_t x, uint16_t y, uint8_t *str, bool mode);
#endif
/**
* @brief TFT
* @param dev: [] TFT
* @param x: [] X
* @param y: [] Y
* @param num: []
* @param len: []
* @param size: []
* @return void
* @example TFT_ShowNum(&myTFT, 20, 30, 12345, 5, 2);
**/
void TFT_ShowNum(TFT_T *dev, uint16_t x, uint16_t y, uint32_t num, uint16_t len, uint8_t size);
/**
* @brief TFT
* @param dev: [] TFT
* @param x0: [] X
* @param y0: [] Y
* @param w: []
* @param h: []
* @param bmp: []
* @return void
* @example TFT_ShowPic(&myTFT, 10, 20, 80, 60, &image_data);
**/
void TFT_ShowPic(TFT_T *dev, uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, TFT_Color_t *bmp);
2024-09-16 14:51:12 +00:00
2024-09-21 04:48:44 +00:00
/**
* @brief 线
* @param dev: [] TFT
* @param x: [] 线x
* @param y: [] 线y
* @param r: [] 线线
* @return void
* @example TFT_DrawCross(&tft_dev, 100, 80, 5);
**/
void TFT_DrawCross(TFT_T *dev, uint16_t x, uint16_t y, uint8_t r);
2024-09-17 12:37:51 +00:00
/**
* @brief
* @param dev: [] TFT
* @param x: [] x
* @param y: [] y
* @param width: []
* @param height: []
* @param progress: [] [0.0, 1.0]
* @return void
* @example TFT_ShowBar(&tft_device, 10, 20, 100, 10, 0.75);
**/
void TFT_ShowBar(TFT_T *dev, uint16_t x, uint16_t y, uint16_t width, uint16_t height, float progress);
2024-09-16 14:51:12 +00:00
#ifdef LVGL_FONT
#include "lvgl_font.h"
/**
* @brief TFT
* @param dev: [] TFT
* @param font: []
* @param s: []
* @param x: [] x
* @param y: [] y
2024-09-17 08:32:06 +00:00
* @param mode: [] (1)(0)
2024-09-16 14:51:12 +00:00
* @return void
2024-09-17 08:32:06 +00:00
* @example TFT_DisplayString(&oled_device, &font_arial_16, "Hello World", 10, 20,bool mode);
2024-09-16 14:51:12 +00:00
**/
void TFT_DisplayString(TFT_T *dev, const lv_font_t *font, uint8_t *s, uint16_t x, uint16_t y);
#endif
2024-09-17 12:37:51 +00:00
2024-08-29 08:46:54 +00:00
#ifdef __cplusplus
}
#endif
2024-09-16 14:51:12 +00:00
#endif //HW_LIB_TFT_H