112 lines
3.7 KiB
C
112 lines
3.7 KiB
C
|
|
/*
|
|||
|
|
* @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~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
|