2024-06-24 14:58:18 +00:00
|
|
|
|
#pragma once
|
2024-06-22 03:08:31 +00:00
|
|
|
|
#ifndef HW_LIB_OLED_H
|
|
|
|
|
#define HW_LIB_OLED_H
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
2024-12-19 14:49:08 +00:00
|
|
|
|
#include "stdbool.h"
|
2024-06-22 06:29:51 +00:00
|
|
|
|
#include "stdint.h"
|
|
|
|
|
|
|
|
|
|
|
2024-06-22 07:21:15 +00:00
|
|
|
|
#define REFRESH_CALL_ENABLE 1 //使用DMA或者整体刷新函数
|
2024-07-05 15:38:31 +00:00
|
|
|
|
#define HZK_FONT //使用HZK 12/16 字体 tools下可自由生成
|
2024-09-21 12:43:31 +00:00
|
|
|
|
#define UTF8_TO_UNICODE //启用UTF8转换显示
|
2024-07-05 15:38:31 +00:00
|
|
|
|
//#define LVGL_FONT //启用LVGL字体
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief OLED设备结构体
|
|
|
|
|
*/
|
|
|
|
|
typedef struct OLED_Dev OLED_T;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief OLED命令处理函数指针类型
|
|
|
|
|
* @param data: [输入] 数据指针
|
|
|
|
|
* @param len: [输入] 数据长度
|
|
|
|
|
* @return uint8_t 返回值
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
typedef uint8_t (*OLED_CMD_t)(uint8_t* data, size_t len);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief OLED数据处理函数指针类型
|
|
|
|
|
* @param data: [输入] 数据指针
|
|
|
|
|
* @param len: [输入] 数据长度
|
|
|
|
|
* @return uint8_t 返回值
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
typedef uint8_t (*OLED_DATA_t)(uint8_t* data, size_t len);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
#if REFRESH_CALL_ENABLE
|
2024-06-22 11:13:18 +00:00
|
|
|
|
|
2024-06-22 06:29:51 +00:00
|
|
|
|
/**
|
2024-06-22 07:21:15 +00:00
|
|
|
|
* @brief OLED刷新函数指针类型
|
2024-06-22 06:29:51 +00:00
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
typedef void (*OLED_REFRESH_t)(OLED_T* dev);
|
2024-06-22 11:13:18 +00:00
|
|
|
|
|
2024-06-22 06:29:51 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief OLED状态枚举
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
IDLE, /**< 空闲状态 */
|
|
|
|
|
WRITE, /**< 写入状态 */
|
|
|
|
|
REFRESH, /**< 刷新状态 */
|
2024-06-22 06:29:51 +00:00
|
|
|
|
} OLED_STATE_T;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief OLED设备结构体
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
struct OLED_Dev
|
|
|
|
|
{
|
|
|
|
|
uint8_t* buf; /**< 显示缓冲区指针 */
|
|
|
|
|
uint8_t width; /**< 显示宽度 */
|
|
|
|
|
uint8_t height; /**< 显示高度 */
|
|
|
|
|
OLED_STATE_T state; /**< OLED状态 */
|
|
|
|
|
OLED_CMD_t cmd; /**< OLED命令处理函数指针 */
|
|
|
|
|
OLED_DATA_t data; /**< OLED数据处理函数指针 */
|
2024-06-22 06:29:51 +00:00
|
|
|
|
#if REFRESH_CALL_ENABLE
|
2024-08-29 08:46:54 +00:00
|
|
|
|
OLED_REFRESH_t call; /**< OLED刷新函数指针 */
|
2024-06-22 06:29:51 +00:00
|
|
|
|
#endif
|
|
|
|
|
};
|
|
|
|
|
|
2024-06-22 03:08:31 +00:00
|
|
|
|
// OLED初始化指令数组
|
2024-06-22 11:13:18 +00:00
|
|
|
|
//const uint8_t initCmd[] = {
|
|
|
|
|
// 1, 0xAE, // 关闭显示
|
|
|
|
|
// 2, 0xD5, 0x80, // 设置显示时钟分频比/振荡器频率
|
|
|
|
|
// 2, 0xA8, 0x3F, // 设置多路复用比率
|
|
|
|
|
// 2, 0xD3, 0x00, // 设置显示偏移
|
|
|
|
|
// 2, 0x40, 0x00, // 设置显示起始行
|
|
|
|
|
// 2, 0x8D, 0x14, // 电荷泵设置
|
|
|
|
|
// 2, 0x20, 0x00, // 设置内存寻址模式
|
|
|
|
|
// 1, 0xA0, // 设置段重映射
|
|
|
|
|
// 1, 0xC0, // 设置COM输出扫描方向
|
|
|
|
|
// 2, 0xDA, 0x12, // 设置COM引脚硬件配置
|
|
|
|
|
// 2, 0x81, 0xCF, // 设置对比度控制
|
|
|
|
|
// 2, 0xD9, 0xF1, // 设置预充电周期
|
|
|
|
|
// 2, 0xDB, 0x20, // 设置VCOMH取消电平
|
|
|
|
|
// 2, 0xA4, 0xA6, // 整个显示打开
|
|
|
|
|
// 1, 0xAF // 打开显示
|
|
|
|
|
//};
|
2024-06-23 05:03:24 +00:00
|
|
|
|
|
2024-06-22 03:08:31 +00:00
|
|
|
|
|
2024-06-22 06:29:51 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief OLED初始化
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Init(&oled_dev);
|
|
|
|
|
*/
|
2024-11-27 05:49:34 +00:00
|
|
|
|
void OLED_Init(OLED_T *dev);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
2024-08-29 08:46:54 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief OLED初始化
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
2024-11-27 05:49:34 +00:00
|
|
|
|
* @param cmd: [输入] OLED初始化指令表
|
|
|
|
|
* @param len: [输入] OLED初始化指令表长度
|
2024-08-29 08:46:54 +00:00
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Init(&oled_dev);
|
|
|
|
|
*/
|
2024-11-27 05:49:34 +00:00
|
|
|
|
void OLED_Init_CMD(OLED_T *dev, uint8_t *cmd, uint16_t len);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 打开OLED显示
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_ON(&oled_dev);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ON(OLED_T* dev);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 关闭OLED显示
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_OFF(&oled_dev);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_OFF(OLED_T* dev);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 打开或关闭OLED显示
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param e: [输入] true表示打开,false表示关闭
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Turn(&oled_dev, true);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_Turn(OLED_T* dev, bool e);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 刷新OLED显示
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Refresh(&oled_dev);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_Refresh(OLED_T* dev);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 设置OLED显示开关
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param e: [输入] true表示显示,false表示关闭
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_DisplayTurn(&oled_dev, true);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_DisplayTurn(OLED_T* dev, bool e);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 设置显示位置
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标
|
|
|
|
|
* @param y: [输入] Y坐标
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Set(&oled_dev, 0, 0);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_Set(OLED_T* dev, uint8_t x, uint8_t y);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 取消显示位置
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标偏移量
|
|
|
|
|
* @param y: [输入] Y坐标偏移量
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_RSet(&oled_dev, 10, 10);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_RSet(OLED_T* dev, uint8_t x, uint8_t y);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 绘制直线
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x1: [输入] 起始点X坐标
|
|
|
|
|
* @param y1: [输入] 起始点Y坐标
|
|
|
|
|
* @param x2: [输入] 结束点X坐标
|
|
|
|
|
* @param y2: [输入] 结束点Y坐标
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_DrawLine(&oled_dev, 0, 0, 20, 20);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_DrawLine(OLED_T* dev, uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
2024-06-22 11:13:18 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 在 OLED 上绘制矩形
|
|
|
|
|
* @param dev: [输入] OLED 设备指针
|
|
|
|
|
* @param x1: [输入] 矩形左上角 x 坐标
|
|
|
|
|
* @param y1: [输入] 矩形左上角 y 坐标
|
|
|
|
|
* @param x2: [输入] 矩形右下角 x 坐标
|
|
|
|
|
* @param y2: [输入] 矩形右下角 y 坐标
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_DrawRect(&oledDevice, 10, 10, 50, 30);
|
|
|
|
|
**/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_DrawRect(OLED_T* dev, uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
|
2024-06-22 11:13:18 +00:00
|
|
|
|
|
2024-06-22 06:29:51 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 绘制圆
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] 圆心X坐标
|
|
|
|
|
* @param y: [输入] 圆心Y坐标
|
|
|
|
|
* @param r: [输入] 圆半径
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_DrawCircle(&oled_dev, 30, 30, 10);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_DrawCircle(OLED_T* dev, uint8_t x, uint8_t y, uint8_t r);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 显示字符
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标
|
|
|
|
|
* @param y: [输入] Y坐标
|
|
|
|
|
* @param chr: [输入] 要显示的字符
|
|
|
|
|
* @param size1: [输入] 字体大小
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_ShowChar(&oled_dev, 0, 0, 'A', 16);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ShowChar(OLED_T* dev, uint8_t x, uint8_t y, uint8_t chr, uint8_t size1);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 显示字符串
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标
|
|
|
|
|
* @param y: [输入] Y坐标
|
|
|
|
|
* @param chr: [输入] 要显示的字符串
|
|
|
|
|
* @param size1: [输入] 字体大小
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_ShowString(&oled_dev, 0, 0, "Hello", 16);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ShowString(OLED_T* dev, uint8_t x, uint8_t y, uint8_t* chr, uint8_t size1);
|
2024-06-26 07:54:30 +00:00
|
|
|
|
#ifdef HZK_FONT
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
2024-06-23 10:03:57 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 在OLED上显示指定大小的中文字符串
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标
|
|
|
|
|
* @param y: [输入] Y坐标
|
|
|
|
|
* @param str: [输入] 中文字符串指针
|
|
|
|
|
* @return void
|
2024-06-26 07:54:30 +00:00
|
|
|
|
* @example OLED_ShowCHString(&oled_device, 0, 0, chinese_str);
|
2024-06-23 10:03:57 +00:00
|
|
|
|
**/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ShowCHString(OLED_T* dev, uint8_t x, uint8_t y, uint8_t* str);
|
2024-06-26 07:54:30 +00:00
|
|
|
|
#endif
|
2024-06-23 05:03:24 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 在OLED屏幕上显示数字
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] 数字显示的起始横坐标
|
|
|
|
|
* @param y: [输入] 数字显示的起始纵坐标
|
|
|
|
|
* @param num: [输入] 要显示的数字
|
|
|
|
|
* @param len: [输入] 数字长度
|
|
|
|
|
* @param size1: [输入] 字体大小
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_ShowNum(&oled_dev, 0, 0, 12345, 5, 12);
|
|
|
|
|
**/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ShowNum(OLED_T* dev, uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t size1);
|
2024-06-23 05:03:24 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 在OLED屏幕上显示图片
|
2024-06-26 14:57:10 +00:00
|
|
|
|
* @param dev: [输入] OLED设备结构体指针
|
|
|
|
|
* @param x0: [输入] 图片左上角x坐标
|
|
|
|
|
* @param y0: [输入] 图片左上角y坐标
|
|
|
|
|
* @param w: [输入] 图片宽度
|
|
|
|
|
* @param h: [输入] 图片高度
|
|
|
|
|
* @param bmp: [输入] 图片数据指针
|
2024-06-23 05:03:24 +00:00
|
|
|
|
* @return void
|
2024-06-26 14:57:10 +00:00
|
|
|
|
* @example OLED_ShowPic(&oled_dev, 0, 0, 128, 64, bmp_data);
|
2024-06-23 05:03:24 +00:00
|
|
|
|
**/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_ShowPic(OLED_T* dev, uint8_t x0, uint8_t y0, uint8_t w, uint8_t h, uint8_t* bmp);
|
2024-06-23 05:03:24 +00:00
|
|
|
|
|
2024-06-22 06:29:51 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 设置显示起始坐标
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param x: [输入] X坐标
|
|
|
|
|
* @param y: [输入] Y坐标
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_SPos(&oled_dev, 0, 0);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_SPos(OLED_T* dev, uint8_t x, uint8_t y);
|
2024-06-22 06:29:51 +00:00
|
|
|
|
|
2024-06-22 07:21:15 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 填充OLED显示缓冲区
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @param data: [输入] 填充数据
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_Fill(&oled_dev, 0xFF);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_Fill(OLED_T* dev, uint8_t data);
|
2024-06-22 07:21:15 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 清空OLED显示缓冲区
|
|
|
|
|
* @param dev: [输入] OLED设备指针
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_CLS(&oled_dev);
|
|
|
|
|
*/
|
2024-08-29 08:46:54 +00:00
|
|
|
|
void OLED_CLS(OLED_T* dev);
|
2024-06-22 07:21:15 +00:00
|
|
|
|
|
2024-06-26 07:54:30 +00:00
|
|
|
|
#ifdef LVGL_FONT
|
|
|
|
|
|
2024-09-16 14:51:12 +00:00
|
|
|
|
#include "lvgl_font.h"
|
2024-06-25 10:17:14 +00:00
|
|
|
|
|
2024-06-26 07:54:30 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 在OLED上显示字符串
|
|
|
|
|
* @param dev: [输入] OLED设备结构体指针
|
|
|
|
|
* @param font: [输入] 字体信息
|
|
|
|
|
* @param s: [输入] 要显示的字符串
|
|
|
|
|
* @param x: [输入] 字符串左上角 x 坐标
|
|
|
|
|
* @param y: [输入] 字符串左上角 y 坐标
|
|
|
|
|
* @return void
|
|
|
|
|
* @example OLED_DisplayString(&oled_device, &font_arial_16, "Hello World", 10, 20);
|
|
|
|
|
**/
|
2024-06-25 10:17:14 +00:00
|
|
|
|
void OLED_DisplayString(OLED_T *dev, const lv_font_t *font, uint8_t *s, uint16_t x, uint16_t y);
|
|
|
|
|
|
2024-06-26 07:54:30 +00:00
|
|
|
|
#endif
|
2024-06-22 03:08:31 +00:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#endif //HW_LIB_OLED_H
|