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

📄 sample_main.i

📁 AVR单片机的菜单制作工具
💻 I
📖 第 1 页 / 共 5 页
字号:
                MenuGui.IconFlag = 0;
            }

            MenuGui.ItemIndex = GetIntLen(MENU_Result.Word);
            if (MenuGui.ItemIndex > MenuGui.ItemCount)
            {
                MenuGui.ItemIndex = MenuGui.ItemCount;
            }

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

            MENU_Status |= 0x40;
        }
        else if (( Key == 0x10) || (Key == 0x20))
        {
            if ( Key== 0x10)
            {
                GUI_SetControlValue(MENU_Selected);
                MenuID = MENU_Selected;
            }

            GUI_Pop_Stack();

            LCD_HideCursor();

            MENU_Status &= ~0x02;
            MENU_Status &= ~0x20;
            MENU_Status &= ~0x40;

            MENU_Status |= 0x08;
            MENU_Status &= ~0x02;
        }

        Key = 0x00;
    }

    if (MENU_Status & 0x40)
    {
        unsigned char Len;

        MENU_Status &= ~0x40;
        Len=IntToStr(Buffer,MENU_Result.Word);

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

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

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

        for (i=0; i<16 - MenuGui.ItemIndex; i++)
        {
            LCD_PutChar(' ');
        }

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

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

            GUI_SaveControlStatus(0x00,0x10);
        }
        else if (Key == 0x02)
        {   
            unsigned char CalCount = 0;

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

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

            if (MENU_Selected < 11)
            {
                unsigned char Type;
                flash unsigned char *SubMenuDefine;
                SubMenuDefine = &MenuData[Menu[MENU_Selected]];

                Type = SubMenuDefine[0x00] & 0x0F;

                if (Type == 0x01)
                {
                    GUI_Push_Stack();
                      
                    MenuGui.TopItemID   = SubMenuDefine[0x01];
                    MenuGui.ItemCount   = SubMenuDefine[0x02];
                    MenuGui.ShowNum     = SubMenuDefine[0x03] & 0x01;

                    MenuGui.IconFlag  = 0;
                    MenuGui.ItemIndex = 0;
                    
                    MENU_Status |= 0x10;
                }
                else
                {
                    MenuID = MENU_Selected;
                    MENU_Status |= 0x20 | 0x40;
                    MENU_Status &= ~0x01;

                    if (Type == 0x02)
                    {
                        MENU_Status |= 0x08;
                    }
                    else
                    {
                        MENU_Status |= 0x02;
                        MENU_Style = Type & 0x0F;
                    }
                }
            }
            GUI_SaveControlStatus(0xF0,0xF0);
        }
        else if ((Key == 0x20) || (Key == 0x04))
        {
            if (MENU_StackIndex > 0)
            {
                GUI_Pop_Stack();
                MENU_Selected = MenuGui.TopItemID;

                MENU_Status |= 0x10;
            }
            if (Key == 0x04)
            {
                GUI_SaveControlStatus(0x30,0x70);
            }
            if (Key == 0x20)
            {
                GUI_SaveControlStatus(0x70,0xF0);
            }
        }
        Key = 0x00;
    }

    if (MENU_Status & 0x10)
    { 
        unsigned char j = 0; 

                LCD_WriteCGRAM(Icon6x8 + 0x00 * 0x05, 0x00, 0);
        
        for (j=0; j< 2 ; 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)
                    {
                                                                                                LCD_PutChar(0x00);
                                            }
                    else
                    {   
                                                LCD_PutChar(' ');
                                            }

                    if (MenuGui.ShowNum)
                    {
                        LCD_PutChar(GUI_MenuNo(MenuGui.ItemIndex + j + 1));
                        LCD_PutChar('.');
                    }
                
                    GUI_WriteCaption(MenuGui.TopItemID + MenuGui.ItemIndex + j, 0x80);
                }
            }
            else
            {
                LCD_ClearLine(j + 1);
            }       
      }

      MENU_Status &= ~0x10;  
    }
}

/*******************************************************************************
** 函数名称: GUI_ShowMenu                                                     **
** 功能描述: 让菜单的GUI可以显示在LCD上                                       **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_ShowMenu(void)
{
    MENU_Status |= 0x80;
    MENU_Status |= 0x10;   
}

/*******************************************************************************
** 函数名称: GUI_HideMenu                                                     **
** 功能描述: 隐藏菜单GUI,显示用户自己的内容                                  **
** 输入参数: BYTE ClearScreen : 关闭GUI之后,是否清除屏幕                     **
** 输出参数: BYTE             : 关功成功,返回TRUE,否则返回FALSE             **
*******************************************************************************/
unsigned char GUI_HideMenu(unsigned char ClearScreen)
{
    if ((MENU_Status & 0x01) || (MENU_Status & 0x08))
    {
        MENU_Status &= ~0x80;
        if (ClearScreen) LCD_Clear();
        return 1;
    }
    else
        return 0;
}

/*******************************************************************************
** 函数名称: GUI_ProgressMessage                                              **
** 功能描述: 菜单GUI消息分配和事件调用                                        **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_ProgressMessage(void)
{
    if ((MENU_Status & 0x80))
    {
        if (MENU_Status & 0x01)
        {
            GUI_ShowMainMenu();
        }
        else if (MENU_Status & 0x02)
        {
            if ((MENU_Style & 0x0F) == 0x03)
            {
                GUI_ChooseRadioMenu();
            }
            else if ((MENU_Style & 0x0F) == 0x05)
            {
                GUI_GetUserInput();
            }
            else
            {
                MENU_Status &= ~0x02;
                MENU_Status |= 0x10;
                MENU_Status |= 0x01;
            }
        }
        else if (MENU_Status & 0x08)
        {
            ExecuteMenu();

            MenuID = 0;
            MENU_Status &= ~0x08;
            MENU_Status |= 0x10;
            MENU_Status |= 0x01;
        }
    }
    else
    {
        if ((Key == 0x40)&&(!(MENU_Status & 0x80)))
        {
            GUI_ShowMenu();
            Key = 0x00;
        }
    }
}

/*******************************************************************************
** 函数名称: GUI_Init                                                         **
** 功能描述: GUI和菜单初始化                                                  **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_Init(void)
{
    flash unsigned char *SubMenuDefine;
    SubMenuDefine = &MenuData[Menu[MENU_Selected]];

    MenuGui.TopItemID   = SubMenuDefine[0x01];
    MenuGui.IconFlag    = 0;
    MenuGui.ItemIndex   = 0;
    MenuGui.ItemCount   = SubMenuDefine[0x02];
    MenuGui.ShowNum     = SubMenuDefine[0x03] & 0

⌨️ 快捷键说明

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