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

📄 sample_main.i

📁 AVR单片机的菜单制作工具
💻 I
📖 第 1 页 / 共 5 页
字号:
    flash unsigned char *Caption;
    flash unsigned char *SubMenuDefine;
    unsigned char Result=0;
    unsigned char i = 0;
    
    SubMenuDefine = &MenuData[Menu[MenuItemID]];
    i = SubMenuDefine[0x00] >> 4;  
    Caption = SubMenuDefine + i;                 
    i = Caption[0];                              

    if (i==0)  
    {
        MenuItemID = Caption[1]; 
        Caption = &MenuData[Menu[MenuItemID]];
        i = Caption[0] >> 4;
        Caption+=i;
        i = Caption[0];
    }
    Result = i;
    Caption++;


    if ((SubMenuDefine[0x00] & 0x0F) == 0x05)
    {
        Format |= SubMenuDefine[0x03] & 0x02;
    }
    else
    {
        Format &= ~0x02;
    }

    LCD_HideCursor();

    if (Format & 0x02)
    {
        unsigned char Buffer[5];
        unsigned char Len=0;

        GUI_GetControlValue(MenuItemID);
        Len=IntToStr(Buffer,MENU_Result.Word);

        while (i--)
        {
            if ((Caption[0]=='=') && (Caption[1]=='#') && (Len>0))
            {
                unsigned char j;
                for (j=0; j<Len; j++)
                {
                    LCD_PutChar(Buffer[j]);
                }
                Result+=Len;
                Result-=2;
                Caption+=2;

                if (i)    {i--;}
                if (i==0) {break;}
            }
            else
            {
                LCD_PutChar(*Caption++);
            }
        }
    }
    else if ((MenuItemID == 0)&&(Format == ~0x02))
    {
        while (i--)
        {
            LCD_PutChar(~(*Caption++));
        }
    }
    else
    {
        while (i--)
        {
            LCD_PutChar(*Caption++);
        }
    }

    if ((Format & 0x80) && (Result < 16))
    {
        while (Result < 16)
        {
            LCD_PutChar(0x20);
            Result++;
        }
    }

    return Result;
}

/*******************************************************************************
** 函数名称: GUI_MenuNo                                                       **
** 功能描述: 把菜单序号转换成字符                                             **
** 输入参数: BYTE No:序号                                                     **
** 输出参数: 无                                                               **
*******************************************************************************/
unsigned char GUI_MenuNo(unsigned char No)
{
    if ((No >= 0) && (No <= 9))
    {
        return No + '0';
    }
    else if ((No >= 10) && (No <= 36))
    {
        return No - 10 + 'A';
    }
    else
    {
        return '?';
    }
}

