移植傻孩子大侠的菜单成功了(51+1602),需要的参考下。

2020-01-20 18:57发布

未命名.jpg (81.37 KB, 下载次数: 14) 下载附件 2012-4-4 18:32 上传 新建文件夹 (2).rar (139.23 KB, 下载次数: 2264) 2012-4-4 18:31 上传 点击文件名下载附件
仿真+程序



还有些功能想加上去,不知道咋加了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
68条回答
xou822
1楼-- · 2020-01-25 08:12
谢谢分享
LZ19992005
2楼-- · 2020-01-25 11:04
 精彩回答 2  元偷偷看……
spring152
3楼-- · 2020-01-25 16:31
mark 收藏了
10xjzheng
4楼-- · 2020-01-25 17:08
zhouyan 发表于 2013-4-16 21:12
弱问一下,楼上下载的程序编译通过,但移植到MDK STM32里就 编译没通过;问题就在于结构体赋值里的“&Null ...

他的那个结构体里面一个空结构体,一个是空函数,他结构体定义的时候把这两个搞混了,对应修改就好了。
wangxihe126
5楼-- · 2020-01-25 17:49
88888888888888888
HeP028
6楼-- · 2020-01-25 18:27
10xjzheng 发表于 2014-7-12 11:08
他的那个结构体里面一个空结构体,一个是空函数,他结构体定义的时候把这两个搞混了,对应修改就好了。 ...

感谢斧正。
  1. #include "MENU.h"
  2. #include "LCD1602.h"
  3. #include "UArTTEST.h"

  4. #define  LCDMAX_LINE 2


  5. #define UP    0xf8
  6. #define LEFT  0xd8
  7. #define RIGHT 0xa8
  8. #define DOEN  0x68
  9. #define ENTER 0x88
  10. #define ESC   0x98

  11. struct MenuItem MainMenu[4];
  12. struct MenuItem Baudrate[6];

  13. struct MenuItem
  14. {
  15.     unsigned char menuCount;        //Ŀ¼Ê÷
  16.     unsigned char *displayString;   //ÏÔʾ×Ö·û´®
  17.     void  (*subs)();                //º¯Êý
  18.     struct MenuItem *childernMenus; //¸¸²Ëµ¥
  19.     struct MenuItem *parentMenus;   //×ֲ˵¥
  20. }   MENU_NULL;

  21. void NULL_Function(void)                         //¿Õº¯Êý                  
  22. {                                   
  23.     ;
  24. }

  25. struct MenuItem MainMenu[4] =   
  26. {       
  27.     {4,(unsigned char *)"1.get cpu temp  ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  28.     {4,(unsigned char *)"2.get time      ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  29.     {4,(unsigned char *)"3.baudrate      ",&NULL_Function,Baudrate,&MENU_NULL},
  30.     {4,(unsigned char *)"4.system info   ",&NULL_Function,&MENU_NULL,&MENU_NULL},
  31. };

  32. struct MenuItem Baudrate[6] =   
  33. {       
  34.     {6,(unsigned char *)"1.2400          ",&NULL_Function,&MENU_NULL,MainMenu},
  35.     {6,(unsigned char *)"2.4800          ",&NULL_Function,&MENU_NULL,MainMenu},
  36.     {6,(unsigned char *)"3.9600          ",&NULL_Function,&MENU_NULL,MainMenu},
  37.     {6,(unsigned char *)"4.19200         ",&NULL_Function,&MENU_NULL,MainMenu},
  38.     {6,(unsigned char *)"5.38400         ",&NULL_Function,&MENU_NULL,MainMenu},
  39.     {6,(unsigned char *)"6.57500         ",&NULL_Function,&MENU_NULL,MainMenu},
  40. };

  41. struct MenuItem (*MenuPoint) = MainMenu;
  42. signed char        DisplayStart  = 0;                                   
  43. signed char UserChoose    = 0;                                   
  44. signed char DisplayPoint  = 0;                                   
  45. signed char MaxItems      = 0;                            
  46. signed char Option                  = 0;     

  47. void MenuShow(void)
  48. {
  49.     unsigned char iCount = 0;
  50.    
  51.     MaxItems = MenuPoint[0].menuCount;  //»ñÈ¡µ±Ç°²Ëµ¥µÄÌõÄ¿
  52.     DisplayPoint = DisplayStart;
  53.    
  54.     if (MaxItems > LCDMAX_LINE)
  55.     {
  56.         for (iCount = 0;iCount < LCDMAX_LINE;iCount++)
  57.         {
  58.             LCD1602WriteString(iCount,1,MenuPoint[DisplayPoint].displayString);
  59.             
  60.             if (DisplayPoint == UserChoose)
  61.             {
  62.                 LCD1602WriteOneChar(0,0,0x7e);
  63.             }
  64.             else
  65.             {
  66.                 LCD1602WriteOneChar(iCount,0,' ');
  67.             }
  68.             DisplayPoint += 1;
  69.             
  70.             if (DisplayPoint == MaxItems)
  71.             {
  72.                 DisplayPoint = 0;
  73.             }
  74.         }
  75.     }
  76.     else
  77.     {
  78.         for (iCount = 0;iCount < LCDMAX_LINE;iCount++)
  79.         {
  80.             LCD1602WriteString(iCount,1,MenuPoint[DisplayPoint].displayString);
  81.             
  82.             if (DisplayPoint == UserChoose)
  83.             {
  84.                 LCD1602WriteOneChar(0,0,0x7e);
  85.             }
  86.             else
  87.             {
  88.                 LCD1602WriteOneChar(iCount,0,' ');
  89.             }
  90.             DisplayPoint += 1;
  91.             
  92.             if (DisplayPoint == MaxItems)
  93.             {
  94.                 DisplayPoint = 0;
  95.             }
  96.         }
  97.     }
  98. }

  99. void MenuProcess(unsigned char GetKeyNumber)
  100. {
  101.     if (GetKeyNumber != 0xff)
  102.     {
  103.         switch (GetKeyNumber)
  104.         {
  105.             case UP:
  106.                 UserChoose --;
  107.                 if (UserChoose < 0 )
  108.                 {
  109.                     UserChoose = MaxItems - 1;
  110.                 }
  111.                 break;
  112.             case DOEN:
  113.                 UserChoose ++;
  114.                 if (UserChoose == MaxItems )
  115.                 {
  116.                     UserChoose = 0;
  117.                 }
  118.                 break;
  119.             case ENTER:
  120.                 if ((MenuPoint[UserChoose].subs) != NULL_Function)
  121.                 {
  122.                             (*MenuPoint[UserChoose].subs)();
  123.                 }
  124.                 if (MenuPoint[UserChoose].childernMenus != &MENU_NULL)
  125.                 {
  126.                     MenuPoint          = MenuPoint[UserChoose].childernMenus;  
  127.                     Option                 = UserChoose;
  128.                     UserChoose          = 0;
  129.                     DisplayStart = 0;
  130.                 }
  131.                 break;
  132.              case ESC:
  133.                 if (MenuPoint[0].parentMenus != &MENU_NULL )
  134.                 {                                  
  135.                     MenuPoint          = MenuPoint[0].parentMenus;                        
  136.                     DisplayStart = 0;
  137.                     UserChoose   = Option;       
  138.                 }
  139.                 break;
  140.         }
  141.         if ((UserChoose < DisplayStart) || (UserChoose >= (DisplayStart + 1 )))
  142.         {
  143.                            DisplayStart = UserChoose;
  144.         }
  145.         LCD1602DISPLAY_CLR();
  146.         MenuShow();
  147.     }
  148. }


复制代码

这个MDK上面没有问题的了

一周热门 更多>