OpenEdv-开源电子网

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

基于液晶多级菜单下的最终的功能函数程序有简便方法吗?

[复制链接]

14

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-10-19
在线时间
1 小时
发表于 2014-11-25 16:54:56 | 显示全部楼层 |阅读模式
5金钱
       论坛里哪位高手做过基于液晶的多级菜单的程序,我用的是定义一个结构,然后创建一个结构数组,当按键按下时就会找到相应的索引号,我用索引号的方式来执行相应的操作,但是最终要执行的功能函数共有900个左右,我如果一一把它列举出来,不仅费时间而且占用了大量的空间,有没有针对最终执行的功能函数的一些简便列举方法?希望做过的朋友能给一些建议,不胜感激!

最佳答案

查看完整内容[请看2#楼]

简单的交流下吧。 我没做过这么多项的,最多就几十项,而且分为很多级菜单。我是用双向链表实现的,占用空间是肯定的,但是可以取得速度上的优势。 有900个功能函数,那么代码量应该不小了,说明你的单片机应该资源还比较丰富吧。不知道你说的简单列举方法是怎么个简单法,我觉得搞个函数指针数组,把900个函数都装在数组里,通过取数组元素去执行这些函数,也是比较简单的呀,效率也比较高啊。一个指针算4字节,也就4x900 = ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1176
金钱
1176
注册时间
2011-8-20
在线时间
21 小时
发表于 2014-11-25 16:54:57 | 显示全部楼层
简单的交流下吧。
我没做过这么多项的,最多就几十项,而且分为很多级菜单。我是用双向链表实现的,占用空间是肯定的,但是可以取得速度上的优势。

有900个功能函数,那么代码量应该不小了,说明你的单片机应该资源还比较丰富吧。不知道你说的简单列举方法是怎么个简单法,我觉得搞个函数指针数组,把900个函数都装在数组里,通过取数组元素去执行这些函数,也是比较简单的呀,效率也比较高啊。一个指针算4字节,也就4x900 = 3600字节空间,你的单片机装得下900个函数,那应该不差这么一点空间吧。

我的菜单是这样做的,算是抛砖引玉吧:菜单有很多级,每一子级可能又有子级或者功能,展开一项又一项。把每一级都做成一张张表(结构数组),这些表里面每个元素和功能函数是预先关联好的,然后把这些表链接起来,然后通过某种机制管理好这些表的操作,例如按下“确认键”时,发现表中这个元素有下级菜单,则进入下级菜单,有关联的功能函数,则执行关联的功能函数,这些操作同时会通知底层的绘图、显示字符等功能实现界面的显示。这些表是存放在code区的,如果要动态实现菜单,可以预读取部分存储在RAM区,再操作。如果嫌存储在code区浪费空间,可以存储在外部扩展的flash、sd卡等,通过预读取来实现,道理是一样的,当然这是以牺牲速度为代价的。
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复

使用道具 举报

14

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-10-19
在线时间
1 小时
 楼主| 发表于 2014-11-26 09:08:18 | 显示全部楼层
回复【2楼】subo19920716:
---------------------------------
您好,我的思路可能跟您的是一样的,我做的是一个变频器的液晶按键面板,一共有四级菜单,我也是把这些各级菜单做成一条链表,比如一参数设置二监控模式。。。后边接着有二级菜单的1.速度参数设置 2.频率参数设置 3.电压参数设置。。。。然后是三级菜单。。。,就这么排下来很多,所以说一共有900个,我在一个结构里面定义索引号,上翻键,下翻键,确认键,返回键,相应执行的函数,然后就可以定义一个结构数组,哪个键按下就会跳转到哪个索引号下。
但是问题是:比如我的二级菜单的参数设置很多,液晶每次显示4行汉字,按键往下按时选中哪一个,液晶反显哪一个,也就是我的每次四个函数内容基本一样,不同的是每次反显内容不一样,我想的是能把能把这四个内容基本一样的只是每次反显的内容不同合并一下,有方法能合并吗?
回复

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1176
金钱
1176
注册时间
2011-8-20
在线时间
21 小时
发表于 2014-11-26 14:36:13 | 显示全部楼层
回复【3楼】wenrui132690:
---------------------------------
液晶每次显示4行汉字,按键往下按时选中哪一个,液晶反显哪一个,也就是我的每次四个函数内容基本一样,不同的是每次反显内容不一样,我想的是能把能把这四个内容基本一样的只是每次反显的内容不同合并一下
---------------------------------
关于这一点,我觉得你应该把你的绘图层的代码封装好,留一个接口就行,这个接口传入的参数就是你当前的“表”以及“选中的项”,具体显示在液晶上的内容,靠这个封装好的代码来动态实现。而不是人为把这些菜单项可能出现的组合一一列举出来,这样肯定很浪费空间,你说的900个是指这种组合吧。

我觉得你应该把 “管理这些表的机制” 写强大点,而这些表里面保存的资源只是字符串、具体功能函数(如控制电机函数)等,实现界面维护的这个代码,应该具有读取“表”、生成“对应选中项(反显)”、以及具体绘图等功能,这样就可以把你900个函数大大压缩了。
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复

使用道具 举报

32

主题

230

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2016-4-14
在线时间
113 小时
发表于 2017-4-17 17:48:19 | 显示全部楼层
subo19920716 发表于 2014-11-25 16:54
简单的交流下吧。
我没做过这么多项的,最多就几十项,而且分为很多级菜单。我是用双向链表实现的,占用空 ...

我的多级菜单就是用switch case写出来的。要写很多。。。而且一修改就要修改一堆代码、、、我在网上有看到定义结构的方式,比我这简单不少。大神能给点算法思路吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-22 03:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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