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

📄 menutop.c

📁 Atmega64单片机程序(完整工程)
💻 C
📖 第 1 页 / 共 2 页
字号:
                {
                    //需要显示的Bar多于单屏可以显示的Bar,那么重新显示全部
                    #endif 
                    
                    Menu_j=Item ;
                    Menu_i=0 ;
                    //项是 Item 位置 0
                    BarDisp(*(DispItem+Menu_j),BarXOffset,Menu_i*BarYSize+BarYOffset,1);
                    if(Menu_j==(ItemNum-1))
                    {
                        //维护Menu_j
                        Menu_j=0 ;
                    }
                    else 
                    {
                        Menu_j++;
                    }
                    //显示其他项
                    for(Menu_i=1;Menu_i<DispMax;Menu_i++)
                    {
                        BarDisp(*(DispItem+Menu_j),BarXOffset,Menu_i*BarYSize+BarYOffset,0);
                        if(Menu_j==(ItemNum-1))
                        {
                            Menu_j=0 ;
                        }
                        else 
                        {
                            Menu_j++;
                        }
                    }
                    Where=0 ;
                    //当前位置依然在开头的0位置
                }
                else 
                {
                    //单屏能显示完全部菜单项,"顶部 上移"应当跳转到底部(或者什么都不做)
                    //当仅仅只有一项的时候,应当一直在Where=0的地方反显的!!!这里也能实现,因为最后是反显的函数
                    Where=ItemNum-1 ;
                    //取消顶部的原有的反显  项ItemBack  位置0
                    BarDisp(*(DispItem+ItemBack),BarXOffset,0*BarYSize+BarYOffset,0);
                    //反显根部  项Item  位置ItemNum-1
                    BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
                    //反显
                }
                #ifdef RockBack 
            }
            #else 
        }
        else 
        {
            Item=ItemBack ;
            //Restore
        }
        
        #endif 
        
        Bar(Item,ItemNum,125,120);       //jjx              //维护滚动条
        Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}


//Bar项菜单向右按键的行为
//维护Bar显示
void BarMenuRight(void)
{
    INT8U Menu_i ;//计数变量 在菜单函数中用到
    INT8U Menu_j ;//计数变量
    INT8U ItemBack ;
	
    ItemBack=Item ;//---维护Item
    if(Item==(ItemNum-1))
    {
        Item=0 ;
    }
    else 
    {
        Item++;
    }

    //---维护显示
    if(Where!=(DispMin-1))
    {
        //当前位置不为最末,两次反显
        if (LessCPUUseage==TRUE)
		{
             GUI_SetEnFont(En_6x12);
             GUI_DispCharAt(' ',BarXOffset,(Where++)*BarYSize+BarYOffset);
             GUI_DispCharAt('>',BarXOffset,Where*BarYSize+BarYOffset);
        }
		else
		{ 
                 //原来位置取消反显   项是ItemBack  位置Where
             BarDisp(*(DispItem+ItemBack),BarXOffset,(Where++)*BarYSize+BarYOffset,0);
                 //下移后的位置反显   项是Item      位置Where+1(Where++实现)
             BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
                 //反显
        }
        
        #ifdef RockBack 
    }
    else 
    {
        //当前位置为DispMax    底部  下移
        #ifdef DynamicBar 
        if((ItemNum>DispMax)||(BarDataMode==DynamicData))
        {
            //需要显示的Bar多于单屏可以显示的Bar,那么重新显示//08/29
            #else 
            if(ItemNum>DispMax)
            {
                //需要显示的Bar多于单屏可以显示的Bar,那么重新显示
                #endif 
                #else 
            }
            else if(ItemBack!=(ItemNum-1))
            {
                //当前位置为DispMax    如果原来显示位置不是最后一项,则 底部  下移
                if(ItemNum>DispMax)
                {
                    //需要显示的Bar多于单屏可以显示的Bar,那么重新显示
                    #endif 
                    Menu_j=Item ;
                    Menu_i=DispMax ;
                    //项是 Item  位置是 DispMax
                    BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,1);
                    if(Menu_j==0)
                    {
                        Menu_j=ItemNum-1 ;
                    }
                    else 
                    {
                        Menu_j--;
                    }
                    //显示其他项
                    for(Menu_i=DispMax-1;Menu_i>0;Menu_i--)
                    {
                        BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,0);
                        if(Menu_j==0)
                        {
                            Menu_j=ItemNum-1 ;
                        }
                        else 
                        {
                            Menu_j--;
                        }
                    }
                    Where=DispMax-1 ;
                    //当前位置依然末尾位置
                }
                else 
                {
                    //单屏能显示完全部菜单项,"底部 下移"应当跳转到顶部反显(或者什么都不做)
                    Where=0 ;
                    //取消底部原有反显   项ItemBack  位置ItemNum-1
                    BarDisp(*(DispItem+ItemBack),BarXOffset,(ItemNum-1)*BarYSize+BarYOffset,0);
                    //反显顶部 项Item  位置0
                    BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);
                    //反显
                }
                #ifdef RockBack 
            }
            #else 
        }
        else 
        {
            Item=ItemBack ;
            //Restore
        }
        #endif 
        
        Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);// jjx                    //维护滚动条
        Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}

