OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13813|回复: 41

分享一个做菜单的方法,转自傻孩子,准备移植到Mini板上2.8寸LCD显示

[复制链接]

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-6-25 10:58:12 | 显示全部楼层 |阅读模式
------------------------------------------

贴一段代码大家看看哈(我用来做目录的引擎)

(以上的是我在羚羊上实现的,但是原理是一样的,特别是Menu.h可以直接使用)





Menu.h

-------------------------------



#ifndef        __MENU_h__

#define        __MENU_h__

#include "Functions.h"

/****************************************************

* 支持库说明:提供了使用菜单的基本数据结构          *

* 作者:      傻孩子                                *

* 日期:      2005年6月9日                          *

****************************************************/



/**********************

*    目录结构体定义   *

**********************/

struct MenuItem        

{

    short MenuCount;

    char *DisplayString;

    void (*Subs)();

    struct MenuItem *ChildrenMenus;

    struct MenuItem *ParentMenus;

}Null;



void NullSubs(void)

{

}







/****************************************************

*   使用说明:                                      *

*      要定义一个菜单,需要做以下几步工作           *

*      1、定义一个结构体数组                        *

*      2、如果这个菜单是子菜单,那么把上级菜单的    *

*         *ChildrenMenus指针指向该数组的首地址,     *

*         并且设置ParentMenus为上层目录的地址       *

*      3、如果这个菜单是跟菜单,那么直接将MenuPoint *

*         指针指向该数组的首地址                    *

*      4、通过写一个函数为该数组的每一个元素初始化  *

*      5、如果菜单项是最终选项,那么将*ChildrenMenus*

*         置为NULL,将函数指针*Subs指向实现功能的   *

*         函数。                                    *

****************************************************/





struct MenuItem MainMenu[3];

struct MenuItem TimeMenu[4];

struct MenuItem VoiceMenu[5];

struct MenuItem RobotMenu[5];

struct MenuItem FlashMenu[5];



/***********************

*     函 数 声 明 区   *

***********************/

void MainMenuInit(void);

void TimeMenuInit(void);

void VoiceMenuInit(void);

void RobotMenuInit(void);

void FlashMenuInit(void);



/**************************************************************

*  函数说明:Flash处理目录初始化函数                          *

**************************************************************/

void FlashMenuInit(void)

{

    FlashMenu[0].MenuCount = 5;

    FlashMenu[0].DisplayString = "  Flash Record  ";

    FlashMenu[0].Subs = FlashRecord;

    FlashMenu[0].ChildrenMenus = &Null;

    FlashMenu[0].ParentMenus = MainMenu;

    

    FlashMenu[1].MenuCount = 5;

    FlashMenu[1].DisplayString = "      lay      ";

    FlashMenu[1].Subs = FlashPlay;

    FlashMenu[1].ChildrenMenus = &Null;

    FlashMenu[1].ParentMenus = MainMenu;

    

    FlashMenu[2].MenuCount = 5;

    FlashMenu[2].DisplayString = "      ause     ";

    FlashMenu[2].Subs = FlashPause;

    FlashMenu[2].ChildrenMenus = &Null;

    FlashMenu[2].ParentMenus = MainMenu;

    

    FlashMenu[3].MenuCount = 5;

    FlashMenu[3].DisplayString = "  Flash Delete  ";

    FlashMenu[3].Subs = FlashDelete;

    FlashMenu[3].ChildrenMenus = &Null;

    FlashMenu[3].ParentMenus = MainMenu;

    

    FlashMenu[4].MenuCount = 5;

    FlashMenu[4].DisplayString = "      Back      ";

    FlashMenu[4].Subs = NullSubs;

    FlashMenu[4].ChildrenMenus = MainMenu;

    FlashMenu[4].ParentMenus = MainMenu;

}



/**************************************************************

*  函数说明:机器人控制目录初始化函数                         *

**************************************************************/

void RobotMenuInit(void)

