📄 menu.c
字号:
#include "typedef.h"
#include "global.h"
#include "menu.h"
#include "menuinterface.h"
#include "playsound.h"
/************************MenuProcess()函数的说明*****************************/
/*****MenuProcess()为菜单处理程序,main()函数中每隔一段时间对它进行调用,
由每个菜单的处理程序pMenu->function获取按键值,处理程序的返回值为
CHANGE_MENU, NEXT_MENU, PREVIEW_MENU, LEFT_MENU,RIGHT_MENU,
MenuProcess()根据这些返回值来管理菜单,作出相应的操作*****************/
/*******************************************
pMenu->function返回值为CHANGE_MENU时,结构指针仍然指向自己,MenuProcess不操作
pMenu->function返回值为NEXT_MENU时,NowMenuPtr指向son,处理下级菜单
pMenu->function返回值为PREVIEW_MENU时,NowMenuPtr指向father,处理上级菜单
pMenu->function返回值为RIGHT_MENU时,NowMenuPtr--,处理同级右菜单
pMenu->function返回值为LEFT_MENU时,NowMenuPtr++,处理同级左菜单
**********************************************/
static MENU *pMenu; /*当前菜单指针*/
MENU_INFO menuInfo;
void meunInit(MENU *pInitMenu, int holdTime, void *funcScroll, void *funcBackLight)
{
menuInfo.floorCnt = 0;
pMenu = pInitMenu;
menuInfo.Father[0] = pInitMenu;
menuInfo.holdTime = holdTime;
menuInfo.returnTimer = 0;
menuInfo.ptrScroll = funcScroll;
menuInfo.ptrBackLight = funcBackLight;
(pMenu->function)(1);
menuInfo.rebrushLcd = FLASH_SCREEN;
menuInfo.MenuPopReturnFlag = 1;
}
MENU *menu_select(MENU *menuPtr, unsigned char index)
{
MENU *pTmp;
unsigned char i;
if( menuPtr == NULL )
return menuPtr;
pTmp = menuPtr;
menuInfo.rebrushLcd = FLASH_SCREEN;
while(pTmp->function != NULL)
{
pTmp --;
}
for(i=0; i<index; i++)
{
pTmp ++;
if( pTmp->function == NULL )
break;
}
if( pTmp->function == NULL )
return menuPtr;
else
return pTmp;
}
/*主程序调用的菜单处理指针*/
void MenuProcess(void)
{
char status;
MENU *pTmp;
/*指针出错时,显示错误信息*/
if( pMenu->function == NULL )
{
return; /*xhb pMenu = menu_null;*/
}
/*显示滚动条*/
if( (menuInfo.rebrushLcd == FLASH_SCREEN) && (menuInfo.ptrScroll != NULL) )
{
pTmp = pMenu - 1;
if( (pTmp->function==NULL) || (pMenu->son==NULL) )
menuInfo.ptrScroll(0);
else
menuInfo.ptrScroll(1); /*向上标记*/
pTmp = pMenu + 1;
if( (pTmp->function==NULL) || (pMenu->son==NULL) )
menuInfo.ptrScroll(0);
else
menuInfo.ptrScroll(2); /*向下标记*/
}
/*按键菜单显示函数*/
status = (pMenu->function)(menuInfo.rebrushLcd); /*执行菜单,返回按键值*/
/*菜单层之间切换*/
switch(status)
{
case NOKEY_MENU:
default:
menuInfo.rebrushLcd = KEEP_SCREEN;
menuInfo.returnTimer ++;
//背光处理
if (menuInfo.returnTimer >= 200)
menuInfo.ptrBackLight(0);
if( menuInfo.returnTimer >= menuInfo.holdTime )
{
menuInfo.returnTimer = 0;
// menuInfo.ptrBackLight(0);
if (0 == menuInfo.floorCnt)
// pMenu = menuInfo.Father[0];
menuInfo.rebrushLcd = FLASH_SCREEN;
}
break;
case NOCHANGE_MENU:/*无操作*/
/* if( menuInfo.floorCnt == 0 )
{
menuInfo.returnTimer ++;
if( menuInfo.returnTimer >= menuInfo.holdTime )
{
menuInfo.returnTimer = 0;
menuInfo.ptrBackLight(0);
}
}
else
menuInfo.returnTimer = 0;*/
menuInfo.ptrBackLight(1);
menuInfo.returnTimer = 0;
menuInfo.rebrushLcd = KEEP_SCREEN;
// tts("msga", 4);//原有的按键音
play_littlespeaker(LITTLESPEAKER_KEY);
break;
case NEXT_MENU:/*enter*/
case NEXT_MENU1:/*enter*/
case NEXT_MENU2:/*enter*/
case NEXT_MENU3:/*enter*/
case NEXT_MENU4:/*enter*/
menuInfo.returnTimer = 0;
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight(1);
}
if(pMenu->son != NULL)
{
menuInfo.Father[menuInfo.floorCnt] = pMenu;
menuInfo.floorCnt ++;
if( status == NEXT_MENU2 )
pMenu = menu_select(pMenu->son, 2);
else if( status == NEXT_MENU3 )
pMenu = menu_select(pMenu->son, 3);
else if( status == NEXT_MENU4 )
pMenu = menu_select(pMenu->son, 4);
else
pMenu = menu_select(pMenu->son, 1);
menuInfo.rebrushLcd = FLASH_SCREEN;
}
// tts("msga", 4);//原有的按键音
play_littlespeaker(LITTLESPEAKER_KEY);
break;
case PREVIEW_MENU:/*esc*/
menuInfo.returnTimer = 0;
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight(1);
}
if( menuInfo.floorCnt > 0 )
{
menuInfo.floorCnt --;
pMenu = menuInfo.Father[menuInfo.floorCnt];
menuInfo.MenuPopReturnFlag = 1;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
// tts("msga", 4);//原有的按键音
play_littlespeaker(LITTLESPEAKER_KEY);
break;
case LEFT_MENU:/*left/up*/
menuInfo.returnTimer = 0;
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight(1);
}
pTmp = pMenu - 1;
if(pTmp->function != NULL)
{
pMenu = pTmp;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
// tts("msga", 4);//原有的按键音
play_littlespeaker(LITTLESPEAKER_KEY);
break;
case RIGHT_MENU:/*right/down*/
menuInfo.returnTimer = 0;
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight(1);
}
pTmp = pMenu + 1;
if(pTmp->function != NULL)
{
pMenu = pTmp;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
// tts("msga", 4);//原有的按键音
play_littlespeaker(LITTLESPEAKER_KEY);
break;
}
}
/*弹出菜单程序处理*/
void menuPopUp(MENU *pMenuPop)
{
if( menuInfo.MenuPopReturnFlag == 1 )
{
openLight();
menuInfo.Father[menuInfo.floorCnt] = pMenu;
menuInfo.floorCnt++;
pMenu = pMenuPop;
menuInfo.MenuPopReturnFlag = 0;
(pMenu->function)(1);
}
}
/********************************************
*背光打开函数,在收到自动报站的时候被调用
*********************************************/
void openLight()
{
menuInfo.returnTimer = 0;
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -