分类: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(); // 处理平衡控制 } }