{

    RobotMenu[0].MenuCount = 5;

    RobotMenu[0].DisplayString = "   Turn  Left   ";

    RobotMenu[0].Subs = RobotTurnLeft;

    RobotMenu[0].ChildrenMenus = &Null;

    RobotMenu[0].ParentMenus = MainMenu;

    

    RobotMenu[1].MenuCount = 5;

    RobotMenu[1].DisplayString = "   Turn Right   ";

    RobotMenu[1].Subs = RobotTurnRight;

    RobotMenu[1].ChildrenMenus = &Null;

    RobotMenu[1].ParentMenus = MainMenu;

    

    RobotMenu[2].MenuCount = 5;

    RobotMenu[2].DisplayString = "    Go  Ahead   ";

    RobotMenu[2].Subs = RobotGoAhead;

    RobotMenu[2].ChildrenMenus = &Null;

    RobotMenu[2].ParentMenus = MainMenu;

    

    RobotMenu[3].MenuCount = 5;

    RobotMenu[3].DisplayString = "     Go Back    ";

    RobotMenu[3].Subs = RobotGoBack;

    RobotMenu[3].ChildrenMenus = &Null;

    RobotMenu[3].ParentMenus = MainMenu;

    

    RobotMenu[4].MenuCount = 5;

    RobotMenu[4].DisplayString = "      Back      ";

    RobotMenu[4].Subs = NullSubs;

    RobotMenu[4].ChildrenMenus = MainMenu;

    RobotMenu[4].ParentMenus = MainMenu;

    

}



/**************************************************************

*  函数说明:声音处理目录初始化函数                           *

**************************************************************/

void VoiceMenuInit(void)

{

    VoiceMenu[0].MenuCount = 5;

    VoiceMenu[0].DisplayString = "  Voice Record  ";

    VoiceMenu[0].Subs = VoiceRecord;

    VoiceMenu[0].ChildrenMenus = &Null;

    VoiceMenu[0].ParentMenus = MainMenu;

    

    VoiceMenu[1].MenuCount = 5;

    VoiceMenu[1].DisplayString = "      lay      ";

    VoiceMenu[1].Subs = Play;

    VoiceMenu[1].ChildrenMenus = &Null;

    VoiceMenu[1].ParentMenus = MainMenu;

    

    VoiceMenu[2].MenuCount = 5;

    VoiceMenu[2].DisplayString = "      ause     ";

    VoiceMenu[2].Subs = Pause;

    VoiceMenu[2].ChildrenMenus = &Null;

    VoiceMenu[2].ParentMenus = MainMenu;

    

    VoiceMenu[3].MenuCount = 5;

    VoiceMenu[3].DisplayString = "  Voice Delete  ";

    VoiceMenu[3].Subs = VoiceDelete;

    VoiceMenu[3].ChildrenMenus = &Null;

    VoiceMenu[3].ParentMenus = MainMenu;

    

    VoiceMenu[4].MenuCount = 5;

    VoiceMenu[4].DisplayString = "      Back      ";

    VoiceMenu[4].Subs = NullSubs;

    VoiceMenu[4].ChildrenMenus = MainMenu;

    VoiceMenu[4].ParentMenus = MainMenu;

}



/**************************************************************

*  函数说明:时间设定子目录初始化                             *

**************************************************************/

void TimeMenuInit(void)

{

    TimeMenu[0].MenuCount = 4;

    TimeMenu[0].DisplayString = "    Time Set    ";

    TimeMenu[0].Subs = TimeSet;

    TimeMenu[0].ChildrenMenus = &Null;

    TimeMenu[0].ParentMenus = MainMenu;

    

    TimeMenu[1].MenuCount = 4;

    TimeMenu[1].DisplayString = "    Date Set    ";

    TimeMenu[1].Subs = DateSet;

    TimeMenu[1].ChildrenMenus = &Null;

    TimeMenu[1].ParentMenus = MainMenu;

    

    TimeMenu[2].MenuCount = 4;

    TimeMenu[2].DisplayString = "    AlertSet    ";

    TimeMenu[2].Subs = AlertSet;

    TimeMenu[2].ChildrenMenus = &Null;

    TimeMenu[2].ParentMenus = MainMenu;

    

    TimeMenu[3].MenuCount = 4;

    TimeMenu[3].DisplayString = "      Back      ";

    TimeMenu[3].Subs = NullSubs;

    TimeMenu[3].ChildrenMenus = MainMenu;

    TimeMenu[3].ParentMenus = MainMenu;

    

}



