📄 menu.c
字号:
#ifndef _MENU_C_
#define _MENU_C_
#include "menu.h"
#if _LCD_MENU_
/************************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++,处理同级左菜单
**********************************************/
MENU *Father[MAX_FLOOR];
MENU *pMenu; /*当前菜单指针*/
BYTE floorCnt;
MENU_INFO menuInfo;
void meunInit(MENU *pInitMenu, void *funcScroll, void *funcBackLight)
{
BYTE status;
pMenu = pInitMenu;
menuInfo.ptrScroll = funcScroll;
menuInfo.ptrBackLight = funcBackLight;
status = (pMenu->function)(1);
menuInfo.MenuPopReturnFlag = 1;
floorCnt = 0;
}
/*主程序调用的菜单处理指针*/
void MenuProcess(void)
{
BYTE status;
MENU *pTmp;
/*指针出错时,显示错误信息*/
if( pMenu->function == NULL )
{
return;
}
/*背光控制程序*/
if( menuInfo.ptrBackLight != NULL )
{
menuInfo.ptrBackLight( &(menuInfo.menuBack) );
}
/*显示滚动条*/
if( (menuInfo.rebrushLcd == FLASH_SCREEN) && (menuInfo.ptrScroll != NULL) )
{
pTmp = pMenu - 1;
if( pTmp->function == NULL )
menuInfo.ptrScroll(SCROL_FIRST_ROW_NULL);
else
menuInfo.ptrScroll(SCROL_FIRST_ROW_UP); /*向上标记*/
pTmp = pMenu + 1;
if( pTmp->function == NULL )
menuInfo.ptrScroll(SCROL_SECOND_ROW_NULL);
else
menuInfo.ptrScroll(SCROL_SECOND_ROW_DOWN); /*向下标记*/
}
/*按键菜单显示函数*/
status = (pMenu->function)( menuInfo.rebrushLcd );
/*菜单层之间切换*/
switch(status)
{
case NOCHANGE_MENU:/*无操作*/
default:
menuInfo.rebrushLcd = KEEP_SCREEN;
break;
case NEXT_MENU:/*下一级菜单*/
if( (pMenu->son != NULL) && (pMenu->function != NULL) )
{
Father[floorCnt++] = pMenu;
pMenu = pMenu->son;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
break;
case PREVIEW_MENU:/*上一级菜单*/
if(floorCnt > 0)
{
pMenu = Father[--floorCnt];
menuInfo.MenuPopReturnFlag = 1;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
break;
case LEFT_MENU:/*同级菜单上切换*/
pTmp = pMenu - 1;
if(pTmp->function != NULL)
{
pMenu = pTmp;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
break;
case RIGHT_MENU:/*同级菜单下切换*/
pTmp = pMenu + 1;
if(pTmp->function != NULL)
{
pMenu = pTmp;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
break;
}
}
#if 0
/*弹出菜单程序处理*//*在处理函数中初始化菜单就可以回到主菜单*/
void menuPopUp( BYTE *pPopFunction )
{
if( menuInfo.MenuPopReturnFlag == 1 )
{
Father[floorCnt++] = pMenu;
pMenu->function = pPopFunction;
pMenu->son = NULL;
menuInfo.MenuPopReturnFlag = 0;
menuInfo.rebrushLcd = FLASH_SCREEN;
}
}
#endif
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -