根据实际电路版修改对应引脚,LED KEY LCD 正常运行

This commit is contained in:
2026-01-25 13:02:58 +08:00
parent a2224908e3
commit 065f070cfa
93 changed files with 5750 additions and 9255 deletions

View File

@@ -19,14 +19,6 @@
#include <string.h>
#include <stdio.h>
/* ============================================================================
* 编译选项配置
* ============================================================================ */
//#define STATIC_BOX /**< 静态框显示模式(已注释) */
#define DYNAMIC_BOX /**< 动态框显示模式 */
#define TEST_DELAY_TIME 600 /**< 测试延时时间(单位:毫秒) */
#define VERSION_CODE "Ver0.05(XRD)" /**< 版本号字符串 */
/* ============================================================================
* LCD偏置电压配置宏定义
* ============================================================================ */
@@ -146,12 +138,13 @@
#define UC1698U_RST_L() do{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);}while(0)
/** @brief 设置背光引脚为关闭 */
#define LCD_BackLight_OFF() do{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);}while(0)
#define LCD_BackLight_OFF() do{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);}while(0)
/** @brief 设置背光引脚为打开 */
#define LCD_BackLight_ON() do{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);}while(0)
#define LCD_BackLight_ON() do{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);}while(0)
volatile static uint32_t BackLightCount = 0;
#define BackLightTimeMax (20000) //五分钟
#define BackLightTimeMax (20000) /* 100s */
/**
* @brief 背光处理函数
@@ -1326,7 +1319,30 @@ void FillBoxScreen(uint8_t x, uint8_t y, uint8_t len, uint8_t high, uint8_t byte
y++; /* 移动到下一行 */
}
}
void LCD_GPIO_Init(void)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOB_CLK_ENABLE(); // 时钟初始化
__HAL_RCC_GPIOE_CLK_ENABLE(); // 时钟初始化
// 配置 LCD 引脚
gpio_init_struct.Pin = GPIO_PIN_14 | GPIO_PIN_13 | GPIO_PIN_12 | GPIO_PIN_11 | GPIO_PIN_10 | GPIO_PIN_0;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /*推挽输出模式*/
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
// 初始化 LCD 选引脚
HAL_GPIO_Init(GPIOB, &gpio_init_struct);
// 配置 LCD 引脚
gpio_init_struct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /*推挽输出模式*/
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
// 初始化 LCD 选引脚
HAL_GPIO_Init(GPIOE, &gpio_init_struct);
}
/**
* @brief LCD初始化总函数
* @note 执行LCD初始化的完整流程
@@ -1337,6 +1353,8 @@ void FillBoxScreen(uint8_t x, uint8_t y, uint8_t len, uint8_t high, uint8_t byte
*/
void LcdInit(void)
{
LCD_GPIO_Init();
LCD_BackLight_ON();
LCD_Reset(); /* 硬件复位 */
LCD_InitXRD(); /* 初始化配置XRD版本 */
ClearScreen(); /* 清屏 */
@@ -1647,22 +1665,6 @@ void DrawPoint(uint8_t x, uint8_t y)
DisplayVerticalLine(x + 1, y + 4, 1, 0x60);
DisplayHorizontalLine(x + 1, y + 5, 1);
}
/**
* @brief 擦除线条(内部函数,用于动态框效果)
* @param x 起始列坐标X坐标
* @param y 起始行坐标Y坐标
* @param len 线条长度(像素单位)
* @param high 线条高度(行数)
* @note 擦除指定区域的线条,用于实现动态框的擦除效果
* 擦除底部3行和右侧1列
* @retval 无
*/
static void EraseLine(uint8_t x, uint8_t y, uint8_t len, uint8_t high)
{
FillBoxScreen(x, y + high, len + 1, 3, 0x00); /* 擦除底部3行 */
FillBoxScreen(x + len, y, 1, high + 1, 0x00); /* 擦除右侧1列 */
}
/**
* @brief 显示消息提示框(静态模式)
* @note 在屏幕指定位置显示一个带阴影的消息提示框

View File

@@ -144,7 +144,7 @@ static void button_handler(Button* handle)
// Level not changed, reset counter
handle->debounce_cnt = 0;
}
/*-----------------State machine-------------------*/
switch (handle->state) {
case BTN_STATE_IDLE:

View File

@@ -11,7 +11,7 @@
*/
#include "key.h"
#include "160160D.h"
// 按键配置结构体
typedef struct {
@@ -37,17 +37,16 @@ typedef struct {
*/
// 按键配置表
static const KeyConfig_t key_configs[] = {
{15, GPIOB, KEY_ENTER},
{11, GPIOD, KEY_UP},
{10, GPIOD, KEY_DOWN},
{13, GPIOD, KEY_LEFT},
{8, GPIOD, KEY_RIGHT},
{12, GPIOD, KEY_ESC},
{14, GPIOD, KEY_ADD},
{9, GPIOD, KEY_DEC},
{15, GPIOD, KEY_RESET},
{GPIO_PIN_12, GPIOD, KEY_ENTER},
{GPIO_PIN_11, GPIOD, KEY_UP},
{GPIO_PIN_10, GPIOD, KEY_DOWN},
{GPIO_PIN_13, GPIOD, KEY_LEFT},
{GPIO_PIN_8, GPIOD, KEY_RIGHT},
{GPIO_PIN_15, GPIOB, KEY_ESC},
{GPIO_PIN_3, GPIOB, KEY_ADD},
{GPIO_PIN_15, GPIOD, KEY_RESET},
};
#define KEY_COUNT (sizeof(key_configs) / sizeof(key_configs[0]))
#define KEY_COUNT (sizeof(key_configs) / sizeof(key_configs[0]))
// 按键句柄数组
static Button btn_handles[KEY_COUNT];
@@ -62,13 +61,13 @@ static KeyCallback key_callback = NULL;
*/
static uint8_t button_read_level(uint8_t button_id)
{
uint16_t pin_bit = HAL_GPIO_ReadPin(key_configs[button_id].port, key_configs[button_id].pin);
uint8_t pin_bit = HAL_GPIO_ReadPin(key_configs[button_id].port, key_configs[button_id].pin);
return pin_bit;
}
/**
* @brief 统一的按键回调函数(内部使用,调用业务逻辑回调)
* @param btn 按键句柄指针
* @param btn 按键句柄指针
*/
static void button_callback(Button* btn)
{
@@ -118,27 +117,28 @@ static void KEY_GPIO_ClockEnable(GPIO_TypeDef *port)
**************************************************************************************/
void Key_Init(void)
{
GPIO_InitTypeDef gpio_init_struct;
/*由于使用了 PB3 才需要特殊加的*/
__HAL_RCC_AFIO_CLK_ENABLE(); // AFIO时钟修改AFIO寄存器前必须
// 统一配置GPIO参数
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_PULLUP;
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
/* 禁用JTAG保留SWDPA13、PA14仍可用于调试*/
/* 这会释放 PA15、PB3、PB4 作为普通GPIO */
__HAL_AFIO_REMAP_SWJ_NOJTAG();
GPIO_InitTypeDef gpio_init_struct = {0};
// 批量初始化GPIO
for (uint8_t i = 0; i < KEY_COUNT; i++)
{
/* 使能对应GPIO时钟 */
KEY_GPIO_ClockEnable(key_configs[i].port);
// 配置并初始化引脚
gpio_init_struct.Pin = key_configs[i].pin;
HAL_GPIO_Init(key_configs[i].port, &gpio_init_struct);
}
// 批量初始化MultiButton按键active_level=0表示低电平有效
for (uint8_t button_id = 0; button_id < KEY_COUNT; button_id++)
{
/* 使能对应GPIO时钟 */
KEY_GPIO_ClockEnable(key_configs[button_id].port);
// 配置并初始化引脚
gpio_init_struct.Pin = key_configs[button_id].pin;
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_NOPULL;
gpio_init_struct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(key_configs[button_id].port, &gpio_init_struct);
button_init(&btn_handles[button_id], button_read_level, 0, button_id);
button_attach(&btn_handles[button_id], BTN_SINGLE_CLICK, button_callback);
button_start(&btn_handles[button_id]);

View File

@@ -22,65 +22,65 @@
* {GPIOB, GPIO_PIN_5, LED_POLARITY_HIGH_ACTIVE, GPIO_PIN_RESET, GPIO_SPEED_FREQ_MEDIUM, GPIO_NOPULL}
* ============================================================================ */
static const LED_Config_t led_config[LED_COUNT] = {
/* LED1: PD6 - 低电平有效 */
{GPIOD, GPIO_PIN_6, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED2: PD5 - 低电平有效 */
{GPIOD, GPIO_PIN_5, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED3: PD4 - 低电平有效 */
{GPIOD, GPIO_PIN_4, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED4: PD3 - 低电平有效 */
{GPIOD, GPIO_PIN_3, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED5: PD2 - 低电平有效 */
{GPIOD, GPIO_PIN_2, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED6: PD1 - 低电平有效 */
{GPIOD, GPIO_PIN_1, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED7: PD0 - 低电平有效 */
{GPIOD, GPIO_PIN_0, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED8: PC12 - 低电平有效 */
{GPIOC, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED9: PA12 - 低电平有效 */
{GPIOA, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED10: PA11 - 低电平有效 */
{GPIOA, GPIO_PIN_11, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED11: PA10 - 低电平有效 */
{GPIOA, GPIO_PIN_10, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED12: PA9 - 低电平有效 */
{GPIOA, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED13: PA8 - 低电平有效 */
{GPIOA, GPIO_PIN_8, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED14: PC9 - 低电平有效 */
{GPIOC, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED15: PC8 - 低电平有效 */
/* LED1 低电平有效 */
{GPIOC, GPIO_PIN_8, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED16: PC7 - 低电平有效 */
/* LED2 低电平有效 */
{GPIOC, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED3 低电平有效 */
{GPIOA, GPIO_PIN_9, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED4 低电平有效 */
{GPIOA, GPIO_PIN_11, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED5 低电平有效 */
{GPIOA, GPIO_PIN_15, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED6 低电平有效 */
{GPIOC, GPIO_PIN_11, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED7 低电平有效 */
{GPIOD, GPIO_PIN_0, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED8 低电平有效 */
{GPIOD, GPIO_PIN_2, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED9 低电平有效 */
{GPIOD, GPIO_PIN_4, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED10 低电平有效 */
{GPIOD, GPIO_PIN_6, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED11 低电平有效 */
{GPIOC, GPIO_PIN_7, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED17: PE3 - 低电平有效 */
{GPIOE, GPIO_PIN_3, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED12 低电平有效 */
{GPIOA, GPIO_PIN_8, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED18: PE4 - 低电平有效 */
{GPIOE, GPIO_PIN_4, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED13 低电平有效 */
{GPIOA, GPIO_PIN_10, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED19: PE2 - 低电平有效 */
{GPIOE, GPIO_PIN_2, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED14 低电平有效 */
{GPIOA, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED20: PE5 - 低电平有效 */
{GPIOE, GPIO_PIN_5, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED15 低电平有效 */
{GPIOC, GPIO_PIN_10, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED16 低电平有效 */
{GPIOC, GPIO_PIN_12, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED17 低电平有效 */
{GPIOD, GPIO_PIN_1, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED18 低电平有效 */
{GPIOD, GPIO_PIN_3, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED19 低电平有效 */
{GPIOD, GPIO_PIN_5, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
/* LED20 低电平有效 */
{GPIOD, GPIO_PIN_7, LED_POLARITY_LOW_ACTIVE, GPIO_PIN_SET, GPIO_SPEED_FREQ_HIGH, GPIO_PULLUP},
};
/* LED状态数组 - 使用枚举类型提高类型安全性 */