/**************************************************************

*  函数说明:根目录初始化                                     *

**************************************************************/

void MainMenuInit(void)

{

     MainMenu[0].MenuCount = 3;

     MainMenu[0].DisplayString = "    Time Set    ";

     MainMenu[0].Subs = NullSubs;

     MainMenu[0].ChildrenMenus = TimeMenu;

     MainMenu[0].ParentMenus = &Null;



     MainMenu[1].MenuCount = 3;

     MainMenu[1].DisplayString = "  Voice Center  ";

     MainMenu[1].Subs = NullSubs;

     MainMenu[1].ChildrenMenus = VoiceMenu;

     MainMenu[1].ParentMenus = &Null;

/*

     MainMenu[2].MenuCount = 3;

     MainMenu[2].DisplayString = "  Robot Control ";

     MainMenu[2].Subs = NullSubs;

     MainMenu[2].ChildrenMenus = RobotMenu;  

     MainMenu[2].ParentMenus = &Null;

*/     

     MainMenu[2].MenuCount = 3;

     MainMenu[2].DisplayString = "  Flash Option  ";

     MainMenu[2].Subs = NullSubs;

     MainMenu[2].ChildrenMenus = FlashMenu;     

     MainMenu[2].ParentMenus = &Null;



}



#endif



Function.h

------------------------------



#ifndef        __FUNCTIONS_h__

#define        __FUNCTIONS_h__

/****************************************************

* 支持库说明:系统菜单功能文件宏                    *

* 日期:      2005年6月9日                          *

****************************************************/

    #include "TimeSet.h"

    #include "VoiceCenter.h"

    #include "RobotControl.h"

    #include "FlashOption.h"



/*--------------------------------

   上面包含的头文件里面包含了菜单

   功能选项所要调用的函数。

--------------------------------*/

#endif





main.c

-----------------------------



#include "GRAPH_Command.h"

#include "Functions.h"

#include "Menu.h"



/***********************

*   按键功能键宏定义   *

***********************/

# define UP        0

# define Down      4

# define Enter     5

# define Esc       1

# define Reset     2



/***********************

*     全局变量声明区   *

***********************/



    

    struct MenuItem (*MenuPoint) = MainMenu;

    short DisplayStart = 0;

    short UserChoose = 0;

    short DisplayPoint = 0;

    short MaxItems;    





/*****************************

* Struct MenuItem:           *

*    short MenuCount;        *

*    char *DisplayString;    *

*    void (*Subs)();         *

*    MenuItem *ChildrenMenus;*

*    MenuItem *ParentMenus;  *

*****************************/



/***********************

*     函 数 声 明 区   *

***********************/

extern void ClearWatchDog();

void MenuInitialation(void);

void SystemInitialation(void);

void ShowMenu(void);

short GetKeyNum(void);



/**************************************************************

*  函数说明:系统初始化函数                                   *

**************************************************************/

void SystemInitialation(void)

{

        Init_sys();          

        Enable_LCD();                          //初始化字库      函数定义在

        MenuInitialation();               //初始化菜单

        GRAPH                             //图形初始化

}



/**************************************************************

*  函数说明:目录初始化函数                                   *

**************************************************************/

void MenuInitialation(void)

{

    MainMenuInit();

    TimeMenuInit();

    VoiceMenuInit();

    RobotMenuInit();

    FlashMenuInit();

}



/**************************************************************

*  函数说明:目录显示函数                                     *

**************************************************************/

void ShowMenu(void)

