分类:N09_单片机
typedef enum {
MAIN_MENU, // 一级菜单
SUB_MENU, // 二级菜单
} MenuState;
MenuState currentMenuState = MAIN_MENU;
void display_main_menu(void) {
// 显示一级菜单内容,例如:
// "1. 传感器"
// "2. 速度控制"
// "3. 设置"
}
void display_sub_menu(void) {
// 显示二级菜单内容,例如:
// "1. 校准传感器"
// "2. 设置最大速度"
// "3. 返回"
}
void update_menu(void) {
switch (currentMenuState) {
case MAIN_MENU:
display_main_menu(); // 更新一级菜单显示
break;
case SUB_MENU:
display_sub_menu(); // 更新二级菜单显示
break;
default:
break;
}
}
#define BUTTON_PIN_1 GPIO_PIN_0 // 按钮1对应的引脚
#define BUTTON_PIN_2 GPIO_PIN_1 // 按钮2对应的引脚
void scan_buttons(void) {
// 按键扫描,根据按钮按下切换菜单
if (HAL_GPIO_ReadPin(GPIOB, BUTTON_PIN_1) == GPIO_PIN_SET) {
// 按钮1按下,选择下一级菜单
if (currentMenuState == MAIN_MENU) {
currentMenuState = SUB_MENU; // 从一级菜单切换到二级菜单
}
}
else if (HAL_GPIO_ReadPin(GPIOB, BUTTON_PIN_2) == GPIO_PIN_SET) {
// 按钮2按下,返回上一菜单
if (currentMenuState == SUB_MENU) {
currentMenuState = MAIN_MENU; // 从二级菜单返回到一级菜单
}
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
// 每次定时器中断时调用,更新菜单显示
update_menu();
}
int main(void) {
HAL_Init(); // 初始化硬件
// 配置定时器,周期性中断更新菜单显示
HAL_TIM_Base_Start_IT(&htim2); // 启动定时器2,并使能中断
// 配置按钮引脚输入
// GPIO配置代码略...
while (1) {
scan_buttons(); // 扫描按键输入,切换菜单
// 其他功能的代码,例如平衡控制
// process_balance(); // 处理平衡控制
}
}