/*********************************************************  
*****************************************************************************
* DispIcoMenuInit - 图标层菜单界面
* DESCRIPTION: -
* 共有5个函数
DispIcoMenuInit    DispIcoMenuUp   DispIcoMenuDown
DispIcoMenuLeft    DispIcoMenuRight
******************************************************************************/
void DispIcoMenuInit()
{
        
        ItemNum=IcoMenu[language].TextNum ;//多少数据项
        DispItem=IcoMenu[language].Text ;//数据
        
        GUI_Clear();
        //-------------------
        if(Flash==FlashMode_AutoInit)
        {
            //从0进入,初始化Item等值
            PUSH();
            Item=0 ;
            Where=0 ;
        }
        GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);//菜单名字
        GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
        
        //显示按键对应的文字提示,1-->"选择"
        GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
        //显示按键对应的文字提示,0-->"退出"
	    GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);

        Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);   //jjx                  //维护滚动条
        return ;
    }
    
/*
*****************************************************************************
* DispIcoMenuUp - 图标层下确定键的行为
* DESCRIPTION: -
* 分发处理各个跳转
* 第一层菜单的Up键处理
* Return :
******************************************************************************/
void DispIcoMenuUp()
{
        
        switch(Item)
        {
            case 0 :
            {
                GUI_Clear();
                //功能
                Jump2Menu(MenuFuncIndex,FlashMode_AutoInit);
                return ;
            }
            case 1 :
            {
                GUI_Clear();
                //参数
                Jump2Menu(MenuParaIndex,FlashMode_AutoInit);
                return ;
            }
            case 2 :
            {
                GUI_Clear();
                //测量
                Jump2Menu(MenuMeasureIndex,FlashMode_AutoInit);
                return ;
            }
            case 3 :
            {
                GUI_Clear();
                //语言
                Jump2Menu(MenuLanguageIndex,FlashMode_ManualInit);
                //在MenuLanguage.C中的DispMenuLanguageInit函数中修改Item Where!
                return ;
            }
            case 4 :
            {
			    GUI_Clear();
                //设置
                Jump2Menu(MenuSetupIndex,FlashMode_AutoInit);
                return ;
            }
            case 5 :
            {
                Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
                return ;
            }
            default :
            {
                Jump2Menu(MenuTopIndex,FlashMode_NoAction);
                return ;
            }
        }
}
    
void DispIcoMenuDown()
{
        POP();
}
    
void DispIcoMenuLeft()
{
        if(Item==0)
        {
            Item=ItemNum-1 ;
        }
        else 
        {
            Item--;
        }
        
        GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);//菜单名字
        GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
		
        Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);   //jjx                  //维护滚动条
        Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
    }
    
void DispIcoMenuRight(void)
{
        if(Item==(ItemNum-1))
        {
            Item=0 ;
        }
        else 
        {
            Item++;
        }
        
        GUI_DispStringAtBar(*(DispItem+Item),0,1,LCD_XSIZE,GUI_TA_HCENTER);    //菜单名字
        GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);//图标
		
        Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);  //jjx                   //维护滚动条
        Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}
 
/*
Bar的算法
    ___
 |   |
 |   |
| |<-|-----BarLen
 |   L
 |   |
 |   |
 |  _|_
Bar的滑动距离是L-BarLen
为了美观,可以在开始和结尾部分多流出来一些点,那么滑动距离要扣除这些点的长度,并在计算结果
得到0的时候,添加上上端要留出来的点BarRemainDot
2种显示方式:
一种是BarLen是定长的,
一种BarLen是根据显示总共的项数定下来的
*/
void Bar(INT8U Item_,INT8U ItemNum_,INT8U BarPosX,INT8U BarNumPosX)
{
    return;
}
 
    
//编译时间
void DispBuildTime(void)
{
	GUI_DispStringAtBar("编译时间",0,1,LCD_XSIZE,GUI_TA_LEFT);
    GUI_DispStringAt(__DATE__,24,16);
    GUI_DispStringAt(__TIME__,24,32);
}

⌨️ 快捷键说明

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