历史上的今天
今天是:2026年03月24日(星期二)
2023年03月24日 | 用于单片机的轻量级菜单
2023-03-24 来源:zhihu
有时要用单片机写一些大点的程序,但又没必要使用一些操作系统的时候,我写出了下面这种轻量级菜单状态机,配备一个显示设备加5个输入(上下左右和按下)
先看看效果图

上面的 ABC, BCD,EFG分别是一个菜单列表的菜单
菜单的结构框图为

对于单个菜单的结构为
对于每个菜单,分别有指向它上面的菜单,下面的菜单,它的子菜单,它的父菜单,它的菜单列表,和这个菜单对应执行的函数的指针

对于一组菜单列表为

使用非常方便,我们来看下对于刚才效果图所展示的菜单的使用
首先定义有几个菜单列表

和一个指向当前状态的菜单
![]()
菜单的初始化
首先先给每个菜单列表里添加相应的菜单

然后把各个菜单列表连接起来

上图中RefreshMenu函数是根据CurrentMenu来刷新液晶屏的,这个要各位自己实现
然后再主函数里不停的执行

MenuHandler是这样处理得到的按键的


以上只给出了如何使用
其实还有些函数如 获得当前菜单为当前菜单列表中第几项 等子函数没列出来,这些通过都是链表的指针实现的
上一篇:单片机应用中的干扰因素分析
下一篇:单片机指针基本知识
史海拾趣
|
Google将在美国时间周二推出Google Chrome网络浏览器,旨在挑战微软的IE浏览器。该浏览器Google Chrome的官方网站gears.google.com/chrome/也已启动。谷歌没有对此马上作出回应。据了解,Google Chrome浏览器通过强化地址栏功能和其它元素,使得浏 ...… 查看全部问答> |
|
两个C8051f04x芯片的串口uart的通讯问题,请高手帮忙,我没啥分,只能感谢你了。。 这是我毕业设计的一部分,目前只是要求能有单片机a向b发送一个字节即可,剩下的就能整明白了,但是我的单片机b怎么也收不到信息呀。发送端只是发送一个字节,接受端节收到这个字节后将把字节显示在LCD1602上,程序源代码如下:(我现在不明白为什么 ...… 查看全部问答> |
|
我想在ce5.0的windows\\programs目录下添加一个快捷方式文件, 但是我的是中文系统,所以\"windows\\programs\"变成了\"windows\\程序目录\"了,我在platform.dat中指定目录为Directory(\"windows\\programs\")或者Directory(\"windows\\程序目录\" ...… 查看全部问答> |
|
只需要用小键盘输入0000~9999任意数字,然后中间用.隔开,然后保存好,保存大概最大要50个左右,显示用LED,输入好后可以用USB跟电脑传输数据....可行么? 如果我需要把保存的数字用TXT文件保存是否是需要用到什么样的嵌入系统?这样的话需要用到什么芯片 ...… 查看全部问答> |
|
前后花了大概1周的时间把论坛的LM3S8962 EVALUATION BOARD熟悉了一下。这个片子还是有些独到之处的,比如简洁的外设架构、可设置的GPIO驱动能力、大容量存储、包括简练的库函数风格(这个个人很喜欢)等,但也发现也很多明显的不足: 1、首当其冲 ...… 查看全部问答> |




