5561|8

2002

帖子

24

TA的资源

五彩晶圆(高级)

楼主
 

【LPC54100】第六周-菜单列表和模拟时钟 [复制链接]

 
本帖最后由 shower.xu 于 2015-5-20 16:27 编辑

先把所有帖子做个汇总:
【LPC54100】第一周-分享部分原理图和blink跑起
第一周2-添加一个小显示屏并驱动成功
【LPC54100】第二周-添加按键处理程序并在LCD上显示
【LPC54100】第三周-彩屏驱动并移植GUI
【LPC54100】第三周2-彩屏驱动并移植GUI
【LPC54100】第四周-状态机多任务实现
【LPC54100】第五周-串口下载中文字库到flash
【LPC54100】第六周-菜单列表和模拟时钟
搞了这么久,总算有个结局了。这是最后一篇,主要加入了列表式菜单和模拟时钟动画,抛砖引玉。

先上个效果图,模拟时钟





菜单按照结构体指针的方式实现,首先得有个结构体

  1. struct MenuItem
  2. {
  3.     unsigned char menuCount;        //?????÷
  4.     unsigned char *displayString;   //????×?·???
  5.     void  (*subs)();                //????
  6.     struct MenuItem *childernMenus; //??????
  7.     struct MenuItem *parentMenus;   //×?????
  8. }   MENU_NULL;
复制代码
然后定义一堆结构体数组

  1. struct MenuItem MainMenu[4] =   
  2. {        
  3.     {4,(unsigned char *)"1.获取CPU频率   ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  4.     {4,(unsigned char *)"2.获取时间  ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  5.     {4,(unsigned char *)"3.波特率设置  ",&NULL_Function,Baudrate,&MENU_NULL},
  6.     {4,(unsigned char *)"4.系统设置    ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  7. };
  8. struct MenuItem MailMenu[4] =   
  9. {        
  10.     {4,(unsigned char *)"1.收件箱",&NULL_Function,&MENU_NULL,&MENU_NULL},
  11.     {4,(unsigned char *)"2.发件箱",&NULL_Function,&MENU_NULL,&MENU_NULL},
  12.     {4,(unsigned char *)"3.写新邮件",&NULL_Function,Baudrate,&MENU_NULL},
  13.     {4,(unsigned char *)"4.邮箱设置",&NULL_Function,&MENU_NULL,&MENU_NULL},
  14. };
  15. struct MenuItem CameraMenu[4] =   
  16. {        
  17.     {4,(unsigned char *)"1.拍照   ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  18.     {4,(unsigned char *)"2.摄像  ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  19.     {4,(unsigned char *)"3.曝光设置  ",&NULL_Function,Baudrate,&MENU_NULL},
  20.     {4,(unsigned char *)"4.存储设置    ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  21. };
  22. struct MenuItem TimeMenu[3] =   
  23. {        
  24.     {3,(unsigned char *)"1.设置日期和时间",&NULL_Function,&MENU_NULL,&MENU_NULL},
  25.     {3,(unsigned char *)"2.设置闹钟",&NULL_Function,&MENU_NULL,&MENU_NULL},
  26.     {3,(unsigned char *)"3.设置日期格式",&NULL_Function,&MENU_NULL,&MENU_NULL},
  27. };
  28. struct MenuItem MusicMenu[3] =   
  29. {        
  30.     {3,(unsigned char *)"1.播放",&NULL_Function,&MENU_NULL,&MENU_NULL},
  31.     {3,(unsigned char *)"2.暂停",&NULL_Function,&MENU_NULL,&MENU_NULL},
  32.     {3,(unsigned char *)"3.歌曲列表",&NULL_Function,&MENU_NULL,&MENU_NULL},
  33. };
  34. struct MenuItem GameMenu[3] =   
  35. {        
  36.     {3,(unsigned char *)"1.俄罗斯方块",&NULL_Function,&MENU_NULL,&MENU_NULL},
  37.     {3,(unsigned char *)"2.打砖块",&NULL_Function,&MENU_NULL,&MENU_NULL},
  38.     {3,(unsigned char *)"3.贪吃蛇",&NULL_Function,&MENU_NULL,&MENU_NULL},               
  39. };
  40. struct MenuItem SleepMenu[2] =   
  41. {        
  42.     {2,(unsigned char *)"1.进入休眠模式",&NULL_Function,&MENU_NULL,&MENU_NULL},
  43.     {2,(unsigned char *)"2.休眠设置",&NULL_Function,&MENU_NULL,&MENU_NULL},
  44. };
  45. struct MenuItem RadioMenu[3] =   
  46. {        
  47.     {3,(unsigned char *)"1.频道搜索",&NULL_Function,&MENU_NULL,&MENU_NULL},
  48.     {3,(unsigned char *)"2.上一频道",&NULL_Function,&MENU_NULL,&MENU_NULL},
  49.     {3,(unsigned char *)"3.下一频道",&NULL_Function,&MENU_NULL,&MENU_NULL},
  50. };
  51. struct MenuItem IapMenu[2] =   
  52. {        
  53.     {2,(unsigned char *)"1.开始IAP ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  54.     {2,(unsigned char *)"2.结束IAP   ",&NULL_Function,&MENU_NULL,&MENU_NULL},        
  55. };
  56. struct MenuItem AboutMenu[2] =   
  57. {        
  58.     {2,(unsigned char *)"1.我是Shower.xu",&NULL_Function,&MENU_NULL,&MENU_NULL},
  59.     {2,(unsigned char *)"2.谢谢大家",&NULL_Function,&MENU_NULL,&MENU_NULL},        
  60. };
  61. struct MenuItem *pMenuItem[10]={MainMenu,TimeMenu,MusicMenu,GameMenu,SleepMenu,RadioMenu,IapMenu,MainMenu,AboutMenu};
复制代码

菜单显示效果




下一步就是切换了

  1. void Menu2Process(void)
  2. {
  3.     if (key_status)
  4.     {
  5.         switch (key_status)
  6.         {
  7.             case KEY_UP_SHORT:
  8.                 UserChoose --;
  9.                 if (UserChoose < 0 )
  10.                 {
  11.                     UserChoose = MaxItems - 1;
  12.                 }
  13.                 break;
  14.             case KEY_DOWN_SHORT:
  15.                 UserChoose ++;
  16.                 if (UserChoose == MaxItems )
  17.                 {
  18.                     UserChoose = 0;
  19.                 }
  20.                 break;
  21.             case KEY_OK_SHORT:
  22.                 if ((MenuPoint[UserChoose].subs) != NULL_Function)
  23.                 {
  24.                             (*MenuPoint[UserChoose].subs)();
  25.                 }
  26.                 if (MenuPoint[UserChoose].childernMenus != &MENU_NULL)
  27.                 {
  28.                     MenuPoint          = MenuPoint[UserChoose].childernMenus;  
  29.                     Option                 = UserChoose;
  30.                     UserChoose          = 0;
  31.                     DisplayStart = 0;
  32.                 }
  33.                 break;
  34.              case KEY_CAL_SHORT:
  35.                 if (MenuPoint[0].parentMenus != &MENU_NULL )
  36.                 {                                 
  37.                     MenuPoint          = MenuPoint[0].parentMenus;                        
  38.                     DisplayStart = 0;
  39.                     UserChoose   = Option;        
  40.                 }
  41.                                 else {Menu2Exit();return;}
  42.                 break;
  43.         }
  44. /* 菜单选择显示样式1 */               
  45. //        if ((UserChoose < DisplayStart) || (UserChoose >= (DisplayStart + 1 )))
  46. //        {
  47. //                           DisplayStart = UserChoose;
  48. //        }
  49. /*   end  */        
  50.                                 GUI_WinFromClr(&demow);
  51.         Menu2Show();
  52.                                 /*  滚动条显示  */                                
  53.                                 GUI_ScorllBar(UserChoose,MenuPoint[0].menuCount);

  54.     }
  55. }
复制代码
这些就是根本,其它的包括初始化,退出和显示的函数见代码



效果



视频



代码

MenuList.rar (802.81 KB, 下载次数: 95, 售价: 1 分芯积分)

此帖出自NXP MCU论坛

最新回复

好东西,学习一下  详情 回复 发表于 2021-10-22 10:33
点赞 关注(4)
 

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
这个gui是什么。有STM32的菜单代码么?可以不用GUI直接在OLED上实现这个菜单么?
此帖出自NXP MCU论坛

点评

1、ZLG-GUI 2、GUI代码独立于硬件,只需要修改好接口 3、菜单代码是单独的,可以不用该GUI代码,但要调用基本的字符和打点函数。  详情 回复 发表于 2015-12-21 09:23
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

板凳
 
MJM_WSY 发表于 2015-12-20 23:46
这个gui是什么。有STM32的菜单代码么?可以不用GUI直接在OLED上实现这个菜单么?

1、ZLG-GUI
2、GUI代码独立于硬件,只需要修改好接口
3、菜单代码是单独的,可以不用该GUI代码,但要调用基本的字符和打点函数。
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

4
 
此帖出自NXP MCU论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

5
 
学习了
此帖出自NXP MCU论坛
 
 
 

回复

15

帖子

5

TA的资源

一粒金砂(初级)

6
 
好,
此帖出自NXP MCU论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

7
 

学习了
此帖出自NXP MCU论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

8
 

学习了
此帖出自NXP MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
好东西,学习一下
此帖出自NXP MCU论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表