📄 sample_mai__.c
字号:
Type = SubMenuDefine[SubMenuDefine_Type] & 0x0F;
if (Type == MENU_SUBITEM)
{
GUI_Push_Stack();
MenuGui.TopItemID = SubMenuDefine[SubMenuDefine_FirstItemAddr];
MenuGui.ItemCount = SubMenuDefine[SubMenuDefine_Count];
MenuGui.ShowNum = SubMenuDefine[SubMenuDefine_ShowNum] & FORMAT_SHOW_NUM;
MenuGui.IconFlag = 0;
MenuGui.ItemIndex = 0;
SET_STATUS(STATUS_UPDATEMAINMENU);
}
else
{
MenuID = MENU_Selected;
SET_STATUS(STATUS_UPDATETITLE | STATUS_UPDATEVALUE);
CLR_STATUS(STATUS_MAINMENU);
if (Type == MENU_TEXT)
{
SET_STATUS(STATUS_EVENT);
}
else
{
SET_STATUS(STATUS_CONTROL);
SET_STYLE(Type);
}
}
}
GUI_SaveControlStatus(0xF0,0xF0);
}
else if ((Key == BT_CANCEL) || (Key == BT_LEFT))
{
if (MENU_StackIndex > MENU_STACK_TOP)
{
GUI_Pop_Stack();
MENU_Selected = MenuGui.TopItemID;
SET_STATUS(STATUS_UPDATEMAINMENU);
}
if (Key == BT_LEFT)
{
GUI_SaveControlStatus(0x30,0x70);
}
if (Key == BT_CANCEL)
{
GUI_SaveControlStatus(0x70,0xF0);
}
}
Key = NO_KEY;
}
if (MENU_Status & STATUS_UPDATEMAINMENU)
{
BYTE j = 0;
#if (LCD_SUPPORT_ICON == FALSE)
LCD_WriteCGRAM(ICONROM_MENU_CURRENT, ICON_MENU_CURRENT, 0);
#endif
for (j=0; j< LCD_ROW_COUNT ; j++)
{
LCD_Position(j + 1, 1);
if (MenuGui.ItemIndex + j < MenuGui.ItemCount)
{
if (MENU_Control[0] == 0xF1)
{
GUI_WriteCaption(0, 0xFF);
}
else
{
if (MenuGui.IconFlag == j)
{
#if (LCD_SUPPORT_REVERSE == TRUE)
LCD_ReverseLine(j+1);
#else
LCD_PutChar(ICON_MENU_CURRENT);
#endif
}
else
{
#if (LCD_SUPPORT_REVERSE == FALSE)
LCD_PutChar(' ');
#endif
}
if (MenuGui.ShowNum)
{
LCD_PutChar(GUI_MenuNo(MenuGui.ItemIndex + j + 1));
LCD_PutChar('.');
}
GUI_WriteCaption(MenuGui.TopItemID + MenuGui.ItemIndex + j, FORMAT_SHOW_SPACE);
}
}
else
{
LCD_ClearLine(j + 1);
}
}
CLR_STATUS(STATUS_UPDATEMAINMENU);
}
}
/*******************************************************************************
** 函数名称: GUI_ShowMenu **
** 功能描述: 让菜单的GUI可以显示在LCD上 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_ShowMenu(void)
{
SET_STATUS(STATUS_VISIBLE);
SET_STATUS(STATUS_UPDATEMAINMENU);
}
/*******************************************************************************
** 函数名称: GUI_HideMenu **
** 功能描述: 隐藏菜单GUI,显示用户自己的内容 **
** 输入参数: BYTE ClearScreen : 关闭GUI之后,是否清除屏幕 **
** 输出参数: BYTE : 关功成功,返回TRUE,否则返回FALSE **
*******************************************************************************/
BYTE GUI_HideMenu(BYTE ClearScreen)
{
if ((GET_STATUS & STATUS_MAINMENU) || (GET_STATUS & STATUS_EVENT))
{
CLR_STATUS(STATUS_VISIBLE);
if (ClearScreen) LCD_Clear();
return TRUE;
}
else
return FALSE;
}
/*******************************************************************************
** 函数名称: GUI_ProgressMessage **
** 功能描述: 菜单GUI消息分配和事件调用 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_ProgressMessage(void)
{
if (GUI_VISIBLE)
{
if (GET_STATUS & STATUS_MAINMENU)
{
GUI_ShowMainMenu();
}
else if (GET_STATUS & STATUS_CONTROL)
{
if (GET_STYLE == MENU_RADIOMENU)
{
GUI_ChooseRadioMenu();
}
else if (GET_STYLE == MENU_INPUT)
{
GUI_GetUserInput();
}
else
{
CLR_STATUS(STATUS_CONTROL);
SET_STATUS(STATUS_UPDATEMAINMENU);
SET_STATUS(STATUS_MAINMENU);
}
}
else if (GET_STATUS & STATUS_EVENT)
{
ExecuteMenu();
MenuID = 0;
CLR_STATUS(STATUS_EVENT);
SET_STATUS(STATUS_UPDATEMAINMENU);
SET_STATUS(STATUS_MAINMENU);
}
}
else
{
if ((Key == BT_MENU)&&(!GUI_VISIBLE))
{
GUI_ShowMenu();
Key = NO_KEY;
}
}
}
/*******************************************************************************
** 函数名称: GUI_Init **
** 功能描述: GUI和菜单初始化 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void GUI_Init(void)
{
flash BYTE *SubMenuDefine;
SubMenuDefine = SUBMENUDEFINE(MENU_Selected);
MenuGui.TopItemID = SubMenuDefine[SubMenuDefine_FirstItemAddr];
MenuGui.IconFlag = 0;
MenuGui.ItemIndex = 0;
MenuGui.ItemCount = SubMenuDefine[SubMenuDefine_Count];
MenuGui.ShowNum = SubMenuDefine[SubMenuDefine_ShowNum] & FORMAT_SHOW_NUM;
MENU_Selected = 0;
MENU_StackIndex = MENU_STACK_TOP;
CLR_STATUS(STATUS_VISIBLE);
SET_STATUS(STATUS_MAINMENU);
SET_STATUS(STATUS_UPDATEMAINMENU);
SET_STYLE(MENU_SUBITEM);
}
#endif
/*******************************************************************************
** END OF FILE **
*******************************************************************************/
BYTE LED_FlashType=0;
#define LED_TYPE_STOP 0
#define LED_TYPE_NUM_INC 1
#define LED_TYPE_NUM_DEC 2
#define LED_TYPE_SHIFT_LEFT 3
#define LED_TYPE_SHIFT_RIGHT 4
#define LED_TYPE_NUM_XOR 5
#include "Sample_Event.c"
/*******************************************************************************
** AVR GUI v2.0 **
** **
** **
** Build by GUI Builder v2.0.0.10 **
** Program by aleyn.wu **
** e-mail:aleyn@e-midas.cn **
** **
********************************************************************************
** **
** Menu Author : **
** Last update : 2008-06-19 09:23 **
** **
*******************************************************************************/
#ifndef _GUI_EVENT_INCLUDE
#define _GUI_EVENT_INCLUDE
/*******************************************************************************
** 外部变量和函数导入 **
*******************************************************************************/
extern BYTE Key;
extern BYTE GUI_HideMenu(BYTE ClearScreen);
extern void LCD_WriteCtrl(BYTE CtrlWord);
extern void LCD_WriteData(BYTE Data);
extern void LCD_Position(BYTE Line, BYTE Pos);
extern void LCD_PutStr(unsigned char *pstring);
extern void LCD_PutStrF(flash unsigned char *pstring);
extern BYTE LED_FlashType;
extern void DisplayVersion(void);
void StopLed(void);
/*******************************************************************************
** 函数名称: ExecuteMenu **
** 功能描述: 菜单事件,当用户选择了菜单之后,将会触发此函数 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
void ExecuteMenu(void)
{
switch (MenuID)
{
case MN_NUM_INC:{LED_FlashType = LED_TYPE_NUM_INC;break;}
case MN_NUM_DEC:{LED_FlashType = LED_TYPE_NUM_DEC;break;}
case MN_SHIFT_LEFT:{LED_FlashType = LED_TYPE_SHIFT_LEFT;break;}
case MN_SHIFT_RIGHT:{LED_FlashType = LED_TYPE_SHIFT_RIGHT;break;}
case MN_NUM_XOR:{LED_FlashType = LED_TYPE_NUM_XOR;break;}
case MN_STOP:{StopLed();break;}
case MN_VERSION:{GUI_HideMenu(FALSE);DisplayVersion();break;}
}
}
void GetManualValue(BYTE ValueID, WORD * Value)
{
/*
switch (ValueID)
{
case MN_ITEM1: *Value = YourCustomValue1; break;
case MN_ITEM2: *Value = YourCustomValue2; break;
}
*/
}
void SetManualValue(BYTE ValueID, WORD * Value)
{
/*switch (ValueID)
{
case MN_ITEM1: YourCustomValue1 = *Value; break;
case MN_ITEM2: YourCustomValue2 = *Value; break;
}*/
}
void StopLed(void)
{
LED_FlashType = LED_TYPE_STOP;
GUI_HideMenu(TRUE);
LCD_Position(1,1);
LCD_PutStrF("LED Flash Stop!");
LCD_Position(2,1);
LCD_PutStrF("Press Menu Key...");
}
#endif
/*******************************************************************************
** END OF FILE **
*******************************************************************************/
/*******************************************************************************
** 函数名称: timer0_ovf_isr **
** 功能描述: 时间中断函数 **
** 输入参数: 无 **
** 输出参数: 无 **
*******************************************************************************/
BYTE TimeInt=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TimeInt = 1;
}
/*******************************************************************************
** 函数名称: TIMER0_Init **
** 功能描述: TIMER0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -