中科因仑“3+1”工程特种兵精英论坛

标题: 430也要GUI之一: 多级文本菜单开源 [打印本页]

作者: XJzy    时间: 2015-10-6 00:37
标题: 430也要GUI之一: 多级文本菜单开源
430也要GUI之一: 多级文本菜单开源
  提起GUI,可能有不少朋友选择去移植UCGUI之类的东西,不过在我看来,自己写一个GUI也是一个不错的选择,功能实用就好,只要能很好的完成人机交互的任务就可以了。
  多级文本菜单是经常用到的一种功能选择方式,这里给出一个完整的实现源码,显示设备是240×320的彩色TFT液晶,改成其它分辨率的应该也很容易,输入是键盘。这个菜单程序理论上支持无限级菜单,使用的时候写一个菜单资源文件就可以了;支持用户权限控制,也就是说,可以设置不同级别的登录密码,所能看到的菜单项可以按登录级别区分;可以支持动态生成的菜单,比如说查询记录项之类。
  GUI要有良好的用户感受,基础条件是要有足够的执行速度和内存容量。不幸的是,这2点对于大多数430单片机来说都是弱项。对于149级别的MCU,用这个程序的话,建议还是用到128×128以下的单色液晶上比较好,如果用到彩色液晶上,那么滚屏显示菜单项绝对会是噩梦级的感受。如果是5x级别的,情况就好的多,240×320的彩色液晶上完全可以跑的很流畅。
多级文本菜单.jpg (30.02 KB, 下载次数: 0)
下载附件 保存到相册
多级文本菜单
2015-4-6 16:07 上传





MAIN.C

复制代码


main.h



作者: XJzy    时间: 2015-10-6 00:37
//===========================================================================//

//                                                                           //

// 文件:  Menu.c                                                            //

// 说明:  BW-DK5438开发板多级文本菜单操作函数                               //

// 编译:  IAR Embedded Workbench IDE for MSP430 v4.21                       //

// 版本:  v1.1                                                              //

// 编写:  JASON.ZHANG                                                       //

// 版权:  北京拓普博维电子技术有限公司                                      //

//                                                                           //

//===========================================================================//

#include "Menu.h"


extern void str_cpy(char* Destination, char* Source,unsigned char Num)  ;

extern const ITEM MENU_ITEM[]                                           ;

extern const MENU_RES Menus[]                                           ;

extern unsigned int  Color                                              ; // 前景颜色

extern unsigned int  Color_BK                                           ; // 背景颜色

extern MENU  Menu                                                       ;


unsigned char Font_CN          = 24                                     ; // 中文字体

unsigned char Font_EN          = 24                                     ; // 西文字体

unsigned char MenuNum          = 0xFF                                   ; // 需上传的菜单数组数量

unsigned char MenuUpdated      = 0xFF                                   ; // 菜单更新,需上传当前菜单选项

unsigned char First_Index_old  = 0xFF                                   ;

unsigned char y_Index_old      = 0xFF                                   ;

unsigned char First_Index      = 0x00                                   ;

unsigned char Active_Index     = 0x00                                   ;

unsigned char Dis_Menu_Num                                              ;



//=====================================================================//

//函数:void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)

//功能:刷新整屏菜单显示函数

//参数:First_Index -  显示的第一条菜单号

//            Menu_Index  -  处于选择状态的菜单项

//            Menu_List   -  菜单资源链表指针

//返回:无

//日期:        2010.01.20        

//=====================================================================//

void UpDate_Menu(unsigned char First_Index,unsigned char Menu_Index)