{

    short n = 0;



    MaxItems = MenuPoint[0].MenuCount;

    DisplayPoint = DisplayStart;

        if (MaxItems >= 4)

        {

             for (n = 0;n<4;n++)

             {

                         

                 LOCATE(n+1,1);

                 PRINT(MenuPoint[DisplayPoint].DisplayString);

                 

                 if ((DisplayPoint) == UserChoose)

                     {

                         BOX(1,n*16+1,126,(n+1)*16-2,1,1);

                     }

                 

                     DisplayPoint +=1;

                     if ((DisplayPoint) == (MaxItems))

                     {

                         DisplayPoint = 0;

                     }

             }

         }

         else

         {

             for (n = 0;n<MaxItems;n++)

             {

                         

                 LOCATE(n+1,1);

                 PRINT(MenuPoint[DisplayPoint].DisplayString);

                 

                 if ((DisplayPoint) == UserChoose)

                     {

                         BOX(1,n*16+1,126,(n+1)*16-2,1,1);

                     }

                 

                     DisplayPoint +=1;

                     if ((DisplayPoint) == (MaxItems))

                     {

                         DisplayPoint = 0;

                     }

                 

             }

         }

        //BOX(0,0,127,63,2,2);

}



/**************************************************************

*  函数说明:获得键值函数                                     *

**************************************************************/

short GetKeyNum(void)

{

    short TempKeyNum = 0;

        TempKeyNum = F_Key_Scan();       //获取按键值

        *P_IOA_Dir = 0x01ff;

        *P_IOA_Attrib = 0x01ff;       

        *P_IOA_Data = 0x01ff;

            

        return TempKeyNum;



}



/**************************************************************

*  函数说明:主函数                                           *

**************************************************************/

int main()

{                      

    short KeyNum = 0xff;

    

    SystemInitialation();            //系统初始化

    

    ShowMenu();

        while(1)

        {

            ClearWatchDog();             //喂狗

            KeyNum = GetKeyNum();        //获取按键值



            /*******************目录操作*********************/

            

            /***************************************

            *   [按键说明]                         *

            *  ----------------------------------- *

            *   [K1]            UP(向上)           *

            *   [K5]            Down(向下)         *

            *   [K2]            Esc(后退)          *

            *   [K6]            Enter(确定)        *

            *   [K3]            返回根目录         *

            ***************************************/

            if (KeyNum != 0xff)

            {

             ShowMenu();

                 switch(KeyNum)

                 {

                     case UP:

                         UserChoose --;

                         if (UserChoose < 0)

                         {

                             UserChoose = MaxItems-1;

                         }

                         break;

                     case Esc:

                         if (MenuPoint[0].ParentMenus != &Null)

                         {

                             MenuPoint = MenuPoint[0].ParentMenus;

                             UserChoose = 0;

                             DisplayStart = 0;

                         }

                         break;

                     case Down:

                         UserChoose ++;

                         if (UserChoose == MaxItems)

                         {

                             UserChoose = 0;

                         }

                         

                         break;

                     case Enter:

                         if (MenuPoint[UserChoose].Subs != NullSubs)

                         {

                             (*MenuPoint[UserChoose].Subs)();

                         }

                         else if (MenuPoint[UserChoose].ChildrenMenus != &Null)

                         {

                             MenuPoint = MenuPoint[UserChoose].ChildrenMenus;

                             UserChoose = 0;

                             DisplayStart = 0;

                         }

                         break;

                     case Reset:

                         MenuPoint = MainMenu;

                         UserChoose = 0;

                         DisplayStart = 0;

                         break;

                 }

                 

                 if ((UserChoose < DisplayStart) || (UserChoose > (DisplayStart+3)))

                 {

                    DisplayStart = UserChoose;

                 }

                 

                 CLS

                 ShowMenu();

                 

            }

            /*******************目录操作*********************/

        }

        



}
合肥-文盲
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-6 08:42:43 | 显示全部楼层
回复 支持 1 反对 0

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-25 10:58:27 | 显示全部楼层
补充一个关于作图的库函数



GRAPH_Command.h

----------------------------



#ifndef        __GRAPH_COMMAND_h__

#define        __GRAPH_COMMAND_h__

#include "lab_parameter.h"

/**********************************************************

*  函数库说明:图形函数扩展库                             *

*  版本:      v1.0                                       *

*  支持库:    Splc501sys.asm / Splc501Hardware.asm       *

*  作者:      傻孩子                                     *

*  日期:      2005年6月8日                               *

*                                                         *

*  说明:      在现有系统图形函数基础上,扩展若干使用     *

*              方便的图形函数                             *  

**********************************************************/



/**************************

*     系 统 宏 定 义      *

**************************/

# define GRAPH          FG_InitGraphic();

# define CLS        FG_ClearScreen(DG_CLS_ERASE);





/**************************

*    全 局 变 量 定 义    *

**************************/

short  Now_Str_X = 1;

short  Now_Str_Y = 1;



/**************************

*     函  数  声  明      *

**************************/

void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short IfEraser,short FillColor);

void LOCATE(short Str_x,short Str_y);

void rint(char *Strings);





/***********************************************************

*  函数说明:画矩形框工具                                  *

*      输入:矩框坐标  DrawModel FillColor                 *

*      [DrawModel]           [说明]                        *

*         0                   擦除                         *

*         1                   画线                         *

*         2                   填充                         *

*      [FillColor]           [说明]                        *

*         0                   白                           *

*         1                   黑                           *

*         2                   反色(XOR)                  *

***********************************************************/

void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short DrawModel,short FillColor)

{

    if (LT_X < 0)        LT_X = 0;

    if (LT_Y < 0)        LT_Y = 0;

    if (RB_X > 127)      RB_X = 127;

    if (RB_Y > 63)       RB_Y = 63;

    

    LT_X = 127 - LT_X;

    LT_Y = 64 - LT_Y;

    

    RB_X = 127 - RB_X;

    RB_Y = 64 - RB_Y;

        

    switch (DrawModel)

    {

        case 0:

            if(FillColor == 1)

            {

                FG_SetRectStyle(DG_RECT_ERASE);

            }

            else

            {

                FG_SetRectStyle(DG_RECT_COVER);

            }

            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y);

            break;

        case 1:

            if (FillColor == 1)

            {

                FG_SetRectStyle(DG_RECT_HOLLOW);

            }

            else if(FillColor == 0)

            {

                FG_SetRectStyle(DG_RECT_HOLLOW_ERASE);

            }

            else if(FillColor == 2)

            {

                FG_SetRectStyle(DG_RECT_SOLID_XOR);

            }

            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y);

            break;

        case 2:

            if (FillColor == 1)

            {

                FG_SetRectStyle(DG_RECT_COVER);

                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y);

            }

            else if (FillColor == 0)

            {

                FG_ClearRect(RB_X,RB_Y,LT_X,LT_Y,DG_CLS_ERASE);

            }

            else if (FillColor == 2)

            {

                FG_SetRectStyle(DG_RECT_SOLID_XOR);

                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y);

            }

            

            break;

    }



}



/***********************************************************

*  函数说明:字符串定位函数                                *

*      输入:字符串文本坐标(1:4  1:16)                   *

***********************************************************/

void LOCATE(short Str_y,short Str_x)

{

    if (Str_x >= 1 && Str_x <=17)

    {

        Now_Str_X = Str_x;

    }

    if (Str_y >= 1 && Str_y <=4)

    {

        Now_Str_Y = Str_y;

    }

}



/***********************************************************

*  函数说明:字符串显示函数                                *

*      输入:要显示的字符串                                *

***********************************************************/

void RINT(char *Strings)

{

    short Temp_X =(Now_Str_X-1)<<3;

    short Temp_Y =(Now_Str_Y-1)<<4;

    if (Temp_X < 0)        Temp_X = 0;

    if (Temp_Y < 1)        Temp_Y = 1;

    

    Temp_X = 127 - Temp_X;

    

    Temp_Y = 63 - Temp_Y;

    

    FG_PutStr(Strings,3,Temp_X,Temp_Y);

}



#endif
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-25 10:59:05 | 显示全部楼层
说明一下:

定义了一个结构体来表示菜单的每一个选项

通过指针来跳转子目录或者调用功能函数



支持滚屏、多级子菜单、网络式超链接方式(非树形)、风格修改简单。



