#ifndef __KT_LED7_H__ #define __KT_LED7_H__ #include "system/includes.h" #include "kt.h" /* * ============================================================================= * kt_led7 架构说明(与产品功能条目 L7~L14 对应) * ============================================================================= * * 硬件层 * - 3 位共阴/动态扫描 + 2 个小数点,6 根位选/公共线 + 段线,由 6 个 GPIO 分时拉低选通 * - 段逻辑与 PCB 走线存在交叉,逻辑段 A~G/DP 经映射后写入显示缓冲(见 kt_led7.c 注释) * * 时基层 * - 扫描回调 kt_led7_scan 由 usr_timer(sys_s_hi_timer_add,约 2ms)触发,6 相轮转完成一轮刷新 * * 数据层 * - 显示缓冲:每位 1 字节段码 + dp1/dp2;业务侧只写“逻辑段码”,扫描里做线序映射 * * 策略层(kt_led7_show_* 入参) * - show_time:显示保持时间;urgent:高优先级插入;闪烁/抢占规则见下表 L13 * * ----------------------------------------------------------------------------- * 功能条目 L7~L14(与 kt.h 中风扇/空调/灯光/电量等业务一致) * ----------------------------------------------------------------------------- * L7 动态扫描显示:分时选通,避免常亮串扰(扫描状态机在 kt_led7_scan) * L8 字符集:数字 0~9 + 字母(用于前缀 L / F / C 及 AC 等缩写) * L9 前风扇状态可视化:与「L-0~L-6」一致,对应 kt_fan_ac 前风扇档位 fan_level_0~6 * L10 后风扇状态可视化:与「F-0~F-6」一致,对应后风扇档位 * L11 左右风扇状态可视化:与「C-0~C-6」一致,对应左右风扇档位 * L12 空调状态可视化:与「AC0 / AC1 / AC2」一致,对应断续/连续/关闭 * L13 显示策略:紧急插入(urgent)、可编程显示时长(show_time)、闪烁(dp/全闪)、 * 高优先级打断后低优先级计时暂停不清零(见本文件历史注释) * L14 联动:USB 插拔电量提示、LED 灯光模式等仅语音/灯控时数码管可关闭或让路给 L13 高优先级条 * * 调用关系(建议) * - 档位变更:kt_fan_level_change() → 业务调用 kt_led7_show_string / kt_led7_show_number 更新缓冲 * - 初始化:kt_boot_init / kt_init 路径中调用 kt_led7_init() 注册扫描定时器 * ============================================================================= */ /** * 脚位:脚 N = led7_pin[N-1],对应 IO_PORTC_0(N-1)(脚1=PC0 … 脚6=PC5)。 * 「XHYL」= 该扫描相内脚 X 高、脚 Y 低(与 kt_led7_scan 中 PINx_L/H 一致)。 * * 下表为实测;「物理段A~G」与缓冲区里的 LED_A~G **不是**一一同名,同一物理段可能落在 * b[0..2]&LED_x 的不同 x 上。B2 全段与代码分支对应已核对并写在 kt_led7.c kt_led7_scan(); * B0/B1 各段与每个 if(b[0|1|2]&LED_*) 的逐项注释也在该函数内(与上表同一编号)。 * * B2(b[2],百位)实测: * A:2H3L B:2H4L C:5H2L D:2H6L E:2H5L F:3H2L G:4H2L DP:2H1L * B1(b[1],十位)实测: * A:5H4L B:3H5L C:4H5L D:3H4L E:6H3L F:4H3L G:5H3L DP:3H1L * B0(b[0],个位)实测: * A:1H6L B:3H6L C:5H6L D:6H4L E:4H6L F:6H5L G:1H5L DP:NONE */ /** * 动态数码管扫描模块(实现见上 L7~L14) * 用于显示数字和字符 * 支持紧急插入显示(高优先级显示) * 支持闪烁显示 * 支持各种显示时间设置 * 高优先级显示打断低优先级显示后,低优先级时间不清零,继续计数 */ #define LED_A BIT(0) #define LED_B BIT(1) #define LED_C BIT(2) #define LED_D BIT(3) #define LED_E BIT(4) #define LED_F BIT(5) #define LED_G BIT(6) #define LED_H BIT(7) struct led7_pin6 { u8 pin[6]; }; void kt_led7_init(void); /** 正常电量显示:从当前时刻起再显示 60s(与临时显示结束后的行为一致) */ void kt_led7_battery_show_restart(void); /** * 临时显示(高优先级):打断当前电量或上一次临时显示;sec 为持续秒数,0 按 1 秒处理。 */ void kt_led7_temp_show_number(u16 number, u32 sec); void kt_led7_temp_show_string(const u8 *str, u32 sec); /** * 临时显示:show_time 为持续秒数;urgent 预留(当前与 temp 等同,均抢占)。 */ void kt_led7_show_number(u32 show_time, u8 urgent, u16 number, u8 dp1, u8 dp2); void kt_led7_show_string(u32 show_time, u8 urgent, const u8 *str, u8 dp1, u8 dp2); /** 音量提示:三位数码管显示 U + 两位数字(如 U15),表示「U-音量」,持续 show_time 秒 */ void kt_led7_show_u_volume(u8 vol_level, u32 show_time); #endif