除非按下按钮,否则保持以前的状态
Stay in previous state unless button pressed
我在这里有简单的代码。我正在调用两个功能显示LCD并检查键。默认情况下,屏幕应显示日期和时间。如果按下箭头,请转到特定的窗口并显示日期和时间。类似地向下按键。显示菜单应减少。
问题:日期和时间正确显示。一旦上键,按菜单将更改,但是一旦输入菜单直接跳回日期和时间。枚举值声明:
typedef enum {
DATE_TIME,
COORDINATE,
WINDSPEED,
POSITIONTRACK,
DISPAY_PARAMETER,
SET_PARAMETER,
DISPLAY_TYPE_MAX
}
DISPLAY_SCREEN_TYPE;
//DISPLAY_SCREEN_TYPE display_screen_type=DATE_TIME;
按钮函数声明
#define btnRIGHT 0 // Okay
#define btnUP 1 // inc
#define btnDOWN 2 // dec
#define btnLEFT 3 // Select
#define btnSELECT 4 // Menu
#define btnNONE 5
功能:
void loop()
{
Display_LCD();
Chk_key();
}
void Display_LCD()
{
switch(display_screen_type)
{
case DATE_TIME:
digitalClockDisplay();
break;
case COORDINATE:
Display_coordinate();
break;
case WINDSPEED:
Display_Wind();
break;
case POSITIONTRACK:
Display_angle();
break;
case DISPAY_PARAMETER:
Display_fun();
break;
case SET_PARAMETER:
Set_Fun();
break;
case DISPLAY_TYPE_MAX:
break;
}
if(display_screen_type>DISPLAY_TYPE_MAX)
{
display_screen_type=DATE_TIME;
}
}
void Chk_key()
{
int button=read_LCD_buttons();
switch(button)
{
case btnRIGHT:
Action_RIGHT();
break;
case btnUP:
Action_UP();
break;
case btnDOWN:
Action_DOWN();
break;
case btnLEFT:
Action_LEFT();
break;
case btnSELECT:
Action_SELECT();
break;
}
}
void Action_UP()
{
switch(display_screen_type)
{
case DATE_TIME:
display_screen_type= COORDINATE;
Update_Display=1;
break;
case COORDINATE:
display_screen_type= WINDSPEED;
Update_Display=1;
break;
case WINDSPEED:
display_screen_type= POSITIONTRACK;
Update_Display=1;
break;
case POSITIONTRACK:
display_screen_type= DATE_TIME;
Update_Display=1;
break;
//default:display_screen_type= DATE_TIME; Update_Display=1;delay(500);break;
}
}
void Action_DOWN()
{
/* lcdClear();
lcd.print("DOWN");*/
switch(display_screen_type)
{
case DATE_TIME:
display_screen_type= POSITIONTRACK;
Update_Display=1;
break;
case COORDINATE:
display_screen_type= DATE_TIME;
Update_Display=1;
break;
case WINDSPEED:
display_screen_type= COORDINATE;
Update_Display=1;
break;
case POSITIONTRACK:
display_screen_type= WINDSPEED;
Update_Display=1;
break;
//default:display_screen_type= DATE_TIME; Update_Display=1;break;
}
}
修改的代码在这里:
int display_screen_type=DATE_TIME;
void loop()
{
Display_LCD();
Chk_key();
}
void Display_LCD()
{
switch(display_screen_type)
{
case DATE_TIME:
digitalClockDisplay();
timedBeep(beep,1);
break;
case COORDINATE:
Display_coordinate();
timedBeep(beep,1);
break;
case WINDSPEED:
Display_Wind();
timedBeep(beep,1);
break;
case POSITIONTRACK:
Display_angle();
timedBeep(beep,1);
break;
case DISPAY_PARAMETER:
Display_fun();
timedBeep(beep,1);
break;
case SET_PARAMETER:
Set_Fun();
timedBeep(beep,1);
break;
case GET_PASSWORD:
Get_Password();
timedBeep(beep,1);
break;
}
}
void Action_UP()
{
if(display_screen_type >=POSITIONTRACK)
display_screen_type=DATE_TIME;
else
display_screen_type++;
}
void Action_DOWN()
{
if(display_screen_type <=DATE_TIME)
display_screen_type=POSITIONTRACK;
else
display_screen_type--;
}
void Chk_key()
{
int button=read_LCD_buttons();
if(button!=prev_button)
{
prev_button = button;
}
switch(prev_button)
{
case btnRIGHT:// RIGHT/MENU BUTTON BEING SELECTED
Action_RIGHT();
break;
case btnUP:// UP KEY/INCREMENT PRESSED
Action_UP();
break;
case btnDOWN: // DOWN / DECREMENT KEY PRESSED
Action_DOWN();
break;
case btnLEFT://LEFT / ESCAPE KEY PRESSED
Action_LEFT();
break;
case btnSELECT://SELECT KEY PRESSED
Action_SELECT();
break;
}
}
您的代码似乎首先需要进行大量改进,为什么您要比较 display_screen_type
Display_LCD
功能?只需在Action_UP
或Action_DOWN
为增量/减少display_screen_type
,您必须将其视为类型int
int display_screen_type=DATE_TIME;
您的Action_UP
和Action_DOWN
应该像这样
void Action_UP()
{
if(display_screen_type >=DISPLAY_TYPE_MAX)
display_screen_type=DATE_TIME
else
display_screen_type++;
}
void Action_DOWN()
{
if(display_screen_type <= DATE_TIME)
display_screen_type=SET_PARAMETER
else
display_screen_type--;
}
在Display_LCD
中也不需要以下条件,因此请删除它。
if(display_screen_type>DISPLAY_TYPE_MAX)
{
display_screen_type=DATE_TIME;
}
相关文章:
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何保留计时器按钮状态的值
- 除非按下按钮,否则保持以前的状态
- 在MFC中以编程方式设置单选按钮状态
- Qt检查多个按钮的状态
- 如何在 wxWidgets 中获取功能区中切换按钮的状态
- 如何在cocos2d-x中将按钮的状态更改为已单击
- MFC状态栏-使文本与按钮行为的链接
- 根据bool状态更改标签/按钮文本
- 检查单选按钮状态winapi
- MFC -消息框显示,主窗口有一个取消按钮.消息框处于活动状态时防止取消