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

📄 sample.c

📁 AVR单片机的菜单制作工具
💻 C
📖 第 1 页 / 共 4 页
字号:
                    if (INPT_Result > 0x00FF)
                    {
                        INPT_Result = 0x00FF;
                    }
                }
            }
            else
            {
                if (INPT_MAX_Width == INT8_MAX_NUM)
                {
                    INPT_Result = 0x00FF;
                }
                else
                {
                    INPT_Result = 0xFFFF;
                }
            }

            INPT_CUR_Width = GetIntLen(INPT_Result);
            if (INPT_CUR_Width > INPT_MAX_Width)
            {
                INPT_CUR_Width = INPT_MAX_Width;
            }
            
            SET_STATUS(STATUS_UPDATEVALUE);
        }
        else if ( Key == BT_DOWN )
        {
            if (INPT_Result >= V[MenuGui.IconFlag])
            {
                INPT_Result -= V[MenuGui.IconFlag];
            }
            else if (INPT_Result > 0)
            {
                INPT_Result -= 1;
                MenuGui.IconFlag = 0;
            }

            INPT_CUR_Width = GetIntLen(INPT_Result);
            if (INPT_CUR_Width > INPT_MAX_Width)
            {
                INPT_CUR_Width = INPT_MAX_Width;
            }

            if (MenuGui.IconFlag > INPT_CUR_Width - 1)
            {
                MenuGui.IconFlag = INPT_CUR_Width - 1;
            }

            SET_STATUS(STATUS_UPDATEVALUE);
        }
        else if (( Key == BT_APPLY) || (Key == BT_CANCEL))
        {
            if ( Key== BT_APPLY)
            {
                GUI_SetControlValue(MENU_Selected);
                MenuID = MENU_Selected;
            }

            GUI_Pop_Stack();

            LCD_HideCursor();

            CLR_STATUS(STATUS_CONTROL);
            CLR_STATUS(STATUS_UPDATETITLE);
            CLR_STATUS(STATUS_UPDATEVALUE);

            SET_STATUS(STATUS_EVENT);
            CLR_STATUS(STATUS_CONTROL);
        }

        Key = NO_KEY;
    }

    if (MENU_Status & STATUS_UPDATEVALUE)
    {
        BYTE Len;

        CLR_STATUS(STATUS_UPDATEVALUE);
        Len=IntToStr(Buffer,INPT_Result);

        LCD_HideCursor();
        LCD_Position(2,1);
        LCD_PutStrF(DefaultInputCaption);

        if (Len < INPT_CUR_Width)
        {
            for (i=0; i<INPT_CUR_Width - Len; i++)
            {
                LCD_PutChar('0');
            }
        }
        else if (Len > INPT_CUR_Width)
        {
            Len = INPT_CUR_Width;
        }

        for (i=0; i<Len; i++)
        {
            LCD_PutChar(Buffer[i]);
        }

        for (i=0; i<CAPTION_LENGTH - INPT_CUR_Width; i++)
        {
            LCD_PutChar(' ');
        }

        LCD_Position(2,6 + INPT_CUR_Width - MenuGui.IconFlag);
        LCD_ShowCursor();
    }
}

/*******************************************************************************
** 函数名称: GUI_ShowMainMenu                                                 **
** 功能描述: 显示主菜单                                                       **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_ShowMainMenu(void)
{
    if (Key != NO_KEY)
    {
        if (Key == BT_UP)
        {
            if (MenuGui.IconFlag > 0)
            {
                MenuGui.IconFlag--;
                SET_STATUS(STATUS_UPDATEMAINMENU);
            } 
            else if (MenuGui.ItemIndex > 0)
            {
                MenuGui.ItemIndex--;
                SET_STATUS(STATUS_UPDATEMAINMENU);
            }

            GUI_SaveControlStatus(0x00,0x10);
        }
        else if (Key == BT_DOWN)
        {   
            BYTE CalCount = 0;

            CalCount = MenuGui.ItemCount - MenuGui.ItemIndex - 1;

            if (MenuGui.IconFlag < LCD_ROW_COUNT - 1) 
            {
                if (MenuGui.IconFlag < CalCount)
                {
                    MenuGui.IconFlag++;
                    SET_STATUS(STATUS_UPDATEMAINMENU);
                }
            }
            else if (CalCount > LCD_ROW_COUNT - 1)
            {
                MenuGui.ItemIndex++;
                SET_STATUS(STATUS_UPDATEMAINMENU);
            }
            else if (CalCount == LCD_ROW_COUNT - 1)
            {
                MenuGui.ItemIndex++;
                MenuGui.IconFlag = LCD_ROW_COUNT - 2;
                SET_STATUS(STATUS_UPDATEMAINMENU);
            }
            GUI_SaveControlStatus(0x10,0x30);
        }
        else if ((Key == BT_APPLY) || (Key == BT_RIGHT))
        {
            MENU_Selected = MenuGui.TopItemID + MenuGui.ItemIndex + MenuGui.IconFlag;

            if (MENU_Selected < MENU_COUNT)
            {
                BYTE Type;
                flash BYTE *SubMenuDefine;
                SubMenuDefine = SUBMENUDEFINE(MENU_Selected);

                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                                 **
*******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -