0
不知道有多少人对LCD菜单有过困扰,但我觉得应该有很多人做过。我还记得以前在大学电子设计大赛中获奖的作品,我用的是一个有菜单功能的12864。
以前可能会觉得菜单很高,但并没有想象的那么复杂。这篇文章是为分享每个人制作的单色屏幕菜单框架
总结
github中托管的代码:
这里说的菜单是128*64之类的小屏幕菜单,比如下面这个,不是彩屏上的GUI菜单框设计
作为底层驱动工程师,驱动完成后,需要编写硬件测试程序。这个测试程序一般是测试部门/硬件工程师用来测试硬件的,也会为工厂生产线测试准成品。
刚开始的时候人比较懒,一秒钟都不想直接走。所有的菜单都是这样,一层一层的。菜单越来越多的时候就开始纠结,写维护不方便,不美观,浪费程序空间。
作为一个每天看《编程之美》的码农,他决定改变变现的形状。在参观了百度, 酷狗,之后,我找到了两个参考:《基于二叉树的多层的液晶菜单界面设计》 《基于节点编号的通用树状菜单设计方法与实现.pdf》。按照他们的设计方法,我粗制滥造出了一个版本,好用,挺好的,但是也纠结。因为他们使用树的数据结构。对于程序运行来说,非常好,非常高效。但是对我来说,菜单代码是一次性的,但是菜单内容经常是变化的。我要用脑子维护一棵包含几十上百个菜单的树并不容易。
想了想,这些菜单怎么了?为什么对我不起作用?得出以下结论:
如果菜单太宽,可以切换菜单,但是到了最底层,也就是实际的测试功能,就可以不管了。菜单切换类似,实际测试不同。例如,在菜单中,按键1进入第一个菜单。但是在测试中,按钮1的功能是不同的。如果菜单要顾及这一点,同样的动作有太多的功能要统一抽象,那就很难了
模块化
出发点和上面说的菜单不一样。出发点是如何设计好菜单数据结构,让程序快速高效运行。我想要的是一个易于维护的菜单结构。菜单代码有多乱多纠结都无所谓。而且,就算几十万菜单被轮询,也只有几百个我们。没关系。
改进菜单
根据需求,我重新设计了一个菜单结构
是的,就这么简单。每个菜单都是这个结构。用这个结构填充列表。这是我们的菜单。这些都是套路
这个菜单列表有什么特点和要求?1需要一个根节点和一个端节点。2子节点必须跟随父节点,类似于下面的结构
第二个一级菜单有三个子菜单,子菜单是二级菜单,其中第一个子菜单下面有两个子菜单(三级菜单)。
维护菜单就是维护这个列表,添加、删除、修改,非常简单。菜单程序呢?谁在乎?定义菜单后,通过以下功能运行菜单:
-第一个参数是在哪个液晶显示器上显示菜单,-第二个是菜单列表,-第三个是菜单长度,-第四个是四种字体,-第五个是行距
注意:运行这个菜单需要rtos,因为菜单代码是while(1),不能卡。维护系统还需要其他任务,如按键扫描。
菜单实现效果
相关文件:emenu.c,emenu.h,emenu_test.c
当前代码:
1实现双排菜单,用数字键选择进入下一层。每页最多显示8个菜单(4*4键盘有1-8个键)
2.实现单列菜单。通过上下转动来检查菜单,并用确定键进入菜单。3天顶菜单没有实现,有兴趣的可以添加。
基于液晶驱动架构,这种简单的菜单适用于各种液晶显示器。
效果如下。需要就拿去吧。不客气
显示效果
128*64
OLED最终描述
以上菜单框来自屋顶鸟工作室,适合初学者练习。我来看看这个菜单框架。其实还有很多改进。
双面板免费加费,四层板加急打样,厚铜电路板打样