📄 menu.i
字号:
/*SUBMENU of ID:32 */ 42, 4,
/*SUBMENU of ID:33 */ 46, 4,
/*SUBMENU of ID:03 */ 50, 3,
/*SUBMENU of ID:04 */ 53, 2,
/*SUBMENU of ID:53 */ 55, 2,
/*SUBMENU of ID:54 */ 57, 2,
/*SUBMENU of ID:05 */ 59, 2,
0
};
void ExecuteMenu(unsigned char MenuID);
/*******************************************************************************************************
** 函数名称: ExecuteMenu
** 功能描述: 菜单显示程序,每 100 mS 调用一次即可
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void ExecuteMenu(unsigned char MenuID)
{
if (MenuID == 50)
{
ReadBatterySTAT(1);
}
else if (MenuID == 51)
{
ReadBatterySTAT(2);
}
else if (MenuID == 52)
{
ReadBatterySTAT(3);
}
}
/*******************************************************************************************************
** 函数名称: MenuNo
** 功能描述: 菜单序号
** 输入参数: INT8U No:
** 输出参数:
********************************************************************************************************/
unsigned char MenuNo(unsigned char No)
{
if ((No >= 0) && (No <= 9))
{
return No + '0';
}
else if ((No >= 10) && (No <= 36))
{
return No - 10 + 'A';
}
else
{
return '?';
}
}
/*******************************************************************************************************
** 函数名称: ChooseRadioMenu
** 功能描述: 选择单选菜单
** 输入参数: INT8U ParamCaptionID:
** INT8U MenuDefineID:
** INT8U *Value
** 输出参数: 无
********************************************************************************************************/
/*
void ChooseRadioMenu(INT8U ParamCaptionID, INT8U MenuDefineID, INT8U *Value)
{
flash INT8U *Caption;
flash INT8U *pDefine;
INT8U Key;
INT8U Pos;
INT16U TopMenuItem;
INT16U CurrentMenuItem;
//INT8U i;
INT8U MenuCount;
delay_ms(10);
//LCD_WriteCaption(ParamCaptionID, 0);
//Pos = LCD_Position() - 1;
lcd_locate(0,0);
//WriteCGRAM(0x82,1,0);
//WriteCGRAM(0x83,2,0);
//WriteCGRAM(0x84,3,0);
pDefine = SubMenuDefine + (INT16U)2 * (INT16U)MenuDefineID;
MenuCount = pDefine[1];
TopMenuItem = pDefine[0];
CurrentMenuItem = *Value;
if (CurrentMenuItem > MenuCount - 1)
{
CurrentMenuItem=MenuCount - 1;
}
Key = INIT_KEY;
while (Key != BT_APPLY)
{
if (Key != NO_KEY)
{
lcd_write_byte((0x80 | Pos), CMD);
Caption = Menu + (CAPTION_LENGTH + 2) * (TopMenuItem + CurrentMenuItem - 1);
if (CurrentMenuItem == 0)
{
lcd_write_byte(3, DATA);
}
else if (CurrentMenuItem == MenuCount - 1)
{
lcd_write_byte(1, DATA);
}
else
{
lcd_write_byte(2, DATA);
}
//LCD_Write(MenuNo(CurrentMenuItem));
lcd_write_byte(' ', DATA);
lcd_write_byte('=', DATA);
lcd_print_stringF(Caption);
}
Key = read_keycode();
if (Key != NO_KEY)
{
if (Key == BT_UP)
{
if (CurrentMenuItem > 0)
{
CurrentMenuItem --;
}
}
else if (Key == BT_DOWN)
{
if (CurrentMenuItem < MenuCount - 1)
{
CurrentMenuItem ++;
}
}
else if (Key == BT_APPLY)
{
*Value = CurrentMenuItem;
}
else if (Key == BT_LEFT)
{
Key = BT_APPLY;
}
delay_ms(10)
}
}
}
*/
/*******************************************************************************************************
** 函数名称: ShowMenu
** 功能描述: 菜单显示程序,每 100 mS 调用一次即可
** 输入参数: 无
** 输出参数: 无
********************************************************************************************************/
void ShowMenu(void)
{
static flash unsigned char *pMenu;
static flash unsigned char *pDefine;
static flash unsigned char *Caption;
static unsigned int TopMenuItem = 0;
static unsigned int CurrentMenuItem = 0;
static unsigned char Stack[3][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static unsigned char StackIndex = 0;
static unsigned char DrawMenuItem[6]={0x80,0xC0,1,0,0,1};
static unsigned char MenuCount;
static unsigned char FlagMenuInit = 1; // 显示菜单框架
static unsigned char Key = 0 ; // 第一次显示菜单
unsigned char i = 0;
unsigned char j = 0;
if(FlagMenuInit)
{
FlagMenuInit = 0; // 清第一次标志
lcd_cls(); //清屏
pMenu = Menu;
pDefine = SubMenuDefine;
MenuCount = SubMenuDefine[1];
//WriteCGRAM(0x80,0,0); // 写入特殊字符
//WriteCGRAM(0x81,1,0); // 写入特殊字符
}
if (Key != 63)
{
for (j=0; j<2; j++)
{
lcd_write_byte(DrawMenuItem[0 + j], 0);
if (DrawMenuItem[(unsigned char)(j + 4)] < MenuCount)
{
Caption = Menu + (16 + 2) * (TopMenuItem + DrawMenuItem[(unsigned char)(j + 4)]);
if (DrawMenuItem[(unsigned char)(j + 2)])
{
lcd_write_byte(0, 1);
lcd_write_byte(MenuNo(DrawMenuItem[(unsigned char)(j + 4)] + 1), 1);
lcd_write_byte('.', 1);
lcd_print_stringF(Caption);
}
else
{
lcd_print_stringF(" ");
lcd_write_byte(MenuNo(DrawMenuItem[(unsigned char)(j + 4)] + 1), 1);
lcd_write_byte('.', 1);
lcd_print_stringF(Caption);
}
}
else
{
for (i=0; i<16; i++)
{
lcd_write_byte(' ', 1);
}
}
}
}
Key = read_keycode();
if (Key != 63)
{
if (Key == 62)
{
if (DrawMenuItem[3])
{
DrawMenuItem[2]=1;
DrawMenuItem[3]=0;
}
else if (DrawMenuItem[4]>0)
{
DrawMenuItem[4]--;
DrawMenuItem[5]--;
}
}
else if (Key == 61)
{
if (DrawMenuItem[2])
{
DrawMenuItem[2]=0;
DrawMenuItem[3]=1;
}
else if (DrawMenuItem[5]<MenuCount-1)
{
DrawMenuItem[4]++;
DrawMenuItem[5]++;
}
}
else if ((Key == 47) || (Key == 55))
{
if (DrawMenuItem[2])
{
CurrentMenuItem = TopMenuItem + DrawMenuItem[4];
}
else
{
CurrentMenuItem = TopMenuItem + DrawMenuItem[5];
}
if (CurrentMenuItem < 60)
{
pMenu = Menu + ((16 + 2) * CurrentMenuItem) + 16 + 1;
if (*pMenu > 6)
{
Stack[0][StackIndex] = pDefine-SubMenuDefine;
Stack[1][StackIndex] = DrawMenuItem[2];
Stack[2][StackIndex] = DrawMenuItem[4];
StackIndex ++;
pDefine = SubMenuDefine + ((unsigned int)(*pMenu - 6) * 2);
TopMenuItem =* pDefine - 1;
MenuCount = pDefine[1];
DrawMenuItem[2] = 1;
DrawMenuItem[3] = 0;
DrawMenuItem[4] = 0;
DrawMenuItem[5] = 1;
}
else if (*pMenu <= 6)
{
ExecuteMenu(CurrentMenuItem + 1);
}
}
}
else if ((Key == 31) || (Key == 59))
{
if (StackIndex > 0)
{
StackIndex --;
pDefine=SubMenuDefine + (unsigned int)(Stack[0][StackIndex]);
TopMenuItem=*pDefine - 1;
MenuCount=pDefine[1];
DrawMenuItem[2] = Stack[1][StackIndex];
DrawMenuItem[3] = 1 - Stack[1][StackIndex];
DrawMenuItem[4] = Stack[2][StackIndex];
DrawMenuItem[5] = Stack[2][StackIndex] + 1;
}
}
}
}
/********************************************************************************************************
** END OF FILE
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -