8051单片机连接的LCD按下按键时如何返回初始显示屏幕
8051 LCD界面返回初始屏实现方案
你可以根据硬件情况选择以下两种实现方案,优先推荐复用现有按键的方案,不需要额外修改硬件:
方案1:复用现有模式按键(短按切换界面,长按返回初始屏)
原理是检测按键按下的时长,小于设定阈值走原有滚动切换逻辑,大于阈值直接跳转回初始屏。修改后代码如下:
#include <stdio.h> #include <string.h> #include <stdint.h> void change_screen(void); int count = 0; // 长按阈值,单位和你现有delay函数一致,比如delay是1ms的话,1000对应1秒 #define LONG_PRESS_THRESHOLD 1000 void change_screen(void) { if (modebutton == 1) { // 检测到按键按下 uint16_t press_time = 0; // 统计按键按下时长 while(modebutton == 1) { delay(1); press_time++; if(press_time >= LONG_PRESS_THRESHOLD) { // 触发长按,返回初始屏 count = 0; display_screen0(); // 替换为你的初始屏显示函数 while(modebutton == 1); // 等待按键松开 modebutton = 0; return; } } // 短按逻辑,保留原有切换逻辑 delay(100); // 消抖 if (count == 0) { count++; display_screen1(); } else if (count == 1) { count++; display_screen2(); } else if (count == 2) { display_screen3(); count = 0; } modebutton=0; } }
修改说明
- 新增长按阈值宏,可根据自己的操作习惯调整触发时长
- 增加按下时长统计逻辑,长按触发后直接重置界面计数到0,跳转初始屏
- 原有短按切换逻辑完全保留,不影响原有使用习惯
方案2:新增独立返回按键
如果硬件有空余IO口,可以单独加一个返回按键,代码修改量更小:
// 新增返回按键检测逻辑,放到主循环或者change_screen函数中都可以 if(returnbutton == 1) { delay(100); // 消抖 if(returnbutton == 1) { count = 0; display_screen0(); // 显示初始屏 while(returnbutton == 1); // 等待按键松开 returnbutton = 0; } }
注意事项
- 如果你默认的初始屏就是
screen1,把display_screen0()替换为display_screen1(),对应调整count重置后的数值即可 - 按键消抖时长根据你的硬件实际情况调整,避免误触发
内容的提问来源于stack exchange,提问作者greetal
相关产品推荐
相关产品推荐