使用这样的结构,可以很方便的通过修改单独的菜单项来更形菜单,不用在主程序里面修改任何东西,扩展方便,节约资源(某种程度上来说是的,不用因为添加了一个新的子菜单,就重新扩展无用的代码)。程序里面有很详细的说明,大家可以看一下哈,
合肥-文盲
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-6-25 12:34:37 | 显示全部楼层
回复【3楼】合肥-文盲:
---------------------------------
谢谢分享!

以文件附件的形式发不好么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-25 13:03:24 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
也好,一起研究研究他这个菜单呀,是我到目前看到的一个挺不错的菜单了,比阿莫论坛里面那个“一个占用内存极少的菜单”好理解,觉得这个更牛,这是这个人大一写的,佩服这些人,大一就能写出这个来
合肥-文盲
回复 支持 反对

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-6-25 14:11:53 | 显示全部楼层
谢谢,最近也在写菜单。
大海啊,全是水; 骏马啊,四条腿。
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-25 14:46:44 | 显示全部楼层
回复【6楼】ArchiChain:
---------------------------------
写出来没,加QQ聊聊,2300950641
合肥-文盲
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-25 19:59:48 | 显示全部楼层
菜单不是最难的,最难处理的是界面。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

10

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2014-5-30
在线时间
0 小时
发表于 2014-6-25 20:27:30 | 显示全部楼层
写好了求分享源代码,楼主!!
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-26 09:00:34 | 显示全部楼层
回复【8楼】xiaoyan:
---------------------------------
菜单不就是界面的切换和显示吗????????
合肥-文盲
回复 支持 反对

使用道具 举报

13

主题

185

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-4-9
在线时间
9 小时
发表于 2014-6-26 09:19:32 | 显示全部楼层
回复【7楼】合肥-文盲:
---------------------------------
我在tft屏上用const char * xxxx{}这样的字符串数组做的菜单显示。等项目忙完了再把能公开的部分整理和大家分享。
大海啊,全是水; 骏马啊,四条腿。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-26 22:33:32 | 显示全部楼层
回复【10楼】合肥-文盲:
---------------------------------
界面上,你要设计UI,需要设置各种参数,各种输出响应。功能一复杂,代码就会臃肿。。。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-6-26 22:34:44 | 显示全部楼层
所以在设计界面的时候,可以采用事件驱动的方式,将消息和响应分离。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2014-6-27 13:34:28 | 显示全部楼层
以前移植NXP芯片玩了玩。。。
呵呵。
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-27 14:13:19 | 显示全部楼层
回复【14楼】无名氏:
---------------------------------
移植是移植成功了,就是每次切换条项都要刷全屏,这点不能接受,正在修改,还有没有一层菜单的大标题,想办法加进去,还有BACK条项按确认键不退出,想办法修改,还有无法开机显示一个画面,比如时间,而是直接进入主菜单了,四点全解决了,就可以想办法调具体条项的具体参数了
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-6-27 14:13:38 | 显示全部楼层
回复【14楼】无名氏:
---------------------------------
不知道你有没有好方法解决我这四个问题
合肥-文盲
回复 支持 反对

使用道具 举报

3

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-6-28 12:51:51 | 显示全部楼层
回复【5楼】合肥-文盲:
---------------------------------
这有啥好牛的,我大一的时候还能写简单操作系统呢。
包括任务调度和内存分配。
真正牛的是数学学院的人。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-29 00:23:54 | 显示全部楼层
回复【17楼】卧虎藏龙:
---------------------------------
可否分享下?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-6-29 18:27:57 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
我是根据这个帖子做的  http://www.openedv.com/posts/list/12064.htm

内存分配也是按照原子的方法做的,没有做什么创新,也就不分享献丑了~、、、
回复 支持 反对

使用道具 举报

12

主题

432

帖子

0

精华

高级会员

Rank: 4

