102 lines
4.6 KiB
C
102 lines
4.6 KiB
C
#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 |