/*******************************************************************************
** 函数名称: GUI_ChooseRadioMenu                                              **
** 功能描述: 选择单选菜单,单选菜单有对应的控制值                             **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_ChooseRadioMenu(void)
{
    if (MENU_Status & 0x20)
    {
        flash unsigned char *SubMenuDefine;
        unsigned char i;
        SubMenuDefine = &MenuData[Menu[MENU_Selected]];
      
        GUI_Push_Stack();

                LCD_WriteCGRAM(Icon6x8 + 0x02 * 0x05, 0x01, 0);
        LCD_WriteCGRAM(Icon6x8 + 0x03 * 0x05, 0x02, 0);
        LCD_WriteCGRAM(Icon6x8 + 0x04 * 0x05, 0x03, 0);
        
        LCD_Position(1,1);
        GUI_WriteCaption(MENU_Selected, 0x80);

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

        MenuGui.ItemCount = SubMenuDefine[0x02];
        MenuGui.TopItemID = SubMenuDefine[0x01];

        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;
        }

        MENU_Status |= 0x40;
        MENU_Status &= ~0x20;
    }

    if ((Key != 0x00)||(MENU_Status & 0x40))
    {
        MENU_Status &= ~0x40;
        LCD_Position(2,1);
        
        if (MenuGui.ItemIndex == 0)
        {   
            LCD_PutChar(0x03);
        }
        else if (MenuGui.ItemIndex == MenuGui.ItemCount - 1)
        {
            LCD_PutChar(0x01);
        }
        else
        {
            LCD_PutChar(0x02);
        }

        LCD_PutChar('=');
        GUI_WriteCaption(MenuGui.TopItemID + MenuGui.ItemIndex, 0x80);
        
        if (Key == 0x01)
        {
            if (MenuGui.ItemIndex > 0)
            {
                MenuGui.ItemIndex --;
                MENU_Status |= 0x40;
            } 
        }
        else if (Key == 0x02)
        {   
            if (MenuGui.ItemIndex < MenuGui.ItemCount - 1)
            {
                MenuGui.ItemIndex ++;
                MENU_Status |= 0x40;
            }
        }
        else if ((Key == 0x10)||(Key == 0x04))
        {
           
            MENU_Result.Byte = MenuGui.ItemIndex + 1;
            GUI_SetControlValue(MENU_Selected);

            MenuID = MENU_Selected;

            GUI_Pop_Stack();

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

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

        Key = 0x00;
    }
}

/*******************************************************************************
** 函数名称: GUI_GetUserInput                                                 **
** 功能描述: 取得用户的输入值,用户输入的数值会保存在相应的控制项             **
** 输入参数: 无                                                               **
** 输出参数: 无                                                               **
*******************************************************************************/
void GUI_GetUserInput(void)
{
    unsigned int V[5]={1,10,100,1000,10000};
    unsigned char Buffer[5];
    unsigned char i;
    
    if (MENU_Status & 0x20)
    {
        GUI_Push_Stack();
        i = GUI_GetControlValue(MENU_Selected);

        if (i == 1)
        {
            MenuGui.ItemCount = 3;
        }
        else
        {
            MenuGui.ItemCount = 5;
        }

        LCD_Position(1,1);
        GUI_WriteCaption(MENU_Selected, 0x80);

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


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

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

        MENU_Status |= 0x40;
        MENU_Status &= ~0x20;
    }	
    
    if (Key!=0x00)
    {
        if ( Key == 0x04 )
        {
            if (MenuGui.IconFlag < MenuGui.ItemIndex - 1)
            {
                MenuGui.IconFlag++;
                MENU_Status |= 0x40;
            }
            else
            {
                if (MenuGui.ItemIndex < MenuGui.ItemCount)
                {
                    MenuGui.ItemIndex++;
                    MenuGui.IconFlag++;
                    MENU_Status |= 0x40;
                }
            }
        }
        else if ( Key == 0x08 )
        {
            if (MenuGui.IconFlag > 0)
            {
                MenuGui.IconFlag --;
                MENU_Status |= 0x40;
            }
        }
        else if ( Key == 0x01 )
        {
            if (MENU_Result.Word + V[MenuGui.IconFlag] > MENU_Result.Word)
            {
                MENU_Result.Word += V[MenuGui.IconFlag];
                if (MenuGui.ItemCount == 3)
                {
                    if (MENU_Result.Word > 0x00FF)
                    {
                        MENU_Result.Word = 0x00FF;
                    }
                }
            }
            else
            {
                if (MenuGui.ItemCount == 3)
                {
                    MENU_Result.Word = 0x00FF;
                }
                else
                {
                    MENU_Result.Word = 0xFFFF;
                }
            }

            MenuGui.ItemIndex = GetIntLen(MENU_Result.Word);
            if (MenuGui.ItemIndex > MenuGui.ItemCount)
            {
                MenuGui.ItemIndex = MenuGui.ItemCount;
            }
            
            MENU_Status |= 0x40;
        }
        else if ( Key == 0x02 )
        {
            if (MENU_Result.Word >= V[MenuGui.IconFlag])
            {
                MENU_Result.Word -= V[MenuGui.IconFlag];
            }
            else if (MENU_Result.Word > 0)
            {
                MENU_Result.Word -= 1;

⌨️ 快捷键说明

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