/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : ht16k33_dot_matrix.h * @brief : 屏幕显示 * @version : 1.0 * @changelog : version 1.0 初始版本 2025.11.13 ****************************************************************************** * @attention * * Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China * THIS SOFTWARE is licensed under the Mulan PSL v1. * can use this software according to the terms and conditions of the Mulan PSL v1. * You may obtain a copy of Mulan PSL v1 at: * http://license.coscl.org.cn/MulanPSL * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR * PURPOSE. * See the Mulan PSL v1 for more details. * ****************************************************************************** */ /* USER CODE END Header */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __OXG_8F_10W_DISPLAY_H #define __OXG_8F_10W_DISPLAY_H #ifdef __cplusplus extern "C" { #endif #include #include "fm33lg0xx_fl.h" #include "fm33lg0xx_queue.h" #include "fm33lg0xx_event.h" /************************** 硬件层接口定义 *************************/ #define HT16K33_SDA_GPIO_GROUP GPIOC #define HT16K33_SDA_GPIO_PIN FL_GPIO_PIN_11 #define HT16K33_SCL_GPIO_GROUP GPIOC #define HT16K33_SCL_GPIO_PIN FL_GPIO_PIN_12 /************************** 软件层可配置项定义 *************************/ // HT16K33 28脚版本I2C地址(A0~A2悬空时为0x70,可通过引脚配置修改) #define HT16K33_ADDR 0x70 << 1 // I2C地址左移1位(包含读写位) // 核心命令定义 #define HT16K33_CMD_SYSTEM_ON 0x21 // 系统开启(振荡器启动) #define HT16K33_CMD_SYSTEM_OFF 0x20 // 系统关闭(待机模式) #define HT16K33_CMD_DISPLAY_ON 0x81 // 显示开启(D=1,闪烁关闭) #define HT16K33_CMD_DISPLAY_OFF 0x80 // 显示关闭 #define HT16K33_CMD_BLINK_0_5HZ 0x83 // 闪烁频率0.5Hz(B1=1,B0=1) #define HT16K33_CMD_BLINK_1HZ 0x82 // 闪烁频率1Hz(B1=1,B0=0) #define HT16K33_CMD_BLINK_2HZ 0x81 // 闪烁频率2Hz(B1=0,B0=1) #define HT16K33_CMD_DIMMING_MAX 0xEF // 最大亮度(16/16占空比) #define HT16K33_CMD_INT_ENABLE 0xA9 // INT引脚使能(active-high) #define HT16K33_CMD_DISP_ADDR 0x00 // 显示RAM地址指针起始(0x00) #define HT16K33_CMD_ADDR_KEY 0x40 // 按键RAM地址指针起始(0x40) #define DISP_BUFFER_SIZE (16) #define SEG_TABLE_SIZE (20) /************************** 显示数据存储格式定义 *************************/ /** * @brief 复杂子结构体:显示模式及对应数据 * 用于控制当前界面显示累时或氧浓度 */ typedef struct { uint32_t work_hours; // 累时模式下的工作小时数(0-19999h) uint32_t work_minutes; // 获取累时分钟数 uint32_t work_seconds; // 工作秒数 uint16_t oxygen_val; // 氧浓度模式下的浓度值(0-999对应0%-99.9%) uint16_t flow_val; // 流量数据用于ui界面刷新时检测LL故障 struct{ uint8_t num1_is_show; uint8_t first_8_index; uint8_t second_8_index; uint8_t third_8_index; uint8_t fourth_8_index; uint8_t carlib_code; }seg_index; } DisplayContent; /** * @brief 界面元素状态结构体(记录各类指示灯及显示内容) */ typedef struct { uint8_t ok_led_show : 1; // OK灯是否显示(1:显示 0:不显示) uint8_t alarm_led_show : 1; // 报警灯是否显示(1:显示 0:不显示) uint8_t clean_filter_show : 1; // 清洁滤网提示是否显示(1:显示 0:不显示) uint8_t replace_box_show : 1; // 更换过滤盒提示是否显示(1:显示 0:不显示) uint8_t total_time_chn : 1; // 累时(包含中文和h) 中文是否显示(1:显示 0:不显示) uint8_t oxg_concentration_chn : 1; // 浓度的中文(包含中文 % 和.)是否显示(1:显示 0:不显示) // uint8_t on_left_num_1 : 1; // 最左侧的数字1是否显示(1:显示 0:不显示) DisplayContent disp_info; // 显示模式及对应数据(子结构体) } UIElements; /************************** 宏函数定义 *************************/ #define HT16K33_SDA_CLEAR() FL_GPIO_ResetOutputPin(HT16K33_SDA_GPIO_GROUP,HT16K33_SDA_GPIO_PIN); #define HT16K33_SDA_SET() FL_GPIO_SetOutputPin(HT16K33_SDA_GPIO_GROUP,HT16K33_SDA_GPIO_PIN); #define HT16K33_SCL_CLEAR() FL_GPIO_ResetOutputPin(HT16K33_SCL_GPIO_GROUP,HT16K33_SCL_GPIO_PIN); #define HT16K33_SCL_SET() FL_GPIO_SetOutputPin(HT16K33_SCL_GPIO_GROUP,HT16K33_SCL_GPIO_PIN); /************************** 提供给外部的函数及变量 *************************/ extern UIElements ui; extern uint8_t ht16k33_disp_buff[DISP_BUFFER_SIZE]; void ht16k33_ui_init(UIElements* p_ui); // 初始化屏幕 void ht16k33_chip_init(void); // 放在初始化中-初始化芯片 开启芯片时钟 uint8_t ht16k33_send_buffer(uint8_t* disp_buffer); // 放在初始化中-下发显示缓存 void ht16k33_refresh_task(void); // 根据消息队列内容修改变量ui void ht16k33_refresh_screen(void); // 放到ui任务最后《先初始化屏幕-再下发计算后的缓存》根据ui变量刷新屏幕显示内容 #ifdef __cplusplus } #endif #endif /* __OXG_8F_10W_DISPLAY_H */ /************************ (C) COPYRIGHT Yuwell *****END OF FILE****/