enum { Menu, SHYCSH, JSGSH, RQXZH, SHYBH, LSHSHJ, DAYIN, DELAY, AREA, SHYZZH, SHYPZH, SHYTJ, SHYBZH, SHYXSH, VEIW_LSH, DEL_LSH, TAB_MAX }; typedef struct { uchar MenuIndex; // 当前状态索引号 uchar Enter; // 按下"enter"键时转向的状态索引号 uchar Esc; // 按下"Esc"键时转向的状态索引号 uchar Left; // 按下"Left"键时转向的状态索引号 uchar Right; // 按下"Right"键时转向的状态索引号 uchar Up; // 按下"Up"键时转向的状态索引号 uchar Down; // 按下"Down"键时转向的状态索引号 void (code *EnterOperate)(); // 按下"enter"应该执行的功能操作 }KeyTabStruct;
void (code *KeyFuncPc)(); // 按键功能指针
KeyTabStruct code KeyTab[TAB_MAX];
uchar MenuId=Menu, // 当前菜单索引号 MenuNextId=SHYCSH, // 当前活动菜单索引号 FuncId=0, // 菜单函数运行状态字 Position; // 光标索引号
void Task_Menu() { KeyFuncPc=KeyTab[MenuId].EnterOperate; (*KeyFuncPc)(); } /*================================================================= 函数原型:void Menu_Face() 函数说明:菜单主界面 入口参数:无 出口参数:无 =================================================================*/ void Menu_Face() { uchar pos;
switch (FuncId) { case 0: Lcd_Clr(); Disp_Face(); FuncId++; break; case 1: if (!_testbit_(Key_Fg)) { break; } switch (New_Key) { case Key_Up: if (KeyTab[MenuNextId].Up!=0xff) { pos=MenuNextId; MenuNextId=KeyTab[MenuNextId].Up; Rufur_Face(pos,MenuNextId); } break; case Key_Right: if (KeyTab[MenuNextId].Right!=0xff) { pos=MenuNextId; MenuNextId=KeyTab[MenuNextId].Right; Rufur_Face(pos,MenuNextId); } break; case Key_Esc: Menu_Fg=0; Run_Fg=1; MenuId=KeyTab[MenuId].Esc; FuncId=0; break; case Key_Enter: MenuId=MenuNextId; MenuNextId=KeyTab[MenuId].Enter; FuncId=0; break; case Key_Area: MenuId=AREA; FuncId=0; break; } break; default: FuncId=0; break; } }
|