{

  unsigned int  y_Index                                                                ;

  unsigned char i                                                                      ;

  _DINT()                                                                              ;

  if(Dis_Menu_Num+First_Index> Menu.MenuConfig[0])

    Dis_Menu_Num =  Menu.MenuConfig[0] - First_Index                                   ;
  y_Index  = 0                                                                         ; //
  if(First_Index_old!=First_Index)                                                       // window内首条菜单项改变
  {

    if(y_Index_old==0xFF)                                                                // 初始绘制菜单

    {

      DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                                       ; // 清空窗口
      Color    = TITLE_COLOR                                                           ; // 显示标题条

      Color_BK = TITLE_BK_COLOR                                                        ;

      DrawRectFill(0,30,240,30,Color_BK)                                               ;

      PutString24M(120-25*strlen((char*)Menu.MenuTitle)/4,33,Menu.MenuTitle)           ;

      y_Index = Y_OFFSET-1                                                             ; // 由上而下显示各菜单项

      for(i=First_Index;i<Dis_Menu_Num+First_Index;i++)

      {

        if(i==Menu_Index)

                {

          DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,MENU_SELE_COLOR)             ; // 显示选择条               
          ShowMenu_Item(y_Index,i+1,1)                                                 ;

                }

            else

          ShowMenu_Item(y_Index,i+1,0)                                                 ; // 显示非被选菜单项

            y_Index += Y_WIDTH_MENU                                                    ;

      }        


      y_Index_old     = 0                                                              ;

      First_Index_old = 0                                                              ;

    }

    else                                                                                 // 首菜单项改变
    {

      Color_BK = WINDOW_BK_COLOR                                                       ;            

      if(First_Index_old<First_Index)                                                    // 菜单向上滚动

      {

        y_Index = Y_OFFSET-1+Y_WIDTH_MENU*(Dis_Menu_Num-1)                             ;

        DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,MENU_SELE_COLOR)               ; // 清选中菜单项内容

        DrawRectFill(0,Y_OFFSET-1,Dis_X_MAX,Y_WIDTH_MENU*(Dis_Menu_Num-1),

                             WINDOW_BK_COLOR                                      )    ; // 清空被选菜单项上部内容

              y_Index = Y_OFFSET-1 + Y_WIDTH_MENU*(Dis_Menu_Num-1)                           ; // 自下而上显示被选菜单项

        for(i=0;i<Dis_Menu_Num;i++)

        {

                  if(i==0)

            ShowMenu_Item(y_Index,Menu_Index-i+1,1)                                    ;

              else

            ShowMenu_Item(y_Index,Menu_Index-i+1,0)                                    ; // 显示非被选菜单项

              y_Index -= Y_WIDTH_MENU                                                  ;

        }        

      }

      else

      {

        y_Index = Y_OFFSET-1                                                           ;

        DrawRectFill(0,Y_WIDTH_MENU+Y_OFFSET-1,Dis_X_MAX,Y_WIDTH_MENU*(Dis_Menu_Num-1),

                             WINDOW_BK_COLOR                                          ); // 清空被选菜单项下部内容

        DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,MENU_SELE_COLOR)               ; // 清选中菜单项内容

        for(i=First_Index;i<Dis_Menu_Num+First_Index;i++)

        {

          if(i==Menu_Index)

            ShowMenu_Item(y_Index,i+1,1)                                               ;

              else

            ShowMenu_Item(y_Index,i+1,0)                                               ; // 显示非被选菜单项

              y_Index += Y_WIDTH_MENU                                                  ;

        }        

      }

    }

    First_Index_old = First_Index                                                      ;

  }

  else                                                                                   // 首菜单项无变化

  {

    y_Index = y_Index_old-First_Index_old                                              ;

    y_Index = y_Index*Y_WIDTH_MENU+Y_OFFSET-1                                          ;

    DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,WINDOW_BK_COLOR)                   ;            

    ShowMenu_Item(y_Index,y_Index_old+1,0)                                             ;

    y_Index = Menu_Index-First_Index                                                   ;

    y_Index = y_Index*Y_WIDTH_MENU+Y_OFFSET-1                                          ;

//    DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,WINDOW_COLOR)                      ;

    DrawRectFill(0,y_Index-1,Dis_X_MAX,Y_WIDTH_MENU,MENU_SELE_COLOR)                   ;

    ShowMenu_Item(y_Index,Menu_Index+1,1)                                              ;

  }

  y_Index_old = Menu_Index                                                             ;

  Update_ScrollBar(Dis_X_MAX+2,Y_OFFSET-5,289-Y_OFFSET,Menu_Index,Menu.MenuConfig[0])  ;

  _EINT()                                                                              ;

}


//=====================================================================//

//函数:UCHAR ShowMenu_Item(UCHAR y,UINT* Menu_String,UCHAR Font_Color)

//描述:显示菜单项子函数

//参数:space_front  显示缩进值

