/* * @Author: CTW * @Date: 2025-11-07 14:37:14 * @FilePath: \PhoenixSMGT_Testproject\Drivers\TM1629D\Drv_TM1629D_Key_Led.h * @note: 从 STM32 HAL 库移植到 AT32F403A,软件模拟时序(GPIO 位翻转) */ #ifndef __DRV_TM1629D_KEY_LED_H #define __DRV_TM1629D_KEY_LED_H #include #include "at32f403a_407.h" // 引脚定义 #define TM1629D_DIO_PIN GPIO_PINS_4 #define TM1629D_DIO_PORT GPIOC #define TM1629D_CLK_PIN GPIO_PINS_0 #define TM1629D_CLK_PORT GPIOB #define TM1629D_STB_PIN GPIO_PINS_11 #define TM1629D_STB_PORT GPIOB // 显示寄存器地址宏(GRIDx的HL和HU地址) #define GRID1_HL_ADDR 0xC0 #define GRID1_HU_ADDR 0xC1 #define GRID2_HL_ADDR 0xC2 #define GRID2_HU_ADDR 0xC3 #define GRID3_HL_ADDR 0xC4 #define GRID3_HU_ADDR 0xC5 #define GRID4_HL_ADDR 0xC6 #define GRID4_HU_ADDR 0xC7 #define GRID5_HL_ADDR 0xC8 #define GRID5_HU_ADDR 0xC9 #define GRID6_HL_ADDR 0xCA #define GRID6_HU_ADDR 0xCB #define GRID7_HL_ADDR 0xCC #define GRID7_HU_ADDR 0xCD #define GRID8_HL_ADDR 0xCE #define GRID8_HU_ADDR 0xCF // 按键状态枚举 typedef enum { KEY_NONE = 0, KEY_T1, KEY_T2, KEY_T3, KEY_T4, KEY_T5, KEY_T6, KEY_T7, KEY_T8, KEY_T9, KEY_T10, KEY_T11, KEY_T12, KEY_T13, KEY_T14, KEY_T15, KEY_T16, KEY_T17, KEY_T18, KEY_T19, KEY_T20, KEY_T21, KEY_T22, KEY_T23, KEY_NUM } Key_TypeDef; // LED相关变量 ---------------------------------------------------------------------------------------- // SEG与bit位映射:SEG1~4对应HL的bit0~3,SEG5~8对应HU的bit0~3 #define SEG1_HL_BIT 0x01 // SEG1 → HL的bit0 #define SEG2_HL_BIT 0x02 // SEG2 → HL的bit1 #define SEG3_HL_BIT 0x04 // SEG3 → HL的bit2 #define SEG4_HL_BIT 0x08 // SEG4 → HL的bit3 #define SEG5_HU_BIT 0x01 // SEG5 → HU的bit0 #define SEG6_HU_BIT 0x02 // SEG6 → HU的bit1 #define SEG7_HU_BIT 0x04 // SEG7 → HU的bit2 #define SEG8_HU_BIT 0x08 // SEG8 → HU的bit3 /* --------------------------------------------------------------------------------------------------------- */ //和弦按键类型结构体 typedef struct { uint8_t buf_idx; // keyBuf的索引(0~3) uint8_t mask; // 对应的bit掩码 Key_TypeDef key; // 映射的按键值 }sChordKeyMap; //LED枚举 typedef enum { LED_L1 = 0, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8 }LedNum_TypeDef; // 颜色枚举 typedef enum { LED_COLOR_R, // 红 LED_COLOR_G, // 绿 LED_COLOR_B, // 蓝 LED_COLOR_YELL, // 黄 R+G LED_COLOR_PURP, // 紫 R+B LED_COLOR_CYA, // 青 G+B LED_COLOR_WHITE,// 白 R+G+B COLOR_OTHER // 关闭该LED全部三色 }LedColor_TypeDef; // Key&LED驱动函数声明 extern void TM1629D_Key_LED_Init(void); // 初始化GPIO extern uint8_t TM1629D_SendByte(uint8_t dat); // 发送1字节 extern uint8_t TM1629D_RecvByte(void); // 接收1字节 extern void TM1629D_ReadKeyData(uint8_t *keyBuf); // 读取4字节键扫数据 extern Key_TypeDef TM1629D_GetKey(void); // 解析按键 extern void TM1629D_WriteDisplayByte(uint8_t addr, uint8_t data); //控制单个LED显示 extern void TM1629D_SetGridSeg(uint8_t grid, uint8_t seg, uint8_t on); //设置Grid/Seg extern void TM1629D_UpdateDisplay(uint8_t u8LH); //将缓存中的所有GRID数据写入TM1629D(更新显示) extern void TM1629D_ControlLed(LedNum_TypeDef led, LedColor_TypeDef color, uint8_t on); extern void TM1629D_AllLedOn(LedColor_TypeDef color); //根据传参全亮LED某一颜色 extern void TM1629D_AllLedOff(void); //LED全灭 #endif