[求助]希望哪位大神能详细解释下基于结构体的那个菜单。

2020-01-20 19:05发布

如题,看了傻孩子的,网上也找了一些,还是看不明白,原谅我这么菜,我找到的程序都没什么注释,说实话真的看不懂,越看越绕,越迷糊。。在此希望哪位大神能给来一个详细的解答。。。拜谢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
lswhome
1楼-- · 2020-01-21 15:34
68336016 发表于 2014-5-28 18:46
这个函数,里面有while循环,你要是不按键让其跳出,单片机不就在死等了? ...

是的,这个死等就能达到要求哇。。。
不要死等的也可以,就是里面没有WHILE,类似扫描键盘那种,高速扫描,如果有改变,就会显示改变的内容,如果没有改变,则进入函数就会自动退出,啥也不执行。。。总之我这种菜单就是很浪费代码资源,但要说实现的功能,貌似我目前的简单应用都能达到。话说那结构体的菜单真没人回答呀,唉。。。。
68336016
2楼-- · 2020-01-21 20:53
lswhome 发表于 2014-5-28 22:17
是的,这个死等就能达到要求哇。。。
不要死等的也可以,就是里面没有WHILE,类似扫描键盘那种,高速扫描 ...

我就是仿造傻孩子的那种结构体菜单的

MenuItem SpeedSelectMenu[SPEEDSELECT_MENUCOUNT] =
{        //MenuCount,ParentIndex,MenuString,MenuFunc,SubMenu,ParentMenu
        {SPEEDSELECT_MENUCOUNT,0,"速度1=     RPM",Gui_SelectCoef_Ns1,NULL,MainMenu},
        {SPEEDSELECT_MENUCOUNT,0,"速度2=     RPM",Gui_SelectCoef_Ns2,NULL,MainMenu},
        {SPEEDSELECT_MENUCOUNT,0,"速度3=     RPM",Gui_SelectCoef_Ns3,NULL,MainMenu},
        {SPEEDSELECT_MENUCOUNT,0,"速度4=     RPM",Gui_SelectCoef_Ns4,NULL,MainMenu},
};

平时菜单翻滚,进入,退出通过一个函数A来刷新,这函数A在main的主循环调用
如果进入到了菜单函数B,那么就那么通过修改函数指针pGuiFunction,把main主循环里的函数改成函数B
这样主循环就不会堵死,其它事情也能得到处理。

虽然看起来比较龌龊,但是没有其它更好思路前,我这么用也没出什么问题

main()
{
        while(1)
        {
                (*pGuiFunction)();
                其他一些函数();
        }
}
lswhome
3楼-- · 2020-01-21 22:10
唉。。。我理解能力太有限了,我还是自己琢磨写一个结构体的菜单吧,回头写出来了,贴出来大家给指点指点一下吧,我现在就是看不懂使用怎样的一个逻辑来做这个菜单,而且感觉这样结构体的菜单会吃掉很多的内存,因为结构体说白了都是一堆数组,这些数组都是在内存里。
mcu_lover
4楼-- · 2020-01-22 01:34
 精彩回答 2  元偷偷看……
lswhome
5楼-- · 2020-01-22 01:39
mcu_lover 发表于 2014-5-29 08:08
你的思路是对的。不需要使用结构体的菜单。即便是使用结构体,最终的调整设置等界面的方式还是类似于你写的 ...

嗯,明白您的意思了,现在我也学会了结构体菜单的基本工作逻辑,得空了就写一个比较通用的,这样在很多项目上只要拿过来稍微修改就可以使用了,这样会节省很多时间。。。感谢各位的指点!!谢谢!!!
enovo2468
6楼-- · 2020-01-22 06:58
过来看一下

一周热门 更多>