⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 pdh控制程序
💻 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 + -