K1Guitar/device/TM1629D/Drv_TM1629D_Key_Led.c

803 lines
26 KiB
C
Raw Normal View History

/*
* @Author: CTW
* @Date: 2025-11-07 14:37:55
* @FilePath: \PhoenixSMGT_Testproject\Drivers\TM1629D\Drv_TM1629D_Key_Led.c
* @note: STM32 HAL AT32F403AGPIO
* - HAL_GPIO_WritePin/ReadPin/Init -> at32f403a_407 GPIO
* - Delay_us / Delay_ms ->
*/
#include "Drv_TM1629D_Key_Led.h"
#include <stddef.h>
/* ================= 底层原语AT32 GPIO ================= */
#define TM1629D_DIO_H() gpio_bits_set(TM1629D_DIO_PORT, TM1629D_DIO_PIN)
#define TM1629D_DIO_L() gpio_bits_reset(TM1629D_DIO_PORT, TM1629D_DIO_PIN)
#define TM1629D_CLK_H() gpio_bits_set(TM1629D_CLK_PORT, TM1629D_CLK_PIN)
#define TM1629D_CLK_L() gpio_bits_reset(TM1629D_CLK_PORT, TM1629D_CLK_PIN)
#define TM1629D_STB_H() gpio_bits_set(TM1629D_STB_PORT, TM1629D_STB_PIN)
#define TM1629D_STB_L() gpio_bits_reset(TM1629D_STB_PORT, TM1629D_STB_PIN)
/* 忙等延时:约 1usNOP 循环,不依赖 SysTick/RTOS */
static void TM1629D_Delay1us(void)
{
volatile uint32_t i = 24; /* 240MHz 下约 1us可实测微调 */
while (i--) __NOP();
}
/* DIO 引脚切换为输出模式(推挽) */
static void TM1629D_DIO_Output(void)
{
gpio_init_type g;
gpio_default_para_init(&g);
g.gpio_mode = GPIO_MODE_OUTPUT;
g.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
g.gpio_pull = GPIO_PULL_NONE;
g.gpio_pins = TM1629D_DIO_PIN;
gpio_init(TM1629D_DIO_PORT, &g);
}
/* DIO 引脚切换为输入模式(读按键) */
static void TM1629D_DIO_Input(void)
{
gpio_init_type g;
gpio_default_para_init(&g);
g.gpio_mode = GPIO_MODE_INPUT;
g.gpio_pull = GPIO_PULL_NONE;
g.gpio_pins = TM1629D_DIO_PIN;
gpio_init(TM1629D_DIO_PORT, &g);
}
/* GPIO初始化 */
void TM1629D_Key_LED_Init(void)
{
gpio_init_type g;
/* 使能 GPIOB / GPIOC 时钟 */
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
/* STB(PB11)、CLK(PB0)、DIO(PC4):推挽输出,初始拉高 */
gpio_default_para_init(&g);
g.gpio_mode = GPIO_MODE_OUTPUT;
g.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
g.gpio_pull = GPIO_PULL_NONE;
g.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
g.gpio_pins = TM1629D_STB_PIN;
gpio_init(TM1629D_STB_PORT, &g);
g.gpio_pins = TM1629D_CLK_PIN;
gpio_init(TM1629D_CLK_PORT, &g);
g.gpio_pins = TM1629D_DIO_PIN;
gpio_init(TM1629D_DIO_PORT, &g);
TM1629D_STB_H();
TM1629D_CLK_H();
TM1629D_DIO_H();
// 清寄存器
TM1629D_AllLedOff();
// 配置TM1629D为“普通显示模式”无译码8个GRID
TM1629D_STB_L();
TM1629D_Delay1us();
TM1629D_SendByte(0x40); // 普通模式命令文档1-46
TM1629D_STB_H();
TM1629D_Delay1us();
// 配置亮度(示例:中亮度)
TM1629D_STB_L();
TM1629D_Delay1us();
TM1629D_SendByte(0x8F); // 0x88最暗~0x8F最亮
TM1629D_STB_H();
TM1629D_Delay1us();
TM1629D_AllLedOn(COLOR_OTHER);
TM1629D_UpdateDisplay(0);
}
// 发送1字节数据CLK上升沿锁存
uint8_t TM1629D_SendByte(uint8_t dat)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
TM1629D_CLK_L(); // CLK低
TM1629D_Delay1us(); // 满足最小脉冲宽度
// 输出当前bit从低位开始
if (dat & 0x01)
{
TM1629D_DIO_H();
}
else
{
TM1629D_DIO_L();
}
TM1629D_CLK_H(); // CLK高锁存
TM1629D_Delay1us();
dat >>= 1; // 移至下一位
}
return 0;
}
// 接收1字节数据CLK上升沿读取
uint8_t TM1629D_RecvByte(void) {
uint8_t i, dat = 0;
// DIO切换为输入
TM1629D_DIO_Input();
for (i = 0; i < 8; i++)
{
TM1629D_CLK_L(); // CLK低
TM1629D_Delay1us();
TM1629D_CLK_H(); // CLK高读取
TM1629D_Delay1us();
if (gpio_input_data_bit_read(TM1629D_DIO_PORT, TM1629D_DIO_PIN) == SET)
dat |= (0x01 << i);
}
// DIO切换回推挽输出
TM1629D_DIO_Output();
return dat;
}
// 读取4字节键扫数据keyBuf[0]=BYTE1, keyBuf[1]=BYTE2...keyBuf[3]=BYTE4
void TM1629D_ReadKeyData(uint8_t *keyBuf) {
if (keyBuf == NULL) return;
TM1629D_STB_L(); // STB拉低初始化
TM1629D_Delay1us(); // 满足STB最小低电平时间
TM1629D_SendByte(0x42); // 发送读键命令
TM1629D_Delay1us();
TM1629D_Delay1us(); // 等待Twait≥2μs
// 按顺序读取4字节
keyBuf[0] = TM1629D_RecvByte();
keyBuf[1] = TM1629D_RecvByte();
keyBuf[2] = TM1629D_RecvByte();
keyBuf[3] = TM1629D_RecvByte();
TM1629D_STB_H(); // STB拉高结束
}
// 按键映射表
static const sChordKeyMap m_sChordKeymap[] = {
// 解析BYTE1keyBuf[0]
{0, 0x02, KEY_T1}, {0, 0x04, KEY_T2}, {0, 0x08, KEY_T3},
{0, 0x20, KEY_T4}, {0, 0x40, KEY_T5}, {0, 0x80, KEY_T6},
{0, 0x01, KEY_T22}, {0, 0x10, KEY_T23},
// 解析BYTE2keyBuf[1]
{1, 0x02, KEY_T7}, {1, 0x04, KEY_T8}, {1, 0x08, KEY_T9},
{1, 0x20, KEY_T10}, {1, 0x40, KEY_T11}, {1, 0x80, KEY_T12},
// 解析BYTE3keyBuf[2]
{2, 0x02, KEY_T13}, {2, 0x04, KEY_T14}, {2, 0x08, KEY_T15},
{2, 0x20, KEY_T16}, {2, 0x40, KEY_T17}, {2, 0x80, KEY_T18},
// 解析BYTE4keyBuf[3]
{3, 0x02, KEY_T19}, {3, 0x04, KEY_T20}, {3, 0x08, KEY_T21},
};
// 获取按键状态
#define KEY_MAP_LEN (KEY_NUM - 1)
Key_TypeDef TM1629D_GetKey(void)
{
uint8_t keyBuf[4] = {0};
TM1629D_ReadKeyData(keyBuf); // 读取原始按键数据(与原逻辑一致)
// 遍历映射表匹配按键C语言循环写法
for (uint8_t i = 0; i < KEY_MAP_LEN; i++)
{
const sChordKeyMap* map = &m_sChordKeymap[i]; // 显式结构体指针类型替代auto
// 检查对应bit是否置位
if (keyBuf[map->buf_idx] & map->mask)
{
return map->key; // 匹配到按键,返回
}
}
return KEY_NONE; // 无按键按下
}
/**
* @brief GRID和SEG的LED状态
* @param gridGRID编号0~8
* @param segSEG编号0~8
* @param on1=0=
*/
// GRID0~8对应的HL低字节和HU高字节地址共9个GRID每个2字节
// grid_addr[grid][0] = HL地址grid_addr[grid][1] = HU地址
const uint8_t grid_addr[8][2] = {
{0xC0, 0xC1}, // GRID1
{0xC2, 0xC3}, // GRID2
{0xC4, 0xC5}, // GRID3
{0xC6, 0xC7}, // GRID4
{0xC8, 0xC9}, // GRID5
{0xCA, 0xCB}, // GRID6
{0xCC, 0xCD}, // GRID7
{0xCE, 0xCF}, // GRID8
};
// 显示缓存数组对应GRID1~8的SEG1~8缓存情况
// 初始全为0所有LED熄灭
static uint8_t grid_Buf[8] = {
0x00, // GRID1
0x00, // GRID2
0x00, // GRID3
0x00, // GRID4
0x00, // GRID5
0x00, // GRID6
0x00, // GRID7
0x00, // GRID8
};
void TM1629D_SetGridSeg(uint8_t grid, uint8_t seg, uint8_t on)
{
if (grid >= 8 || seg >= 8)
{
return; // 越界检查
}
if (seg <= 3)
{ // SEG1~4对应HL低字节bit0~3
uint8_t bit = 0;
switch(seg)
{
case 0: bit = SEG1_HL_BIT; break;
case 1: bit = SEG2_HL_BIT; break;
case 2: bit = SEG3_HL_BIT; break;
case 3: bit = SEG4_HL_BIT; break;
}
if (on)
{
grid_Buf[grid] |= bit; // 置位(点亮)
}
else
{
grid_Buf[grid] &= ~bit; // 清零(熄灭)
}
}
else
{ // SEG5~8对应HU高字节bit0~3
uint8_t bit = 0;
switch(seg)
{
case 4: bit = SEG5_HU_BIT; break;
case 5: bit = SEG6_HU_BIT; break;
case 6: bit = SEG7_HU_BIT; break;
case 7: bit = SEG8_HU_BIT; break;
}
if (on)
{
grid_Buf[grid] |= bit; // 置位(点亮)
}
else
{
grid_Buf[grid] &= ~bit; // 清零(熄灭)
}
}
}
// 更新显示将缓存数据写入TM1629D -- u8LH = 0x00低位0x01高位
void TM1629D_UpdateDisplay(uint8_t u8LH)
{
uint8_t grid;
TM1629D_STB_L();
TM1629D_Delay1us();
for (grid = 0; grid < 8; grid++)
{
if(u8LH)
{//高位
TM1629D_SendByte(grid_addr[grid][1]); // 写地址
}
else
{//低位
TM1629D_SendByte(grid_addr[grid][0]); // 写地址
}
TM1629D_SendByte(grid_Buf[grid]);
}
TM1629D_STB_H();
TM1629D_Delay1us();
}
// 向指定地址写入1字节数据(单独调用调试用)
void TM1629D_WriteDisplayByte(uint8_t addr, uint8_t data)
{
TM1629D_STB_L();
TM1629D_Delay1us();
TM1629D_SendByte(addr); // 发送寄存器地址
TM1629D_SendByte(data); // 发送数据
TM1629D_STB_H();
TM1629D_Delay1us();
}
/**
* @brief LED的指定颜色/
* @param ledLED编号LED_L1~LED_L8
* @param colorCOLOR_R/COLOR_G/COLOR_B/COLOR_OTHER
* @param on1=0=R/G/B有效OTHER忽略此参数
*/
//void TM1629D_ControlLed(LedNum_TypeDef led, LedColor_TypeDef color, uint8_t on)
//{
// // 根据LED编号和颜色映射到对应的GRID和SEG
// switch(led)
// {
// case LED_L1: // L1SEG1 + GRID1(R)/GRID2(G)/GRID3(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(0, 0, 1);break; // GRID1+SEG1
// case LED_COLOR_G: TM1629D_SetGridSeg(1, 0, 1);break; // GRID2+SEG1
// case LED_COLOR_B: TM1629D_SetGridSeg(2, 0, 1);break; // GRID3+SEG1
// case COLOR_OTHER: // 关闭L1所有颜色,方便加入其它颜色的预留接口
// {
// TM1629D_SetGridSeg(0, 0, 0);
// TM1629D_SetGridSeg(1, 0, 0);
// TM1629D_SetGridSeg(2, 0, 0);
// }break;
//
// }
// break;
//
// case LED_L2: // L2SEG1 + GRID4(R)/GRID5(G)/GRID6(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(3, 0, 1);break; // GRID4+SEG1
// case LED_COLOR_G: TM1629D_SetGridSeg(4, 0, 1);break; // GRID5+SEG1
// case LED_COLOR_B: TM1629D_SetGridSeg(5, 0, 1);break; // GRID6+SEG1
// case COLOR_OTHER: // 关闭L2所有颜色
// {
// TM1629D_SetGridSeg(3, 0, 0);
// TM1629D_SetGridSeg(4, 0, 0);
// TM1629D_SetGridSeg(5, 0, 0);
// }break;
// }
// break;
//
// case LED_L3: // L3SEG2 + GRID1(R)/GRID2(G)/GRID3(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(0, 1, 1);break; // GRID1+SEG2
// case LED_COLOR_G: TM1629D_SetGridSeg(1, 1, 1);break; // GRID2+SEG2
// case LED_COLOR_B: TM1629D_SetGridSeg(2, 1, 1);break; // GRID3+SEG2
// case COLOR_OTHER: // 关闭L3所有颜色
// {
// TM1629D_SetGridSeg(0, 1, 0);
// TM1629D_SetGridSeg(1, 1, 0);
// TM1629D_SetGridSeg(2, 1, 0);
// }break;
// }
// break;
//
// case LED_L4: // L4SEG2 + GRID4(R)/GRID5(G)/GRID6(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(3, 1, 1);break; // GRID4+SEG2
// case LED_COLOR_G: TM1629D_SetGridSeg(4, 1, 1);break; // GRID5+SEG2
// case LED_COLOR_B: TM1629D_SetGridSeg(5, 1, 1);break; // GRID6+SEG2
// case COLOR_OTHER: // 关闭L4所有颜色
// {
// TM1629D_SetGridSeg(3, 1, 0);
// TM1629D_SetGridSeg(4, 1, 0);
// TM1629D_SetGridSeg(5, 1, 0);
// }break;
// }
// break;
//
// case LED_L5: // L5SEG3 + GRID1(R)/GRID2(G)/GRID3(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(0, 2, 1);break; // GRID1+SEG3
// case LED_COLOR_G: TM1629D_SetGridSeg(1, 2, 1);break; // GRID2+SEG3
// case LED_COLOR_B: TM1629D_SetGridSeg(2, 2, 1);break; // GRID3+SEG3
// case COLOR_OTHER: // 关闭L5所有颜色
// {
// TM1629D_SetGridSeg(0, 2, 0);
// TM1629D_SetGridSeg(1, 2, 0);
// TM1629D_SetGridSeg(2, 2, 0);
// }break;
// }
// break;
//
// case LED_L6: // L6SEG3 + GRID4(R)/GRID5(G)/GRID6(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(3, 2, 1);break; // GRID4+SEG3
// case LED_COLOR_G: TM1629D_SetGridSeg(4, 2, 1);break; // GRID5+SEG3
// case LED_COLOR_B: TM1629D_SetGridSeg(5, 2, 1);break; // GRID6+SEG3
// case COLOR_OTHER: // 关闭L6所有颜色
// {
// TM1629D_SetGridSeg(3, 2, 0);
// TM1629D_SetGridSeg(4, 2, 0);
// TM1629D_SetGridSeg(5, 2, 0);
// }break;
// }
// break;
//
// case LED_L7: // L7SEG4 + GRID1(R)/GRID2(G)/GRID3(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(0, 3, 1);break; // GRID1+SEG4
// case LED_COLOR_G: TM1629D_SetGridSeg(1, 3, 1);break; // GRID2+SEG4
// case LED_COLOR_B: TM1629D_SetGridSeg(2, 3, 1);break; // GRID3+SEG4
// case COLOR_OTHER: // 关闭L7所有颜色
// {
// TM1629D_SetGridSeg(0, 3, 0);
// TM1629D_SetGridSeg(1, 3, 0);
// TM1629D_SetGridSeg(2, 3, 0);
// }break;
// }
// break;
//
// case LED_L8: // L8SEG4 + GRID4(R)/GRID5(G)/GRID6(B)
// switch(color) {
// case LED_COLOR_R: TM1629D_SetGridSeg(3, 3, 1);break; // GRID4+SEG4
// case LED_COLOR_G: TM1629D_SetGridSeg(4, 3, 1);break; // GRID5+SEG4
// case LED_COLOR_B: TM1629D_SetGridSeg(5, 3, 1);break; // GRID6+SEG4
// case COLOR_OTHER: // 关闭L8所有颜色
// {
// TM1629D_SetGridSeg(3, 3, 0);
// TM1629D_SetGridSeg(4, 3, 0);
// TM1629D_SetGridSeg(5, 3, 0);
// }break;
// }
// break;
//
// default: break;
// }
//}
void TM1629D_ControlLed(LedNum_TypeDef led, LedColor_TypeDef color, uint8_t on)
{
// 根据LED编号和颜色映射到对应的GRID和SEG
switch(led)
{
case LED_L1: // L1SEG1
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(0, 0, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(1, 0, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(2, 0, on);
break;
case LED_COLOR_YELL: // 红+绿同时
TM1629D_SetGridSeg(0, 0, on);
TM1629D_SetGridSeg(1, 0, on);
break;
case LED_COLOR_PURP: // 红+紫
TM1629D_SetGridSeg(0, 0, on);
TM1629D_SetGridSeg(2, 0, on);
break;
case LED_COLOR_CYA: // 绿+蓝
TM1629D_SetGridSeg(1, 0, on);
TM1629D_SetGridSeg(2, 0, on);
break;
case LED_COLOR_WHITE: // 三色全开
TM1629D_SetGridSeg(0, 0, on);
TM1629D_SetGridSeg(1, 0, on);
TM1629D_SetGridSeg(2, 0, on);
break;
case COLOR_OTHER: // 关闭L1所有颜色
{
TM1629D_SetGridSeg(0, 0, 0);
TM1629D_SetGridSeg(1, 0, 0);
TM1629D_SetGridSeg(2, 0, 0);
}break;
}
break;
case LED_L2: // L2SEG1
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(3, 0, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(4, 0, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(5, 0, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(3, 0, on);
TM1629D_SetGridSeg(4, 0, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(3, 0, on);
TM1629D_SetGridSeg(5, 0, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(4, 0, on);
TM1629D_SetGridSeg(5, 0, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(3, 0, on);
TM1629D_SetGridSeg(4, 0, on);
TM1629D_SetGridSeg(5, 0, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(3, 0, 0);
TM1629D_SetGridSeg(4, 0, 0);
TM1629D_SetGridSeg(5, 0, 0);
}break;
}
break;
case LED_L3: // L3SEG2
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(0, 1, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(1, 1, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(2, 1, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(0, 1, on);
TM1629D_SetGridSeg(1, 1, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(0, 1, on);
TM1629D_SetGridSeg(2, 1, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(1, 1, on);
TM1629D_SetGridSeg(2, 1, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(0, 1, on);
TM1629D_SetGridSeg(1, 1, on);
TM1629D_SetGridSeg(2, 1, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(0, 1, 0);
TM1629D_SetGridSeg(1, 1, 0);
TM1629D_SetGridSeg(2, 1, 0);
}break;
}
break;
case LED_L4: // L4SEG2
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(3, 1, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(4, 1, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(5, 1, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(3, 1, on);
TM1629D_SetGridSeg(4, 1, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(3, 1, on);
TM1629D_SetGridSeg(5, 1, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(4, 1, on);
TM1629D_SetGridSeg(5, 1, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(3, 1, on);
TM1629D_SetGridSeg(4, 1, on);
TM1629D_SetGridSeg(5, 1, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(3, 1, 0);
TM1629D_SetGridSeg(4, 1, 0);
TM1629D_SetGridSeg(5, 1, 0);
}break;
}
break;
case LED_L5: // L5SEG3
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(0, 2, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(1, 2, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(2, 2, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(0, 2, on);
TM1629D_SetGridSeg(1, 2, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(0, 2, on);
TM1629D_SetGridSeg(2, 2, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(1, 2, on);
TM1629D_SetGridSeg(2, 2, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(0, 2, on);
TM1629D_SetGridSeg(1, 2, on);
TM1629D_SetGridSeg(2, 2, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(0, 2, 0);
TM1629D_SetGridSeg(1, 2, 0);
TM1629D_SetGridSeg(2, 2, 0);
}break;
}
break;
case LED_L6: // L6SEG3
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(3, 2, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(4, 2, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(5, 2, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(3, 2, on);
TM1629D_SetGridSeg(4, 2, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(3, 2, on);
TM1629D_SetGridSeg(5, 2, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(4, 2, on);
TM1629D_SetGridSeg(5, 2, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(3, 2, on);
TM1629D_SetGridSeg(4, 2, on);
TM1629D_SetGridSeg(5, 2, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(3, 2, 0);
TM1629D_SetGridSeg(4, 2, 0);
TM1629D_SetGridSeg(5, 2, 0);
}break;
}
break;
case LED_L7: // L7SEG4
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(0, 3, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(1, 3, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(2, 3, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(0, 3, on);
TM1629D_SetGridSeg(1, 3, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(0, 3, on);
TM1629D_SetGridSeg(2, 3, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(1, 3, on);
TM1629D_SetGridSeg(2, 3, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(0, 3, on);
TM1629D_SetGridSeg(1, 3, on);
TM1629D_SetGridSeg(2, 3, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(0, 3, 0);
TM1629D_SetGridSeg(1, 3, 0);
TM1629D_SetGridSeg(2, 3, 0);
}break;
}
break;
case LED_L8: // L8SEG4
switch(color) {
case LED_COLOR_R:
TM1629D_SetGridSeg(3, 3, on);
break;
case LED_COLOR_G:
TM1629D_SetGridSeg(4, 3, on);
break;
case LED_COLOR_B:
TM1629D_SetGridSeg(5, 3, on);
break;
case LED_COLOR_YELL:
TM1629D_SetGridSeg(3, 3, on);
TM1629D_SetGridSeg(4, 3, on);
break;
case LED_COLOR_PURP:
TM1629D_SetGridSeg(3, 3, on);
TM1629D_SetGridSeg(5, 3, on);
break;
case LED_COLOR_CYA:
TM1629D_SetGridSeg(4, 3, on);
TM1629D_SetGridSeg(5, 3, on);
break;
case LED_COLOR_WHITE:
TM1629D_SetGridSeg(3, 3, on);
TM1629D_SetGridSeg(4, 3, on);
TM1629D_SetGridSeg(5, 3, on);
break;
case COLOR_OTHER:
{
TM1629D_SetGridSeg(3, 3, 0);
TM1629D_SetGridSeg(4, 3, 0);
TM1629D_SetGridSeg(5, 3, 0);
}break;
}
break;
default: break;
}
}
/**
* @brief L1~L8全亮R/G/B
* @param colorCOLOR_R/COLOR_G/COLOR_B
*/
void TM1629D_AllLedOn(LedColor_TypeDef color)
{
// 仅处理R/G/B三种颜色OTHER不执行
if (color >= COLOR_OTHER) return;
// 循环控制L1~L8点亮指定颜色
TM1629D_ControlLed(LED_L1, color, 1);
TM1629D_ControlLed(LED_L2, color, 1);
TM1629D_ControlLed(LED_L3, color, 1);
TM1629D_ControlLed(LED_L4, color, 1);
TM1629D_ControlLed(LED_L5, color, 1);
TM1629D_ControlLed(LED_L6, color, 1);
TM1629D_ControlLed(LED_L7, color, 1);
TM1629D_ControlLed(LED_L8, color, 1);
return ;
}
/**
* @brief L1~L8全灭
*/
void TM1629D_AllLedOff(void)
{
// 循环控制L1~L8关闭所有颜色使用COLOR_OTHER
TM1629D_ControlLed(LED_L1, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L2, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L3, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L4, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L5, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L6, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L7, COLOR_OTHER, 0);
TM1629D_ControlLed(LED_L8, COLOR_OTHER, 0);
return ;
}