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

📄 sample_mai__.c

📁 AVR单片机的菜单制作工具
💻 C
📖 第 1 页 / 共 5 页
字号:
        for (i=3; i<=LCD_ROW_COUNT; i++)
        {
            LCD_ClearLine(i);
        }

        MenuGui.ItemCount = SubMenuDefine[SubMenuDefine_Count];
        MenuGui.TopItemID = SubMenuDefine[SubMenuDefine_FirstItemAddr];

        GUI_GetControlValue(MENU_Selected);
        MenuGui.ItemIndex = MENU_Result.Byte;

        if (MenuGui.ItemIndex > 0)
        {
            MenuGui.ItemIndex --;
        }

        if (MenuGui.ItemIndex > MenuGui.ItemCount - 1)
        {
            MenuGui.ItemIndex = MenuGui.ItemCount - 1;
        }

        SET_STATUS(STATUS_UPDATEVALUE);
        CLR_STATUS(STATUS_UPDATETITLE);
    }

    if ((Key != NO_KEY)||(MENU_Status & STATUS_UPDATEVALUE))
    {
        CLR_STATUS(STATUS_UPDATEVALUE);
        LCD_Position(2,1);

        if (MenuGui.ItemIndex == 0)
        {
            LCD_PutChar(ICON_RADIO_DOWN);
        }
        else if (MenuGui.ItemIndex == MenuGui.ItemCount - 1)
        {
            LCD_PutChar(ICON_RADIO_UP);
        }
        else
        {
            LCD_PutChar(ICON_RADIO_UPDOWN);
        }

        LCD_PutChar('=');
        GUI_WriteCaption(MenuGui.TopItemID + MenuGui.ItemIndex, FORMAT_SHOW_SPACE);

        if (Key == BT_UP)
        {
            if (MenuGui.ItemIndex > 0)
            {
                MenuGui.ItemIndex --;
                SET_STATUS(STATUS_UPDATEVALUE);
            }
        }
        else if (Key == BT_DOWN)
        {
            if (MenuGui.ItemIndex < MenuGui.ItemCount - 1)
            {
                MenuGui.ItemIndex ++;
                SET_STATUS(STATUS_UPDATEVALUE);
            }
        }
        else if ((Key == BT_APPLY)||(Key == BT_LEFT))
        {

            MENU_Result.Byte = MenuGui.ItemIndex + 1;
            GUI_SetControlValue(MENU_Selected);

            MenuID = MENU_Selected;

            GUI_Pop_Stack();

            CLR_STATUS(STATUS_UPDATETITLE);
            CLR_STATUS(STATUS_UPDATEVALUE);

            SET_STATUS(STATUS_EVENT);
            CLR_STATUS(STATUS_CONTROL);
        }

        Key = NO_KEY;
    }
}

/*******************************************************************************
** 函数名称: GUI_GetUserInput                                                 **
** 功能描述: 取得用户的输入值,用户输入的数值会保存在相应的控制项             **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_GetUserInput(void)
{
    WORD V[INT16_MAX_NUM]={1,10,100,1000,10000};
    BYTE Buffer[INT16_MAX_NUM];
    BYTE i;

    if (MENU_Status & STATUS_UPDATETITLE)
    {
        GUI_Push_Stack();
        i = GUI_GetControlValue(MENU_Selected);

        if (i == 1)
        {
            INPT_MAX_Width = INT8_MAX_NUM;
        }
        else
        {
            INPT_MAX_Width = INT16_MAX_NUM;
        }

        LCD_Position(1,1);
        GUI_WriteCaption(MENU_Selected, FORMAT_SHOW_SPACE);

        for (i=3; i<=LCD_ROW_COUNT; i++)
        {
            LCD_ClearLine(i);
        }


        /*
        LCD_Position(2,1);
        for (i=0;i<6;i++)
        {
            LCD_PutChar(DefaultInputCaption[i]);
        }
        */

        INPT_CUR_Width = GetIntLen(INPT_Result);
        if (INPT_CUR_Width > INPT_MAX_Width)
        {
            INPT_CUR_Width = INPT_MAX_Width;
        }
        MenuGui.IconFlag = 0;

        SET_STATUS(STATUS_UPDATEVALUE);
        CLR_STATUS(STATUS_UPDATETITLE);
    }

    if (Key!=NO_KEY)
    {
        if ( Key == BT_LEFT )
        {
            if (MenuGui.IconFlag < INPT_CUR_Width - 1)
            {
                MenuGui.IconFlag++;
                SET_STATUS(STATUS_UPDATEVALUE);
            }
            else
            {
                if (INPT_CUR_Width < INPT_MAX_Width)
                {
                    INPT_CUR_Width++;
                    MenuGui.IconFlag++;
                    SET_STATUS(STATUS_UPDATEVALUE);
                }
            }
        }
        else if ( Key == BT_RIGHT )
        {
            if (MenuGui.IconFlag > 0)
            {
                MenuGui.IconFlag --;
                SET_STATUS(STATUS_UPDATEVALUE);
            }
        }
        else if ( Key == BT_UP )
        {
            if (INPT_Result + V[MenuGui.IconFlag] > INPT_Result)
            {
                INPT_Result += V[MenuGui.IconFlag];
                if (INPT_MAX_Width == INT8_MAX_NUM)
                {
                    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);

⌨️ 快捷键说明

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