一个产品级MCU菜单框架设计

2023-09-09 08:12:38 来源:面包芯语

3、改进菜单

根据需求,我重新设计了一个菜单结构体

/***@brief菜单对象*/typedefstruct_strMenu{MenuLell;///<菜单等级charcha[MENU_LANG_BUF_SIZE];///中文chareng[MENU_LANG_BUF_SIZE];///英文MenuTypetype;///菜单类型s32(*fun)(void);///测试函数}MENU;

是的,就这么简单,每一个菜单都是这个结构体 用这个结构体填充一个列表,就是我们的菜单了

constMENUEMenuListTest[]={MENU_L_0,//菜单等级"测试程序",//中文"test",//英文MENU_TYPE_LIST,//菜单类型NULL,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_1,//菜单等级"LCD",//中文"LCD",//英文MENU_TYPE_LIST,//菜单类型NULL,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"VSPIOLED",//中文"VSPIOLED",//英文MENU_TYPE_FUN,//菜单类型test_oled,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"I2COLED",//中文"I2COLED",//英文MENU_TYPE_FUN,//菜单类型test_i2coled,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_1,//菜单等级"声音",//中文"sound",//英文MENU_TYPE_LIST,//菜单类型NULL,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"蜂鸣器",//中文"buzzer",//英文MENU_TYPE_FUN,//菜单类型test_test,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"DAC音乐",//中文"DACmusic",//英文MENU_TYPE_FUN,//菜单类型test_test,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"收音",//中文"FM",//英文MENU_TYPE_FUN,//菜单类型test_test,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_1,//菜单等级"触摸屏",//中文"tp",//英文MENU_TYPE_LIST,//菜单类型NULL,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"校准",//中文"calibrate",//英文MENU_TYPE_FUN,//菜单类型test_cal,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_2,//菜单等级"测试",//中文"test",//英文MENU_TYPE_FUN,//菜单类型test_tp,//菜单函数,功能菜单才会执行,有子菜单的不会执行MENU_L_1,//菜单等级"按键",//中文"KEY",//英文MENU_TYPE_FUN,//菜单类型test_key,//菜单函数,功能菜单才会执行,有子菜单的不会执行/*最后的菜单是结束菜单,无意义*/MENU_L_0,//菜单等级"END",//中文"END",//英文MENU_TYPE_NULL,//菜单类型NULL,//菜单函数,功能菜单才会执行,有子菜单的不会执行};

这个菜单列表有什么特点和要求呢?1 需要一个根节点和结束节点 2 子节点必须跟父节点,类似下面结构


(资料图)

-----------------------------------------------根节点第1个1级菜单第1个子菜单第2个子菜单第3个子菜单第2个1级菜单第1个子菜单第1个孙菜单第2个孙菜单第2个子菜单第3个子菜单第3个1级菜单第4个1级菜单第5个1级菜单结束节点------------------------------------------------
emenu_run(WJQTestLcd,(MENU*)&WJQTestList[0],sizeof(WJQTestList)/sizeof(MENU),FONT_SONGTI_1616,2);

注意:运行这个菜单需要有rtos,因为菜单代码是while(1)的,陷进去就不出来了。需要有其他线程(TASK)维护系统,例如按键扫描。

4、菜单实现效果

相关文件:emenu.c、emenu.h、emenu_test.c

当前代码:

1实现了双列菜单,用数字键选择进入下一层。每页最多显示8个菜单(4*4键盘用1-8键)

2 实现了单列菜单,通过上下翻查看菜单,确认键进入菜单。3 天顶菜单未实现,谁有兴趣可以加上。

3 基于LCD驱动架构,这个简易菜单自适应于多种LCD。

效果如下,有需要的尽管拿去,不用谢。

5、显示效果

128*64 OLED
128*64 OLED
128*128 tft lcd
128*128 tft lcd
320*240 tft lcd
320*240 tft lcd

6、最后

本文就分享到这里,感兴趣的读者可以自己写一个菜单框架。

定期以通俗易懂的方式分享嵌入式知识,关注公众号,加星标,每天进步一点点。

声明:

本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。

上一篇:

安徽马鞍山警方破获一特大网络赌博案 16名罪犯获刑

下一篇:

安徽马鞍山警方破获一特大网络赌博案 16名罪犯获刑

推荐阅读