//                y            Y轴坐标

//                Menu_String  菜单项链表的首地址指针

//=====================================================================//

void ShowMenu_Item(unsigned int y,unsigned char index,unsigned char Selected)

{

  unsigned char id[3]                               ;

  Color_BK = WINDOW_BK_COLOR                        ;

  Color    = WINDOW_COLOR                           ;

  DrawRectFill(15,y+3,22,21,Color_BK)               ; // 填充背景色   

  id[2]    = 0x00                                   ;

  id[1]    = 0x00                                   ;

  id[0]    = index-id[1]*10 + 0x30                  ;

  if(index<10)

  {

    PutStringEN24(20,y,id)                          ;

    DrawRect(13,y+1,26,24,WINDOW_BK_COLOR)          ;

  }

  else

  {

    switch(index)

    {

    case 10:

      PutStringCN24(15,y+2,"⒑")                    ;

      break                                         ;

    case 11:

      PutStringCN24(15,y+2,"⒒")                    ;

      break                                         ;

    case 12:

      PutStringCN24(15,y+2,"⒓")                    ;

      break                                         ;

    case 13:

      PutStringCN24(15,y+2,"⒔")                    ;

      break                                         ;

    case 14:

      PutStringCN24(15,y+2,"⒕")                    ;

      break                                         ;

    case 15:

      PutStringCN24(15,y+2,"⒖")                    ;

      break                                         ;

    case 16:

      PutStringCN24(15,y+2,"⒗")                    ;

      break                                         ;

    case 17:

      PutStringCN24(15,y+2,"⒘")                    ;

      break                                         ;

    case 18:

      PutStringCN24(15,y+2,"⒙")                    ;

      break                                         ;

    case 19:

      PutStringCN24(15,y+2,"⒚")                    ;

      break                                         ;

    case 20:

      PutStringCN24(15,y+2,"⒛")                    ;

      break                                         ;

    }

    DrawRectFill(35,y+18,3,4,Color_BK)              ; // 擦除多余的点

  }
  DrawRect(14,y+2,24,22,Color)                      ;

  if(Selected)

    DrawRectFill(14,y,24,1,MENU_SELE_COLOR)         ; // 擦除超出编号框范围的点

  if(Selected==0)

  {

    Color_BK = WINDOW_BK_COLOR                      ;

    Color    = WINDOW_COLOR                         ;

  }

  else

  {

    Color_BK = MENU_SELE_COLOR                      ;

    Color    = WINDOW_BK_COLOR                      ;

  }

  PutString24M(50,y+2,Menu.ItemTitle[index-1])      ;

}


//=====================================================================//

//函数:void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)

//描述:刷新整屏菜单显示函数

//参数:First_Index  当面显示页的第一条菜单号

//                Menu_Index   当前处于选用的菜单项

//                Menu_List    菜单资源链表指针

//=====================================================================//

void Redraw_Menu(unsigned char First_Index,unsigned char Menu_Index)

{

  First_Index_old   = 0xFF                           ;

  y_Index_old       = 0xFF                           ;

  Dis_Menu_Num = (Dis_Y_MAX+1-Y_OFFSET)/Y_WIDTH_MENU ;  

  UpDate_Menu(First_Index,Menu_Index)                ;  

}

//=====================================================================//

//函数:void Initial_Menu(UINT** Menu_List)

//功能:刷新整屏菜单显示函数

//参数:Menu_List - 菜单资源链表指针

//=====================================================================//

void Initial_Menu(void)

{

  First_Index_old   = 0xFF                                ;

  y_Index_old       = 0xFF                                ;

  Dis_Menu_Num      = (Dis_Y_MAX+1-Y_OFFSET)/Y_WIDTH_MENU ;      
  Active_Index = 0x00                                     ;

  First_Index  = Active_Index                             ;

  if(First_Index<Dis_Menu_Num)

    First_Index    = 0x00                                 ;

  while(First_Index>Dis_Menu_Num)

    First_Index   -= (Dis_Menu_Num-1)                     ;

  UpDate_Menu(First_Index,Active_Index)                   ;

  Color_BK = STATUS_BK_COLOR                              ;

  Color    = STATUS_COLOR                                 ;

  PutStringCN24(10,294,"确认")                            ; // 底栏

  if(Menu.MenuIndex>0)

    PutStringCN24(185,294,"返回")                         ;
  else

    DrawRectFill(185,294,54,25,STATUS_BK_COLOR)           ;

}

