📄 menu.c
字号:
/*********************************************************************************************************
* Menu Function
* QiZhao,2007
* All Rights Reserved
* File : menu.c
* By : QiZhao
* Contact : zq1987731@163.com
*
* Version : V1.3 α
* Corrector : QiZhao
* Date : 2008.2.1 (Last modified)
*
* Remarks : REFRESH_MENU_DIS (); MAIN_MENU ();
*
*********************************************************************************************************/
#include "menu.h"
/*********************************************************************************************************
*
* Menu Display Refresh
*
*********************************************************************************************************/
extern void REFRESH_MENU_DIS (void)
{
uchar LineMete = Level[MENU_LIST[Select_Index].Key_Lv][2];
CLEAR_DIS ();
SELECT_LINE (Select_Line);
do
{
DIS_LCD (1,2,MENU_LIST[First_Index ].KeyWord,MENU_LIST[First_Index ].Word_Size);
if (--LineMete == 0) break;
DIS_LCD (2,2,MENU_LIST[First_Index + 1].KeyWord,MENU_LIST[First_Index + 1].Word_Size);
if (--LineMete == 0) break;
DIS_LCD (3,2,MENU_LIST[First_Index + 2].KeyWord,MENU_LIST[First_Index + 2].Word_Size);
if (--LineMete == 0) break;
DIS_LCD (4,2,MENU_LIST[First_Index + 3].KeyWord,MENU_LIST[First_Index + 3].Word_Size);
}while (0);
}
/*********************************************************************************************************
*
* Determine whether the current Index is the first functional form function
* Return: TRUE or FALSE
*
*********************************************************************************************************/
static bit MenuLevelStart (void)
{
uchar i = MENULEVEL;
do
{
i--;
if (Select_Index == Level[i][0])
return TRUE;
}while (i);
return FALSE;
}
/*********************************************************************************************************
*
* Index judge whether the current form is a function of the final function
* Return: TRUE or FALSE
*
*********************************************************************************************************/
static bit MenuLevelEnd (void)
{
uchar i = MENULEVEL;
do
{
i--;
if (Select_Index == Level[i][1])
return TRUE;
}while (i);
return FALSE;
}
/*********************************************************************************************************
*
* Error Handling
*
*********************************************************************************************************/
static void NoThisFunction (void)
{
unsigned int i,j;
CLEAR_DIS ();
DIS_LCD (2,1,"此项功能开发中",14);
i = 65535;
j = 10;
do
{
do
{
i--;
}while (i);
j--;
}while (j);
MENU_CANCEL ();
}
/*********************************************************************************************************
*
* Key Function
*
*********************************************************************************************************/
extern void MAIN_MENU (void)
{
uchar keytemp;
do
{
keytemp = KEY_SCAN ();
}while (!keytemp);
switch (keytemp)
{
case '1': MENU_UP (); break;
case '2': MENU_DOWN (); break;
case '3': MENU_ENTER (); break;
case '4': MENU_CANCEL (); break;
default: break;
}
}
/*********************************************************************************************************
*
* Menu Move Up A Line
*
*********************************************************************************************************/
static void MENU_UP (void)
{
if (MenuLevelStart ())
{
if (Level[MENU_LIST[Select_Index].Key_Lv][2] >= 4 )
{
First_Index = Level[MENU_LIST[Select_Index].Key_Lv][1] - 3;
Select_Index = Level[MENU_LIST[Select_Index].Key_Lv][1];
Select_Line = 4;
REFRESH_MENU_DIS ();
}
else
{
Select_Index = Level[MENU_LIST[Select_Index].Key_Lv][1];
Select_Line = Level[MENU_LIST[Select_Index].Key_Lv][2];
REFRESH_MENU_DIS();
}
}
else
{
if (Select_Line == 1)
{
First_Index--;
Select_Index--;
Select_Line = 1;
REFRESH_MENU_DIS ();
}
else
{
Select_Line--;
Select_Index--;
REFRESH_MENU_DIS ();
}
}
}
/*********************************************************************************************************
*
* Menu Move Down A Line
*
*********************************************************************************************************/
static void MENU_DOWN (void)
{
if (MenuLevelEnd ())
{
First_Index = Level[MENU_LIST[Select_Index].Key_Lv][0];
Select_Index = Level[MENU_LIST[Select_Index].Key_Lv][0];
Select_Line = 1;
REFRESH_MENU_DIS ();
}
else
{
if (Select_Line != 4)
{
Select_Index++;
Select_Line++;
SELECT_LINE (Select_Line);
REFRESH_MENU_DIS ();
}
else
{
First_Index++;
Select_Index++;
REFRESH_MENU_DIS ();
}
}
}
/*********************************************************************************************************
*
* Menu Cancel Option
*
*********************************************************************************************************/
static void MENU_CANCEL (void)
{
if (Select_Index != M_Size - 1)
Select_Index = MENU_LIST[Select_Index].Cancel_Index;
else
Select_Index = Last_Index;
if (Level[MENU_LIST[Select_Index].Key_Lv][2] >= 4)
{
if(Select_Index > Level[MENU_LIST[Select_Index].Key_Lv][1] - 3)
{
First_Index = Level[MENU_LIST[Select_Index].Key_Lv][1] - 3;
Select_Line = 4 - (Level[MENU_LIST[Select_Index].Key_Lv][1]-Select_Index);
REFRESH_MENU_DIS ();
}
else
{
First_Index = Select_Index;
Select_Line = 1;
REFRESH_MENU_DIS ();
}
}
else
{
First_Index = Level[MENU_LIST[Select_Index].Key_Lv][0];
Select_Line = Select_Index - Level[MENU_LIST[Select_Index].Key_Lv][0] + 1;
REFRESH_MENU_DIS ();
}
}
/*********************************************************************************************************
*
* Menu Enter Function
*
*********************************************************************************************************/
static void MENU_ENTER (void)
{
Last_Index = Select_Index;
Select_Index = MENU_LIST[Select_Index].Enter_Index;
if (Select_Index != M_Size - 1)
{
First_Index = Level[MENU_LIST[Select_Index].Key_Lv][0];
Select_Line = 1;
REFRESH_MENU_DIS ();
}
else
{
switch (Last_Index)
{
//case 0: break;
//case 1: break;
case 2: FUN_1_1(); break;
case 3: FUN_1_2(); break;
case 4: FUN_1_3(); break;
//case 5: break;
case 6: FUN_2_1(); break;
case 7: FUN_2_2(); break;
case 8: FUN_2_3(); break;
case 9: FUN_2_4(); break;
case 10: FUN_3_1(); break;
case 11: FUN_3_2(); break;
case 12: FUN_3_3(); break;
case 13: FUN_3_4(); break;
case 14: FUN_3_5(); break;
//case 15: break;
case 16: FUN_2_5(); break;
case 17: FUN_2_6(); break;
case 18: FUN_2_7(); break;
case 19: FUN_2_8(); break;
//case 20: break;
case 21: FUN_3_6(); break;
case 22: FUN_3_7(); break;
case 23: FUN_3_8(); break;
case 24: FUN_3_9(); break;
case 25: FUN_4_1(); break;
case 26: FUN_4_2(); break;
case 27: FUN_4_3(); break;
case 28: FUN_4_4(); break;
case 29: FUN_4_5(); break;
//case 30: break;
default: NoThisFunction(); break;
}
}
}
/*********************************************************************************************************
*
* Actual functionality
*
*********************************************************************************************************/
static FUN_1_1()
{
}
static FUN_1_2()
{
}
static FUN_1_3()
{
}
static FUN_2_1()
{
}
static FUN_2_2()
{
}
static FUN_2_3()
{
}
static FUN_2_4()
{
}
static FUN_2_5()
{
}
static FUN_2_6()
{
}
static FUN_2_7()
{
}
static FUN_2_8()
{
}
static FUN_3_1()
{
}
static FUN_3_2()
{
}
static FUN_3_3()
{
}
static FUN_3_4()
{
}
static FUN_3_5()
{
}
static FUN_3_6()
{
}
static FUN_3_7()
{
}
static FUN_3_8()
{
}
static FUN_3_9()
{
}
static FUN_4_1()
{
}
static FUN_4_2()
{
}
static FUN_4_3()
{
}
static FUN_4_4()
{
}
static FUN_4_5()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -