K1Guitar/device/TM1629D/Drv_TM1629D_Key_Led.h

112 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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 <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