K1Guitar/device/TM1629D/Drv_TM1629D_Key_Led.h

112 lines
3.7 KiB
C
Raw Normal View History

/*
* @Author: CTW
* @Date: 2025-11-07 14:37:14
* @FilePath: \PhoenixSMGT_Testproject\Drivers\TM1629D\Drv_TM1629D_Key_Led.h
* @note: STM32 HAL AT32F403AGPIO
*/
#ifndef __DRV_TM1629D_KEY_LED_H
#define __DRV_TM1629D_KEY_LED_H
#include <stdint.h>
#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~3SEG5~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