打印

液晶上实现N级菜单之间的切换,有什么好方法没有???

[复制链接]
4008|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duljsky|  楼主 | 2013-3-19 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过按键的选择,想在液晶上实现多级菜单的来回切换,其他的通讯采集什么的照常执行,用什么方法?小弟第一次搞!经验不足,请教各位大神~
沙发
crazy2012| | 2013-3-19 19:44 | 只看该作者
同问

使用特权

评论回复
板凳
hawksabre| | 2013-3-19 20:53 | 只看该作者
通过层次访问的方式  应该是可以实现的  呵呵   顶一个

使用特权

评论回复
地板
duljsky|  楼主 | 2013-3-20 10:22 | 只看该作者
hawksabre 发表于 2013-3-19 20:53
通过层次访问的方式  应该是可以实现的  呵呵   顶一个

额~您能说的再具体点吗?现在我只是用一个全局的函数指针来指向相应菜单函数,放在主函数的while循环开始处~

使用特权

评论回复
5
lz80650904| | 2013-3-20 12:46 | 只看该作者
我以前用过一个土方法,加了一个菜单序号,通过序号来判断菜单,菜单多了就不好弄了。
待楼下提供好招!

使用特权

评论回复
6
duljsky|  楼主 | 2013-3-20 16:15 | 只看该作者
网上搜到N篇一模一样的**,就随便贴一个:http://blog.sina.com.cn/s/blog_7e3495ca0100vjkz.html
主要思想还是通过一个全局的函数指针来定位当前菜单项!看来目前只能这样了~不知道大牛们有更好的方法没~

使用特权

评论回复
7
simms01| | 2013-3-20 17:26 | 只看该作者
本帖最后由 simms01 于 2013-3-20 17:28 编辑

我现在是用这个土方法 还可以

每一个菜单是一个函数 例如 show_menu_setup()
每一个菜单给他一个ID    menu_id=setup;

建立一个key_run函数

void key_run(u8 key)
{
   switch (menu_id)
         {
              case setup:
                           if (key>=0x30 && key<=0x39)  //按了数字键
                           {

                               //执行操作                                be();

                          }
                         if (key==esc)
                        {

                           show_nemu_begin();  //返回到最上层菜单
                         }
                          break;

          }


}

使用特权

评论回复
8
duljsky|  楼主 | 2013-3-20 19:20 | 只看该作者
simms01 发表于 2013-3-20 17:26
我现在是用这个土方法 还可以

每一个菜单是一个函数 例如 show_menu_setup()

谢谢,不过感觉功能一复杂就有些吃力了,不过还是很感谢您的回答~:)
您也参考一下楼上的链接,说不定能给您带来什么想法呢!

使用特权

评论回复
9
duljsky|  楼主 | 2013-3-20 19:21 | 只看该作者
lz80650904 发表于 2013-3-20 12:46
我以前用过一个土方法,加了一个菜单序号,通过序号来判断菜单,菜单多了就不好弄了。
待楼下提供好招! ...

http://blog.sina.com.cn/s/blog_7e3495ca0100vjkz.html
参见这个链接来优化~希望能有所帮助~

使用特权

评论回复
10
duljsky|  楼主 | 2013-3-20 20:03 | 只看该作者
hawksabre 发表于 2013-3-19 20:53
通过层次访问的方式  应该是可以实现的  呵呵   顶一个

是二叉树吗?我也想过,但是感觉会比较麻烦点,分享的那个链接其实应该就是把父子及兄弟节点以整数代替了吧。还请您赐教~

使用特权

评论回复
11
344696734| | 2013-3-20 20:22 | 只看该作者
同求好吗

使用特权

评论回复
12
lz80650904| | 2013-3-21 08:57 | 只看该作者
duljsky 发表于 2013-3-20 19:21
http://blog.sina.com.cn/s/blog_7e3495ca0100vjkz.html
参见这个链接来优化~希望能有所帮助~ ...

例程中还是以序号为定义,通过Switch 来进行序号的处理。这样的话,如果多级菜单中,需要增删或移动菜单的位置,不改变序号可能不便管理,改变序号则后续的菜单值均要改变。网上的菜单是用链表的方式完成,不用定义序号,直接通过指针对菜单节点进行操作。我是对里面的数据结构没有理解,因此没有用这个方法,你也可以参考一下。:)

使用特权

评论回复
13
duljsky|  楼主 | 2013-3-21 09:43 | 只看该作者
lz80650904 发表于 2013-3-21 08:57
例程中还是以序号为定义,通过Switch 来进行序号的处理。这样的话,如果多级菜单中,需要增删或移动菜单 ...

网上的菜单是指?您能不能给个链接呀!我也想过用链表,但是我的这个菜单几乎是固定的了,因为菜单就像森林,可以转换成二叉链表来遍历森林,但是不能灵活的跳转,要顺序遍历~希望您可以想出两全的方法~

使用特权

评论回复
14
lz80650904| | 2013-3-21 10:07 | 只看该作者
附件是菜单链表的简述,相关的你可以在网上搜搜"傻孩子 菜单"相关的内容

傻孩子的菜单程序.pdf

105.48 KB

链表的菜单结构

使用特权

评论回复
15
duljsky|  楼主 | 2013-3-21 10:52 | 只看该作者
lz80650904 发表于 2013-3-21 10:07
附件是菜单链表的简述,相关的你可以在网上搜搜"傻孩子 菜单"相关的内容

感谢您的分享!谢谢~

使用特权

评论回复
16
zwq2| | 2013-3-21 14:11 | 只看该作者
我用的方法是这样的:第一级菜单是一个函数A(在A中循环测键),第二级菜单B是A中的一个函数,第三级菜单C是B中的一个函数,以此类推,这种方法虽然占RAM(堆栈)但是结构清晰,我以前也用过上面介绍的用结构的方法,一旦菜单深度加大,平级菜单又多的情况,显得很混乱,找都找不到。

使用特权

评论回复
17
duljsky|  楼主 | 2013-3-21 16:15 | 只看该作者
zwq2 发表于 2013-3-21 14:11
我用的方法是这样的:第一级菜单是一个函数A(在A中循环测键),第二级菜单B是A中的一个函数,第三级菜单C ...

呵呵,您的方法虽然感觉清晰,就像您说的,容易溢出。复杂的程序要想用优美的代码来实现,还是得靠结构体和指针,但是真正活用,创造一个恰到好处的结构体不容易,否则可能就会出现您说的混乱!当然也要具体情况具体分析~呵呵

使用特权

评论回复
18
zwq2| | 2013-3-21 16:35 | 只看该作者
现在的RAM都很大,一般不会有问题,我现在一个项目有七十几个图片界面,深度5级,感觉逻辑很清晰

使用特权

评论回复
19
whq20080808| | 2013-3-21 17:28 | 只看该作者
为什么不用WHILE(1);

使用特权

评论回复
20
duljsky|  楼主 | 2013-3-21 19:21 | 只看该作者
zwq2 发表于 2013-3-21 16:35
现在的RAM都很大,一般不会有问题,我现在一个项目有七十几个图片界面,深度5级,感觉逻辑很清晰 ...

flag1 = 1;
flag2 = 1;
while(flag1)
{
    while(flag2)
   {
       本功能实现了;
       flag2 = 0;
   }
   本功能实现了;
   flag1 = 0;
}
这样就能跳出来了~哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:日行一善

18

主题

127

帖子

1

粉丝