//***************************************************************************************

//                                                                                                                                                            *

//                 void ActiveEditDig(): 设置数字编辑控件活动状态                                             *

//                                                                                                                                                            *

//***************************************************************************************

void MenuMessage(unsigned char Message)                    

{

  _DINT()                                                               ;

  switch(Message)

  {

  case Update:

    Redraw_Menu(First_Index,Active_Index)                               ;

    break                                                               ;

  case Up:

    if(Active_Index==0)
      break                                                             ;

    else
      Active_Index--                                                    ;

    if(Active_Index<First_Index)

      if(First_Index>0)       First_Index --                            ;

    UpDate_Menu(First_Index,Active_Index)                               ;

    break                                                               ;

  case Down:

    if(Active_Index==Menu.MenuConfig[0]-1)

      break                                                             ;

    else
    {

      Active_Index++                                                    ;

      if(Active_Index>First_Index+6)

        First_Index++                                                   ;

      UpDate_Menu(First_Index,Active_Index)                             ;

    }

    break                                                               ;

  case Left:

    if(First_Index-7>0)

    {

      First_Index   -= 7                                                ;

      Active_Index   = First_Index + 6                                  ;  

      Redraw_Menu(First_Index,Active_Index)                             ;

    }

    else if(First_Index!=0)

    {

      First_Index    = 0                                                ;

      Active_Index   = First_Index                                      ;  

      Redraw_Menu(First_Index,Active_Index)                             ;

    }

    break                                                               ;

  case Right:

    if(First_Index+Dis_Menu_Num<Menu.MenuConfig[0])

    {

      First_Index   += Dis_Menu_Num                                     ;

      Active_Index   = First_Index                                      ;

      if(First_Index+7>Menu.MenuConfig[0])

      {

        Active_Index = Menu.MenuConfig[0]-1                             ;

        First_Index  = Active_Index-6                                   ;

      }

      Redraw_Menu(First_Index,Active_Index)                             ;

    }

    break                                                               ;

  }

  MenuUpdated = 0x00                                                    ;

  _EINT()                                                               ;

}


void Update_ScrollBar(unsigned int x,unsigned int y,unsigned char height,

                      unsigned char position,unsigned char total         )

{

  unsigned int temp                                       ;

  DrawRectFill(x,y,8,height,WINDOW_BK_COLOR)              ; // 外框

  DrawRect(x,y,8,height,WINDOW_COLOR)                     ;
  temp = y+(unsigned int)(height-44)*position/(total-1)   ;

  DrawRectFill(x,temp,8,44,WINDOW_COLOR)                  ; // 滑块

}



void LoadMenu(unsigned char Menu_Index,unsigned char Permission)

{

  unsigned char i,j,k                                                                ; // 导入菜单配置项

  Menu.MenuIndex =  Menu_Index                                                       ;

  str_cpy((char *)Menu.MenuConfig,(char *)Menus[Menu_Index].MenuConfig,10)           ; // 拷贝菜单配置项

  strcpy((char *)Menu.MenuTitle,(char *)Menus[Menu_Index].MenuTitle)                 ; // 拷贝菜单标题

  Menu.MenuConfig[0] = 0                                                             ; // 菜单项数清0

  for(i=1;i< Menus[Menu_Index].MenuConfig[0]+1;i++)                                    // 导入菜单标题字符串

  {

    if(Permission>=(MENU_ITEM[Menus[Menu_Index].ItemIndex[i-1]].AccessLevel))

    {

      j = Menu.MenuConfig[0]++                                                       ; // 计算菜单项数目

      Menu.ItemIndex[j] = Menus[Menu_Index].ItemIndex[i-1]                           ; // 记录菜单项索引

      for(k=0;k<20;k++)

        Menu.ItemTitle[j][k] = 0x00                                                  ;

      strcpy((char *)Menu.ItemTitle[j],

             (char *)MENU_ITEM[Menus[Menu_Index].ItemIndex[i-1]].ItemTitle)          ; // 拷贝菜单项标题

      Menu.ItemConfig[j] =  MENU_ITEM[Menus[Menu_Index].ItemIndex[i-1]].Config       ;     // 拷贝菜单项配置字      

    }   
  }

}


