查看: 1755|回复: 3
打印 上一主题 下一主题

430也要GUI之一: 多级文本菜单开源

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-6 00:37:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.C                                                            //
  • // 说明:  BW-DK5438开发板多级文本菜单应用程序                               //
  • // 编译:  IAR Embedded Workbench IDE for MSP430 v4.21                       //
  • // 版本:  v1.1                                                              //
  • // 编写:  JASON.ZHANG                                                       //
  • // 版权:  北京拓普博维电子技术有限公司                                      //
  • //                                                                           //
  • //===========================================================================//
  • #include "main.h"
  • #pragma vector=TIMERB1_VECTOR
  • __interrupt void TIMERB1_ISR(void)
  • {
  •   VmainMon()                                                 ;
  •   Event    |= SHOULD_FLICKER                                 ;
  •   TBCTL    &= ~TBIFG                                         ;
  • }
  • #pragma vector=RTC_VECTOR
  • __interrupt void RTC_ISR(void)
  • {
  •   RTCCTL01  &=~(RTCRDYIFG + RTCTEVIFG)                       ;
  •   Event  |= SHOULD_DISPLAY_TIME                              ;
  • }
  • void main(void)
  • {
  •   WDTCTL = WDTPW+WDTHOLD                                     ;
  •   Init_Func()                                                ;
  •   Init()                                                     ;
  •   MAIN_POWER_ON                                              ;
  •   for(;;)
  •   {
  •     LCD_Init()                                               ;
  •     Clear_LCD(Color_BK)                                      ;
  •     _EINT()                                                  ;
  •     RunMenu()                                                ;
  •   }
  • }
  • //=====================================================================//
  • //                                                                     //
  • //函数:void RunMenu(void)                                             //
  • //描述:执行菜单调度                                                   //
  • //                                                                     //
  • //=====================================================================//
  • void RunMenu(void)
  • {
  •   unsigned char key = 0xFF , menu_index  , SubMenuIndex                   ;
  •   unsigned char First_Item , Active_Item , Active_Item_Index              ;
  •   unsigned char CallBackIndex                                             ;
  •   Clear_LCD(STATUS_BK_COLOR)                                              ;
  •   Color_BK = STATUS_BK_COLOR                                              ;
  •   PutStringCN24(10,294,"确认")                                            ; // 底栏
  •   PutStringCN24(185,294,"取消")                                           ;
  •   LoadMenu(MENU_MAIN,PERMISSION)                                          ;
  •   Initial_Menu()                                                          ;
  •   DisplayTime()                                                           ;
  •   for(;;)
  •   {
  •     key = GetKeyPress()                                                   ;
  •     switch(key)
  •     {
  •     case Up: case Down: case Left: case Right:
  •       MenuMessage(key)                                                    ;
  •       break                                                               ;
  •     case  8:
  •       MenuMessage(Up)                                                     ;
  •       break                                                               ;
  •     case  0:
  •       MenuMessage(Down)                                                   ;
  •       break                                                               ;
  •     case Esc:
  •       {
  •         menu_index = GetMenuIndex()                                       ;
  •         if(Menus[menu_index].MasterMenu!=EMPTY)
  •         {
  •           LoadMenu(Menus[menu_index].MasterMenu,PERMISSION)               ;
  •           Initial_Menu()                                                  ;
  •         }
  •         break                                                             ;
  •       }
  •     case OK: case Enter:
  •       {
  •         First_Item          = GetFirstItem()                              ;
  •         Active_Item         = GetActiveItem()                             ;
  •         Active_Item_Index   = GetActiveItemIndex()                        ;
  •         if(MENU_ITEM[Active_Item_Index].CallBackFuncIndex!=EMPTY)           // 有操作函数
  •         {
  •           CallBackIndex= MENU_ITEM[Active_Item_Index].CallBackFuncIndex   ;
  •           SubMenuIndex = MENU_ITEM[Active_Item_Index].SubMenuIndex        ;
  •           if(SubMenuIndex!=EMPTY)                                           // 有操作函数且有动态子菜单
  •           {
  •             SubMenuIndex = MENU_ITEM[Active_Item_Index].SubMenuIndex      ;
  •             if(Item_OP[CallBackIndex](0,Active_Item_Index  )==0x00)         // 生成子菜单成功
  •               Initial_Menu()                                              ; // 初始化动态子菜单
  •             else
  •               Redraw_Menu(First_Item,Active_Item)                         ; // 未生成子菜单,重画原菜单
  •           }
  •           else
  •           {
  •             Item_OP[CallBackIndex](0,Active_Item_Index  )                 ; // 无动态子菜单
  •             Redraw_Menu(First_Item,Active_Item)                           ; // 重画菜单
  •           }
  •         }
  •         else
  •         if(MENU_ITEM[Active_Item_Index].SubMenuIndex!=EMPTY)
  •         {
  •           LoadMenu(MENU_ITEM[Active_Item_Index].SubMenuIndex,PERMISSION)  ;
  •           Initial_Menu()                                                  ;
  •         }
  •         break                                                             ;
  •       }
  •     case Power:
  •       return                                                              ;
  •     default:
  •       break                                                               ;
  •     }
  •   }
  • }
  • //=====================================================================//
  • //                                                                     //
  • //函数:Show_Help(NC1,NC2)                                             //
  • //描述:显示帮助信息                                                   //
  • //                                                                     //
  • //=====================================================================//
  • unsigned char Show_Help(unsigned int NC1,unsigned char NC2)
  • {
  •   unsigned char key                                          ;
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   DrawRectFill(0,30 ,240,30 ,WINDOW_COLOR)                   ;
  •   Color    = TITLE_COLOR                                     ;
  •   Color_BK = TITLE_BK_COLOR                                  ;
  •   PutStringCN24(70,33,"帮助信息")                            ;
  •   DrawRectFill(0,290,240,30,STATUS_BK_COLOR)                 ;
  •   Color    = STATUS_COLOR                                    ;
  •   Color_BK = STATUS_BK_COLOR                                 ;
  •   PutStringCN24(185,294,"返回")                              ;
  •   Color    = WINDOW_COLOR                                    ;
  •   Color_BK = WINDOW_BK_COLOR                                 ;
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   PutString24M(10,70 ,"↑键:[8]")                           ;
  •   PutString24M(10,100,"↓键:[0]")                           ;
  •   PutString24M(10,130,"菜单选择:[Enter]")                   ;
  •   PutString24M(10,160,"菜单返回:[Cancel]")                  ;
  •   PutString24M(10,190,"上 一 页:[←]")                      ;
  •   PutString24M(10,220,"下 一 页:[→]")                      ;
  •   PutString24M(10,250,"输入法切换:
  • ")                     ;
  •   for(;;)
  •   {
  •     key  = ReadKey()                                         ;
  •     if(key==Esc)   break                                     ;
  •   }
  •   DrawRectFill(0,290,240,30,STATUS_BK_COLOR)                 ;
  •   Color_BK = STATUS_BK_COLOR                                 ;
  •   Color    = STATUS_COLOR                                    ;
  •   PutStringCN24(10,294,"确认")                               ; // 底栏
  •   Color    = WINDOW_COLOR                                    ;
  •   Color_BK = WINDOW_BK_COLOR                                 ;
  •   return 0x00                                                ;
  • }
  • //=====================================================================//
  • //                                                                     //
  • //函数:Set_Time(NC1,NC2)                                              //
  • //说明:演示函数,显示时间设置成功                                     //
  • //                                                                     //
  • //=====================================================================//
  • unsigned char Set_Time(unsigned int NC1,unsigned char NC2)
  • {
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   DrawRectFill(0,30 ,240,30 ,WINDOW_COLOR)                   ;
  •   Color    = TITLE_COLOR                                     ;
  •   Color_BK = TITLE_BK_COLOR                                  ;
  •   PutStringCN24(70,33,"设置时间")                            ;
  •   DrawRectFill(0,290,240,30,STATUS_BK_COLOR)                 ;
  •   Color    = STATUS_COLOR                                    ;
  •   Color_BK = STATUS_BK_COLOR                                 ;
  •   PutStringCN24(185,294,"返回")                              ;
  •   Color    = WINDOW_COLOR                                    ;
  •   Color_BK = WINDOW_BK_COLOR                                 ;
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   MessageBox("信息提示","时间已设置成功")                    ;
  •   return 0x00                                                ;
  • }
  • //=====================================================================//
  • //                                                                     //
  • //函数:Set_Backlight(NC1,NC2)                                         //
  • //说明:演示函数,显示背光已设置                                       //
  • //                                                                     //
  • //=====================================================================//
  • unsigned char Set_Backlight(unsigned int NC1,unsigned char NC2)
  • {
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   DrawRectFill(0,30 ,240,30 ,WINDOW_COLOR)                   ;
  •   Color    = TITLE_COLOR                                     ;
  •   Color_BK = TITLE_BK_COLOR                                  ;
  •   PutStringCN24(70,33,"设置背光")                            ;
  •   DrawRectFill(0,290,240,30,STATUS_BK_COLOR)                 ;
  •   Color    = STATUS_COLOR                                    ;
  •   Color_BK = STATUS_BK_COLOR                                 ;
  •   PutStringCN24(185,294,"返回")                              ;
  •   Color    = WINDOW_COLOR                                    ;
  •   Color_BK = WINDOW_BK_COLOR                                 ;
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   MessageBox("信息提示","背光已设置成功")                    ;
  •   return 0x00                                                ;
  • }
  • //=====================================================================//
  • //                                                                     //
  • //函数:View_Board_Info(NC1,NC2)                                       //
  • //描述:显示帮助信息                                                   //
  • //                                                                     //
  • //=====================================================================//
  • unsigned char View_Board_Info(unsigned int NC1,unsigned char NC2)
  • {
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   DrawRectFill(0,30 ,240,30 ,WINDOW_COLOR)                   ;
  •   Color    = TITLE_COLOR                                     ;
  •   Color_BK = TITLE_BK_COLOR                                  ;
  •   PutStringCN24(70,33,"开发板信息")                          ;
  •   DrawRectFill(0,290,240,30,STATUS_BK_COLOR)                 ;
  •   Color    = STATUS_COLOR                                    ;
  •   Color_BK = STATUS_BK_COLOR                                 ;
  •   PutStringCN24(185,294,"返回")                              ;
  •   Color    = WINDOW_COLOR                                    ;
  •   Color_BK = WINDOW_BK_COLOR                                 ;
  •   DrawRectFill(0,60,240,230,WINDOW_BK_COLOR)                 ;
  •   MessageBox("信息提示","BW_DK5438")                         ;
  •   return 0x00                                                ;
  • }
  • //=====================================================================//
  • //函数:void VmainMon(void) —主电池电压检测                           //
  • //=====================================================================//
  • void VmainMon(void)
  • {
  •   static unsigned char i = 0                              ;
  •   static float Vmain = 0                                  ;
  •   ADC12CTL0 |= ADC12SC                                    ;
  •   while (!(ADC12IFG & BIT0))                              ;
  •   Vmain     += ADC12MEM0*7.5/4095-0.4                     ;
  •   if(++i==10)
  •   {
  •     Vmain   /= 10                                         ;
  •     VmainAvr = Vmain                                      ;
  •     Vmain    = 0                                          ;
  •     i        = 0                                          ;
  •   }
  • }
  • //=====================================================================//
  • //函数:void VmainMon(void) —显示主电源电量                           //
  • //=====================================================================//
  • void DrawBattery(float voltage)
  • {
  •   DrawRectFill(213,8,24,12,STATUS_BK_COLOR)              ;
  •   DrawRect(213,11,3,6,Green)                             ;
  •   DrawRect(215,8,20,12,Green)                            ;
  •   if(voltage>3.2)
  •     DrawRectFill(217,10,4,9,Green)                       ;
  •   if(voltage>3.0)
  •     DrawRectFill(223,10,4,9,Green)                       ;
  •   if(voltage>2.8)
  •     DrawRectFill(229,10,4,9,Green)                       ;
  • }
  • //=====================================================================//
  • //函数:void ReadKey(void) —读取按键                                  //
  • //=====================================================================//
  • unsigned char ReadKey(void)
  • {
  •   unsigned char column,row,key                   ;
  •   unsigned char  Key                             ;
  •   ROW_IN_COL_OUT                                 ;
  •   row = KEY_PORT_IN&(KPR0+KPR1+KPR2+KPR3)        ;
  •   if(row!=(KPR0+KPR1+KPR2+KPR3))
  •   {
  •     CLO_IN_ROW_OUT                               ;
  •     column  = KEY_PORT_IN&(KPC0+KPC1+KPC2+KPC3)  ;
  •     ROW_IN_COL_OUT                               ;
  •     Key     = row + column                       ;
  •     _NOP();
  •     switch(Key)
  •     {
  •     case 0x7E:
  •       key   = Enter                              ;
  •       break                                      ;
  •     case 0x7D:
  •       key   = Cancel                             ;
  •       break                                      ;
  •     case 0x02FE:
  •       key   = Up                                 ;
  •       break                                      ;
  •     case 0x02FD:
  •       key   = Down                               ;
  •       break                                      ;
  •     case 0xEE:
  •       key   = Left                               ;
  •       break                                      ;
  •     case 0xBE:
  •       key   = Right                              ;
  •       break                                      ;
  •     case 0x7B:
  •       key   = F1                                 ;
  •       key   = Delete                             ;
  •       break                                      ;
  •     case 0x77:
  •       key   = F3                                 ;
  •       key   = Backspace                          ;
  •       break                                      ;
  •     case 0xE7:
  •       key   =  1                                 ;
  •       break                                      ;
  •     case 0xD7:
  •       key   =  2                                 ;
  •       break                                      ;
  •     case 0xB7:
  •       key   =  3                                 ;
  •       break                                      ;
  •     case 0xEB:
  •       key   =  4                                 ;
  •       break                                      ;
  •     case 0xDB:
  •       key   =  5                                 ;
  •       break                                      ;
  •     case 0xBB:
  •       key   =  6                                 ;
  •       break                                      ;
  •     case 0xED:
  •       key   =  7                                 ;
  •       break                                      ;
  •     case 0xDD:
  •       key   =  8                                 ;
  •       break                                      ;
  •     case 0xBD:
  •       key   =  9                                 ;
  •       break                                      ;
  •     case 0xDE:
  •       key   =  0                                 ;
  •       break                                      ;
  •     default:
  •       key   =  0xFF                              ;
  •     }
  •   }
  •   else
  •     key            =  0xFF                       ;
  •   KEY_PORT_DIR     =  0xFF                       ;
  •   KEY_PORT_OUT     =  0x00                       ;
  •   return key                                     ;
  • }
  • unsigned char GetKeyPress(void)
  • {
  •   unsigned char Key                       ;
  •   static unsigned long power_time = 0     ;
  •   for(;;)
  •   {
  •     Key   = ReadKey()                     ;
  •     if(Key==Power)
  •     {
  •       if(++power_time>300000)
  •         return Key                        ;
  •       else
  •         continue                          ;
  •     }
  •     else
  •       power_time  = 0x00                  ;
  •     if(Key==0xFF)
  •     {
  •       __delay_cycles(560000)              ;
  •       Key   = ReadKey()                   ;
  •       if(Key==0xFF)     break             ;
  •     }
  •   }
  •   Interval  = 0                           ;
  •   for(;;)
  •   {
  •     if(Event&SHOULD_FLICKER)
  •     {
  •       Event  &=~SHOULD_FLICKER            ;
  •       DrawBattery(VmainAvr)               ;
  •     }
  •     if(Event&SHOULD_DISPLAY_TIME)
  •     {
  •       Event  &=~SHOULD_DISPLAY_TIME       ;
  •       DisplayTime()                       ;
  •     }
  •     Key = ReadKey()                       ;
  •     if(Interval++>MAX_INTERVAL)
  •       Interval   =MAX_INTERVAL            ;
  •     if(Key!=0xFF)
  •     {
  •        __delay_cycles(560000)             ;
  •       if(Key==ReadKey())
  •       {
  •         return Key                        ;
  •       }
  •     }
  •   }
  • }
  • void DisplayTime(void)
  • {
  •   unsigned char Hour,Minute                       ;
  •   unsigned int color_temp,bkcolor_temp            ;
  •   char string[6]                                  ;
  •   Minute = RTCMIN                                 ;
  •   Hour   = RTCHOUR                                ;
  •   DrawRectFill(160,0,50,29,STATUS_BK_COLOR)       ;
  •   sprintf(string,"%02d:%02d",Hour,Minute)         ;
  •   color_temp   = Color                            ;
  •   bkcolor_temp = Color_BK                         ;
  •   Color        = STATUS_COLOR                     ;
  •   Color_BK     = STATUS_BK_COLOR                  ;
  •   PutStringEN16(160,8,(unsigned char *)string)    ;
  •   Color        = color_temp                       ;
  •   Color_BK     = bkcolor_temp                     ;
  • }
  • //=====================================================================//
  • //函数:void Init_Func(void)                                           //
  • //描述:初始化函数列表                                                 //
  • //=====================================================================//
  • void Init_Func(void)
  • {
  •   Item_OP[FUNC_SHOW_HELP]      = Show_Help        ; // 帮助信息
  •   Item_OP[FUNC_BOARD_INFO]     = View_Board_Info  ; // 开发板信息
  •   Item_OP[FUNC_SET_TIME]       = Set_Time         ; // 设置时间
  •   Item_OP[FUNC_SET_BACKLIGHT]  = Set_Backlight    ; // 设置背光
  • }
  • //=====================================================================//
  • //函数:void MessageBox(char *title,char *string)                      //
  • //功能:显示消息框                                                     //
  • //参数: title  —消息框标题                                            //
  • //      string —消息框内容                                            //
  • //=====================================================================//
  • void MessageBox(char *title,char *string)
  • {
  •   unsigned char key                               ;
  •   _DINT()                                         ;
  •   Color    = TITLE_COLOR                          ;
  •   Color_BK = TITLE_BK_COLOR                       ;
  •   DrawRectFill(20,115,200,30,TITLE_BK_COLOR)      ;
  •   PutStringCN24(120-strlen(title)*6,118,
  •                 (unsigned char *)title  )         ;
  •   DrawRectFill(20,145,200,80,WINDOW_BK_COLOR)     ;
  •   DrawRectFill(20,145,200,80,0xFFFF)              ;
  •   DrawRect(20,145,200,80,WINDOW_COLOR)            ;
  •   Color    = WINDOW_COLOR                         ;
  •   Color_BK = 0xFFFF                               ;
  •   PutString24M(120-strlen(string)*6,173,
  •                (unsigned char *)string  )         ;
  •   Color_BK = WINDOW_BK_COLOR                      ;
  •   _EINT()                                         ;
  •   for(;;)
  •   {
  •     key  =  GetKeyPress()                         ;
  •     if(key==Enter||key==Esc||key==OK)
  •       break                                       ;
  •   }
  • }

复制代码


main.h
  • #include "msp430x54x.h"
  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <string.h>
  • #include "Menu.h"
  • #include "MenuRes.h"
  • //#include "Edit.h"
  • #include "TFTDRV430.H"
  • #include "PIN_DEF.H"
  • #include "RTC.H"
  • #define    MAX_INTERVAL          150000
  • #define    PERMISSION              0x03 // 菜单权限
  • #define    RETURN_MASTER           0x33 // 函数执行完回到主菜单
  • #define    GOTO_SUB                0x44 // 函数执行完执行子菜单
  • ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  • //#define Power  BIT0
  • #define    VALID                   0x11
  • #define    INVALID                 0x22
  • //------------------------------- 事件类型定义----------------------------------//
  • #define    SHOULD_DISPLAY_TIME     BIT0  // 应更新时间显示
  • #define    SHOULD_FLICKER          BIT1  // 应闪烁光标
  • #define    RX_FRAME_RECEIVED       BIT2  // 收到有效数据帧
  • #define    TX_FRAME_WAITING        BIT3  // 串口数据等待发送
  • #define    LOWPOWER_DETECTED       BIT5  // 电池容量低
  • #define    SHOULD_UPDATE_WDT       BIT6  // 更新看门狗定时器
  • #define    RX_PC_RECEIVED          BIT7  // 上位机接收到数据
  • #define    CARD_DETECTED           BIT8  // 检测到射频卡
  • #define    PRE_EDIT                0xFE  // 切换至上一Edit控件
  • #define    NEXT_EDIT               0xFD  // 切换至下一Edit控件
  • #define    INP_DIG                 BIT0  // 输入模式 —数字
  • #define    INP_EN                  BIT1  // 输入模式 —英文字母
  • #define    INP_CN                  BIT2  // 输入模式 —汉字
  • ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  • unsigned int OP_MODE                           ; // 操作模式-系统员级/管理员级/操作员级
  • MENU Menu                                      ;
  • unsigned int  Event                                    ;
  • unsigned char INP_MODE         = INP_CN                ; // 输入模式
  • unsigned char INP_MODE_LMT     = INP_CN+INP_EN+INP_DIG ; // 输入模式限制
  • unsigned long int Interval     = 0xFFFFFFFF            ; // 输入键间隔
  • float    VmainAvr              = 0                     ;
  • unsigned int Color,Color_BK                            ;
  • unsigned char (*Item_OP[ALL_ITEMS])(unsigned int,unsigned char)               ;
  • unsigned char View_Board_Info(unsigned int NC1,unsigned char NC2)             ;
  • unsigned char Set_Time(unsigned int NC1,unsigned char NC2)                    ;
  • unsigned char Set_Backlight(unsigned int NC1,unsigned char NC2)               ;
  • void Init_Func(void)                                                          ;
  • void Wait_Key(unsigned char key_waited)                                       ;
  • void Display_Time(void)                                                       ;
  • void VmainMon(void)                                                           ;
  • extern void Init_MCLK(void)                                                   ;
  • extern void Init_KeyPad(void)                                                 ;
  • extern void Init_RTC(void)                                                    ;
  • extern void Init_timer(void)                                                  ;
  • extern void Init_Port(void)                                                   ;
  • extern void Init_ADC(void)                                                    ;
  • extern void BackLight(void)                                                   ;
  • extern void Init_UART(void)                                                   ;
  • extern void Init_UART_115200(void)                                            ;
  • extern void Init(void)                                                        ;
  • extern void str_cpy(char* Destination,char* Source,unsigned char Num)         ;
  • //////////////////////////////////////////////////////////////////////////////////////////////////////
  • extern void Init_SPI(void)                                                     ;
  • void RunMenu(void)                                                             ;
  • unsigned char ReadKey(void)                                                    ;
  • unsigned char Input_CN(char first_key,char* buffer)                            ;
  • unsigned char GetKeyPress(void)                                                ;
  • void DrawBattery(float voltage)                                                ;
  • void DisplayTime(void)                                                         ;
  • unsigned char Read_Edit_Val(unsigned char Edit_Index,char* string,
  •                             unsigned char Renew_Edit_Index        )            ;
  • unsigned char Valve_Mantain_Open(unsigned int NC1,unsigned char NC2)           ;
  • void MessageBox(char *title,char *string)


回复

使用道具 举报

板凳
 楼主| 发表于 2015-10-6 00:37: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                   ;

}
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2015-10-6 00:37:56 | 只看该作者
//===========================================================================//

//                                                                           //

// 文件:  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
回复 支持 反对

使用道具 举报

4#
 楼主| 发表于 2015-10-6 00:38:10 | 只看该作者
//===========================================================================//

//                                                                           //

// 文件:  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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表