积分
729
金钱
729
注册时间
2012-6-21
在线时间
59 小时
发表于 2014-7-2 10:14:37 | 显示全部楼层
回复【15楼】合肥-文盲:
---------------------------------
1,菜单的切换跳转,和刷屏没关系,你可以局部刷屏,但是界面要对应好。
2,把前后上下的切换搞明白。指针的跳转。
呵呵。
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-7-2 13:41:53 | 显示全部楼层
回复【20楼】无名氏:
---------------------------------
这只是第一步呀  后来的参数调整界面才是最难做的,菜单项导航界面还可以做出来
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-8-15 15:25:38 | 显示全部楼层
回复【8楼】xiaoyan:
---------------------------------
我说的菜单就是菜单界面,包括里面可能出现的每一个界面,比如参数设置、时间设置这些界面,我的理解都是菜单的一部分,并不只是那种周转的
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-8-15 15:26:57 | 显示全部楼层
回复【13楼】xiaoyan:
---------------------------------
你说的是操作系统里面的概念吧  没用操作系统
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2014-8-15 15:28:42 | 显示全部楼层
回复【17楼】卧虎藏龙:
---------------------------------
呵呵  求分享佳作
合肥-文盲
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 14:07:17 | 显示全部楼层
回复【24楼】合肥-文盲:
---------------------------------
又看到你了。每次搜索“菜单”,都有大神(合肥-文盲)你在。
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-1-29 15:21:37 | 显示全部楼层
回复【25楼】wyudcl:
---------------------------------
哈哈,我不是大神,就是做了个菜单界面 ,代码量太大了
合肥-文盲
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 16:15:12 | 显示全部楼层
回复【26楼】合肥-文盲:
---------------------------------
你有用GUI吗?
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 16:15:46 | 显示全部楼层
回复【27楼】wyudcl:
---------------------------------
不跑ucos系统的吗?具体什么情况,能分享下吗?
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-1-29 16:28:33 | 显示全部楼层
回复【27楼】wyudcl:
---------------------------------
没用啊
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-1-29 16:29:13 | 显示全部楼层
回复【28楼】wyudcl:
---------------------------------
不跑啊  就是参考那个一个占用内存极少的菜单程序写的
合肥-文盲
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-1-29 16:31:32 | 显示全部楼层
分享一个网上找的菜单工程,看看对你可有帮助,我就参考他的。

一个占用内存极少的菜单.rar

1.61 MB, 下载次数: 3240

合肥-文盲
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-29 16:34:58 | 显示全部楼层
回复【30楼】合肥-文盲:
---------------------------------
谢谢楼主分享,我先试着看看GUI,我的菜单挺简单的,
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
 楼主| 发表于 2015-1-30 08:59:42 | 显示全部楼层
回复【32楼】wyudcl:
---------------------------------
用gui就很简单了,只要熟悉gui就好做了
合肥-文盲
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-7-10
在线时间
1 小时
发表于 2015-11-6 15:41:04 | 显示全部楼层
又见傻孩子的结构,用了很多年了。惭愧自己没设计出一个更好的。
回复 支持 反对

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-6
在线时间
15 小时
发表于 2015-11-21 11:58:51 | 显示全部楼层
只有学习膜拜的份儿了
回复 支持 反对

使用道具 举报

27

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
482
金钱
482
注册时间
2012-11-25
在线时间
63 小时
发表于 2016-1-4 16:27:34 | 显示全部楼层
膜拜学习
回复 支持 反对

使用道具 举报

13

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
242
金钱
242
注册时间
2013-1-6
在线时间
20 小时
发表于 2016-1-5 11:39:45 | 显示全部楼层
@正点原子 建议论坛加上代码编辑的功能
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2016-1-28 13:46:48 | 显示全部楼层
加入按键的定义在不同的界面,含义不同?这种按键的处理方式就行不通了吧?
30年众生牛马,60年诸佛龙象!
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-9-13
在线时间
35 小时
发表于 2017-11-19 15:31:26 | 显示全部楼层
支持支持!!!!
回复 支持 反对

使用道具 举报

21

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2017-12-22
在线时间
65 小时
发表于 2018-8-17 11:50:39 | 显示全部楼层
厉害了!
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-10-9
在线时间
22 小时
发表于 2018-11-6 08:16:22 | 显示全部楼层
LZ想请教一下你用的傻孩子最终做出来的效果怎么样?之前我做过1206那种液晶的,发现用他那个在子菜单返回父菜单时总是返回第一个,这个我一直没能弄好。另外这个2.8寸的tft的你有做ui吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 21:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表