unsigned char GetFirstItem(void)

{

  return First_Index                      ;

}

unsigned char GetActiveItem(void)

{

  return Active_Index                     ;

}

unsigned char GetActiveItemIndex(void)

{

  return Menu.ItemIndex[Active_Index]     ;

}


unsigned char GetMenuIndex(void)

{

  return Menu.MenuIndex                   ;

}
作者: XJzy    时间: 2015-10-6 00:37
//===========================================================================//

//                                                                           //

// 文件:  MAIN.C                                                            //

// 说明:  BW-DK5438开发板多级文本菜单数据结构定义及函数声明头文件           //

// 编译:  IAR Embedded Workbench IDE for MSP430 v4.21                       //

// 版本:  v1.1                                                              //

// 编写:  JASON.ZHANG                                                       //

// 版权:  北京拓普博维电子技术有限公司                                      //

//                                                                           //

//===========================================================================//

#ifndef _MENU_H

#define _MENU_H


#include "TFTDRV430.H"

#include "string.h"


// 菜单常量定义

#define MAX_ITEM                               18  

#define ALL_ITEMS                              60

#define EMPTY                                0xFF // 无效标识

#define DYNAMIC_OP                           0xFE // 动态可执行菜单标识

#define DYNAMIC_VIEW                         0xFD // 动态视图菜单标识

#define STATIC                               0xFC // 静态菜单

#define SINGLE_PAGE                          0x00

#define MULTI_PAGE                           0x11

#define NEXT_PAGE                            0x11

#define PREVIOUS_PAGE                        0x22

#define CHECK_RECORD                         0x11

#define ITEM_ACCESS_HIDDEN                   0x04 // 尚未开放

#define ITEM_ACCESS_SYSTEM                   0x03 // 系统级

#define ITEM_ACCESS_MANAGER                  0x02 // 管理员级

#define ITEM_ACCESS_OPERATOR                 0x01 // 操作员级


typedef  struct
{

  unsigned char  ItemIndex                      ; // 菜单项目索引

  unsigned char  SubMenuIndex                   ; // 子菜单索引

  unsigned char  CallBackFuncIndex              ; // 回调函数索引

  unsigned char  AccessLevel                    ; // 菜单项权限

  unsigned char  Config                         ; // 菜单项类别

  char           ItemTitle[20]                  ; // 菜单项名称

} ITEM                                          ;


typedef struct                                    // 调入内存运行

{

  unsigned char     MenuIndex                   ;

  unsigned char     MenuConfig[40]              ; // 菜单配置

  unsigned char     MenuTitle[20]               ; // 菜单标题

  unsigned char     ItemTitle[25][20]           ; // 菜单项

  unsigned char     ItemIndex[25]               ; // 菜单项索引

  unsigned char     ItemConfig[25]              ; // 菜单项配置字

} MENU                                          ;

typedef struct                                    // 菜单资源

{

  unsigned char     MenuIndex                   ; // 菜单索引
  unsigned char     MasterMenu                  ; // 父菜单索引  

  unsigned char     MasterItem                  ; // 父菜单项索引

  unsigned char     MenuTitle[20]               ; // 菜单标题

  unsigned char     MenuConfig[40]              ; // 菜单配置

  unsigned char     ItemIndex[MAX_ITEM]         ; // 菜单项索引

} MENU_RES                                      ; // 菜单资源


//***************************MenuConfig 定义**********************************//

//   MenuConfig[0] :菜单项数目

//   MenuConfig[1] :中文字体大小

//   MenuConfig[2] :西文字体大小

//   MenuConfig[3] :每一菜单项所占用的Y轴的点数

//   MenuConfig[4] :X轴固定偏移

//   MenuConfig[5] :分页模式

//   MenuConfig[6] :退出菜单调用函数(一般为视图菜单用以保存数据)

//   MenuConfig[7] :分页函数索引

//   MenuConfig[8] :菜单页数

//   MenuConfig[9] :辅助参数,由应用函数定义

//         .                      .

//         .                      .

//         .                      .

//   MenuConfig[15]:多页菜单,菜单页数,供返回时使用

//****************************************************************************//


#define MAX_ITEM                    18  

#define ALL_ITEMS                   60

#define EMPTY                     0xFF

#define Y_OFFSET                    72       // 显示菜单的Y轴偏移量

#define Y_WIDTH_MENU                30       // 菜单项高度

#define X_SPACE_FRONT               15       // 菜单项左缩进


#define SHOULD_FLICKER            BIT1       // 应闪烁

#define MENU_LOADED               BIT2       // 菜单已下载


//*

// 界面颜色

#define WINDOW_BK_COLOR         0xDFFF       // 窗口背景色

#define WINDOW_COLOR            0x11FA       // 窗口前景色


#define TITLE_BK_COLOR          0x11FA       // 标题栏背景色

#define TITLE_COLOR             0xDFFF       // 标题栏前景色

#define STATUS_BK_COLOR         0x0014       // 状态栏背景色

#define STATUS_COLOR            0xDFFF       // 状态栏前景色


#define MENU_BACK_COLOR                WINDOW_BK_COLOR // 未选择菜单项背景色

#define MENU_FONT_COLOR                WINDOW_COLOR         // 未选择菜单项文字色

#define MENU_SELE_COLOR                WINDOW_COLOR    // 选择菜单项背景色

#define MENU_SELF_COLOR                WINDOW_BK_COLOR        // 选择菜单项文字色

//*/

/*

// 界面颜色

#define WINDOW_BK_COLOR         Black           // 窗口背景色

#define WINDOW_COLOR            White           // 窗口前景色


#define TITLE_BK_COLOR          Dark_Grey2      // 标题栏背景色

#define TITLE_COLOR             White           // 标题栏前景色

#define STATUS_BK_COLOR         0x3186          // 状态栏背景色

#define STATUS_COLOR            0xF7BE          // 状态栏前景色


#define MENU_BACK_COLOR                WINDOW_BK_COLOR // 未选择菜单项背景色

#define MENU_FONT_COLOR                WINDOW_COLOR         // 未选择菜单项文字色

//#define MENU_SELE_COLOR                0xFD6A  // 选择菜单项背景色

#define MENU_SELE_COLOR                Yellow          // 选择菜单项背景色

#define MENU_SELF_COLOR                WINDOW_BK_COLOR        // 选择菜单项文字色

*/

/*                                                        
#define TITLE_BK_COLOR          0xF800       // 标题栏背景色

#define TITLE_COLOR             0xDFFF       // 标题栏前景色

#define STATUS_BK_COLOR         0xF800       // 状态栏背景色

#define STATUS_COLOR            0xDFFF       // 状态栏前景色

*/

#define Dis_X_MAX                       228

#define Dis_Y_MAX                       289


void LoadMenu(unsigned char Menu_Index,unsigned char Permission) ;

void Initial_Menu(void)                                          ;

void ShowMenu_Item(unsigned int y,unsigned char index,

                   unsigned char Selected            )           ;

void Redraw_Menu(unsigned char First_Index,

                 unsigned char Menu_Index  )                     ;

void UpDate_Menu(unsigned char First_Index,

                 unsigned char Menu_Index  )                     ;

void Update_ScrollBar(unsigned int x,unsigned int y,

                      unsigned char height,

                      unsigned char position,

                      unsigned char total           )            ;

void MenuMessage(unsigned char Message)                          ;                    

void str_cpy(char* Destination, char* Source,unsigned char Num)  ;

unsigned char GetFirstItem(void)                                 ;

unsigned char GetActiveItem(void)                                ;

unsigned char GetActiveItemIndex(void)                           ;

unsigned char GetMenuIndex(void)                                 ;


#endif
作者: XJzy    时间: 2015-10-6 00:38
//===========================================================================//

//                                                                           //

// 文件:  MenuRes.h                                                         //

// 说明:  BW-DK5438开发板多级文本菜单资源定义                               //

// 编译:  IAR Embedded Workbench IDE for MSP430 v4.21                       //

// 版本:  v1.1                                                              //

// 编写:  JASON.ZHANG                                                       //

// 版权:  北京拓普博维电子技术有限公司                                      //

//                                                                           //

//===========================================================================//

#ifndef   __MENURES_H

#define   __MENURES_H


#include "Menu.h"


// 菜单索引定义

#define MENU_MAIN                        0x00  // 主菜单索引

#define MENU_BOARD_SETTINGS              0x01  // 开发板设置菜单索引


// 一级菜单项[0] : 主菜单

#define ITEM_HELP                        0x00  // 帮助信息

#define ITEM_BOARD_INFO                  0x01  // 开发板信息

#define ITEM_BOARD_SETTINGS              0x02  // 开发板设置


// 二级菜单项[4] : 手持机管理菜单

#define ITEM_SET_TIME                    0x03  // 设置手持机时间

#define ITEM_SET_BACKLIGHT               0x04  // 设置手持机背光


// 操作函数定义


#define FUNC_SHOW_HELP                   0x00  // 显示帮助信息

#define FUNC_BOARD_INFO                  0x01  // 开发板信息  

#define FUNC_SET_TIME                    0x02  // 设置时间

#define FUNC_SET_BACKLIGHT               0x03  // 设置背光


extern unsigned char (*Item_OP[ALL_ITEMS])(unsigned int,unsigned char)    ;

void str_cpy(char* Destination, char* Source,unsigned char Num)           ;



//****************************************************************************//

//                                                                            //

//                                 菜单项定义                                 //

//                                                                            //

//****************************************************************************//

const ITEM MENU_ITEM[] =
{  

//--------------------------------- 主菜单[0] --------------------------------//  

  {ITEM_HELP                    ,

   EMPTY                        ,

   FUNC_SHOW_HELP               ,

   ITEM_ACCESS_OPERATOR         ,

   STATIC                       ,

   "帮助信息"                    } ,  // [00]帮助

   

  {ITEM_BOARD_INFO              ,

   EMPTY                        ,

   FUNC_BOARD_INFO              ,

   ITEM_ACCESS_OPERATOR         ,

   STATIC                       ,

   "开发板信息"                  } ,  // [01]水表管理

   

  {ITEM_BOARD_SETTINGS          ,

   MENU_BOARD_SETTINGS          ,

   EMPTY                        ,

   ITEM_ACCESS_OPERATOR         ,

   STATIC                       ,

   "开发板设置"                  } ,  // [02]数据管理

   


//---------------- 二级菜单项[4] : 开发板设置菜单 -------------------------------//

   

  {ITEM_SET_TIME                ,

   EMPTY                        ,   

   FUNC_SET_TIME                ,

   ITEM_ACCESS_OPERATOR         ,

   STATIC                       ,

   "设置时间"                    } ,  // [38]设置时间

   

  {ITEM_SET_BACKLIGHT           ,

   EMPTY                        ,

   FUNC_SET_BACKLIGHT           ,

   ITEM_ACCESS_OPERATOR         ,

   STATIC                       ,

   "设置液晶背光"                } ,  // [39]设置液晶背光   

   

};


//****************************************************************************//

//                                                                            //

//                                 菜单定义                                   //

//                                                                            //

//****************************************************************************//

const MENU_RES Menus[] =                                          
{

//--------------------------- Menus[0]: 主菜单 -----------------------------------//  

  {

    MENU_MAIN                                      ,  // 菜单索引

    EMPTY                                          ,

    EMPTY                                          ,

    "BW-DK5438"                                    ,

    {3,24,24,28,15,SINGLE_PAGE,EMPTY}              ,  

    {

      ITEM_HELP                                    ,  // 水表数据管理

      ITEM_BOARD_INFO                              ,  // 开发板信息

      ITEM_BOARD_SETTINGS                          ,  // 开发板设置

    }                                            

  }                                                ,


//---------------------------Menus[4]: 手持机管理菜单  -------------------------//   

  {

    MENU_BOARD_SETTINGS                            ,  // 菜单索引

    MENU_MAIN                                      ,

    ITEM_BOARD_SETTINGS                            ,

    "开发板设置"                                   ,

    {2,24,24,28,15,SINGLE_PAGE,EMPTY}              ,      

    {

      ITEM_SET_TIME                                ,  // 设置开发板时间

      ITEM_SET_BACKLIGHT                           ,  // 设置液晶背光

    }                                            

  }                                                ,

}                                                                     ;



#endif




欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4