找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2950|回复: 4
打印 上一主题 下一主题
收起左侧

求一份LCD菜单的设计(代码和结果图)

[复制链接]
跳转到指定楼层
#
ID:160171 发表于 2017-4-21 16:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
12黑币
留个QQ给我

最佳答案

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

地板
ID:61002 发表于 2017-4-21 16:23 | 只看该作者
  1. #include <stdio.h>  
  2. #include <string.h>  
  3.   
  4. #define Null 0  
  5. char over=0; //结束标志  
  6.   
  7. //结构体类型定义   
  8. struct MenuItem      
  9. {   
  10.     char MenuCount; //结构体数组的元素个数   
  11.     char *DisplayString;  //当前LCD显示的信息   
  12.     void (*Subs)();  //执行的函数的指针.   
  13.     struct MenuItem *Childrenms;  //指向子节点的指针   
  14.     struct MenuItem *Parentms;  //指向父节点的指针   
  15. };   
  16.   
  17. //函数声明   
  18. void Nop(void);   
  19. void DoSomething(struct MenuItem *manyou);   
  20. void GameOver(void);   
  21. void Locate(struct MenuItem *manyou);   
  22. void Run(struct MenuItem *manyou);  
  23.   
  24. //====================================   
  25. //结构体声明   
  26. struct MenuItem m0_main[4];   
  27. struct MenuItem m1_file[5];   
  28. struct MenuItem m1_edit[4];   
  29. struct MenuItem m1_view[2];   
  30. struct MenuItem m2_font[3];   
  31. struct MenuItem m1_help[3];  
  32.   
  33. //====================================   
  34. //结构体实现   
  35. struct MenuItem m0_main[4]=   
  36. {   
  37.     {4,"file",Nop,m1_file,Null},   
  38.     {4,"edit",Nop,m1_edit,Null},   
  39.     {4,"view",Nop,m1_view,Null},   
  40.     {4,"help",Nop,m1_help,Null},   
  41. };  
  42.   
  43. struct MenuItem m1_file[5]=   
  44. {   
  45.     {5,"open",DoSomething,Null,m0_main},   
  46.     {5,"save",DoSomething,Null,m0_main},   
  47.     {5,"save as",DoSomething,Null,m0_main},   
  48.     {5,"print",DoSomething,Null,m0_main},   
  49.     {5,"exit",GameOver,Null,m0_main},   
  50. };  
  51.   
  52. struct MenuItem m1_edit[4]=   
  53. {   
  54.     {4,"undo",DoSomething,Null,m0_main},   
  55.     {4,"redo",DoSomething,Null,m0_main},   
  56.     {4,"copy",DoSomething,Null,m0_main},   
  57.     {4,"paste",DoSomething,Null,m0_main},   
  58. };  
  59.   
  60. struct MenuItem m1_view[2]=   
  61. {   
  62.     {2,"font",Nop,m2_font,m0_main},   
  63.     {2,"color",DoSomething,Null,m0_main},   
  64. };  
  65.   
  66. struct MenuItem m2_font[3]=   
  67. {   
  68.     {3,"songti",DoSomething,Null,m1_view},   
  69.     {3,"heiti",DoSomething,Null,m1_view},   
  70.     {3,"youyuan",DoSomething,Null,m1_view},   
  71. };  
  72.   
  73. struct MenuItem m1_help[3]=   
  74. {   
  75.     {3,"index",DoSomething,Null,m0_main},   
  76.     {3,"online",DoSomething,Null,m0_main},   
  77.     {3,"about",DoSomething,Null,m0_main},   
  78. };  
  79.   
  80. //====================================   
  81. //函数实现   
  82. void Locate(struct MenuItem *manyou)   
  83. {   
  84.     printf("Now we at %s\n" ,manyou->DisplayString);   
  85. }  
  86.   
  87. void Run(struct MenuItem *manyou)   
  88. {   
  89.     (*(manyou->Subs))(manyou);   
  90. }  
  91.   
  92. void Nop(void)   
  93. {}  
  94.   
  95. void DoSomething(struct MenuItem *manyou)   
  96. {   
  97.     printf("we have done %s\n" ,manyou->DisplayString);   
  98. }  
  99.   
  100. void GameOver(void)   
  101. {   
  102.     over=1;   
  103.     printf("Now Game is Over ");   
  104.     getchar();   
  105. }  
  106.   
  107. //====================================   
  108. //主函数   
  109. int main(int argc, char *argv[])   
  110. {   
  111.     char charin; //输入的字符   
  112.     char menuid[3]={0,0,0}; //某一级的菜单的偏移量的记录数组   
  113.     char i=0; //上面数组的下标值  
  114.   
  115.     struct MenuItem *manyou; //漫游,在菜单中漫游  
  116.   
  117.     manyou=&m0_main[0]; //开始的位置   
  118.     Locate(manyou); //输出  
  119.   
  120.     while (!over) //如果还没完   
  121.     {   
  122.         charin=getchar(); //读取键盘字符   
  123.         switch (charin) //根据字符跳转   
  124.         {   
  125.         case '0': //到同级菜单的后一项   
  126.             {   
  127.                 menuid[i]++;   
  128.                 if (menuid[i]>manyou->MenuCount-1) menuid[i]=0;//可以看到MenuCount项是必要的   
  129.                 Locate(manyou+menuid[i]);   
  130.                 break;   
  131.             }   
  132.         case '1': //到同级菜单的前一项   
  133.             {   
  134.                 if (menuid[i]==0) menuid[i]=manyou->MenuCount-1;//可以看到MenuCount项是必要的   
  135.                 else menuid[i]--;   
  136.                 Locate(manyou+menuid[i]);   
  137.                 break;   
  138.             }   
  139.         case '+': //到下一级菜单,无下级时执行某功能   
  140.             {   
  141.                 if ((manyou+menuid[i])->Childrenms !=Null)   
  142.                 {   
  143.                     manyou=(manyou+menuid[i])->Childrenms;   
  144.                     i++;   
  145.                     menuid[i]=0;   
  146.                     Locate(manyou+menuid[i]);   
  147.                 }   
  148.                 else   
  149.                 {   
  150.                     Run(manyou+menuid[i]);   
  151.                 }   
  152.                 break;   
  153.             }   
  154.         case '-': //到上一级菜单,无上级时给出些提示   
  155.             {   
  156.                 if ((manyou+menuid[i])->Parentms !=Null)   
  157.                 {   
  158.                     manyou=(manyou+menuid[i])->Parentms;   
  159.                     i--;   
  160.                     Locate(manyou+menuid[i]);   
  161.                 }   
  162.                 else   
  163.                 {   
  164.                     printf("You are at the top of menu");   
  165.                 }   
  166.                 break;   
  167.             }   
  168.         default:  break;   
  169.         }   
  170.     }   
  171.     return 0;   
  172. }
复制代码
回复

使用道具 举报

板凳
ID:61002 发表于 2017-4-21 16:22 | 只看该作者
http://blog.csdn.net/longbiao831/article/details/40918587
你可以试试这个,我用着挺好的
回复

使用道具 举报

沙发
ID:160513 发表于 2017-4-21 16:18 | 只看该作者
这个真没有
回复

使用道具 举报

楼主
ID:61002 发表于 2017-4-21 16:03 | 只看该作者
QQ753388438
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表