⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample_mai__.c

📁 AVR单片机的菜单制作工具
💻 C
📖 第 1 页 / 共 5 页
字号:

                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 + -