搜索
bottom↓
回复: 2

LM3S制作菜单程序(移植傻孩子的菜单程序)

[复制链接]

出0入0汤圆

发表于 2013-9-29 11:29:33 | 显示全部楼层 |阅读模式
本身新手,如果问的比较幼稚,也请多多包涵,不吝赐教~~我用的是LM3S系列,想移植傻孩子的菜单程序 程序如下,我想问一下,为什么我的MenuPoint[0].MenuCount;MainMenu[DisplayPoint].DisplayString无法正确的读出来呢?是我的结构设置有问题?还是因为我用的是M3,还是其他原因,请各位大侠能够帮我分析分析



struct MenuItem         
{
    short MenuCount;
                char *DisplayString;
    void (*Subs)();
    struct MenuItem *ChildrenMenus;
    struct MenuItem *ParentMenus;
}Null;

void NullSubs(void)
{
}

struct MenuItem MainMenu[4];
struct MenuItem TimeMenu[4];
struct MenuItem VoiceMenu[5];
struct MenuItem RobotMenu[5];
struct MenuItem FlashMenu[5];

/***********************
***********************/
void MainMenuInit(void);
void TimeMenuInit(void);
void VoiceMenuInit(void);
void RobotMenuInit(void);
void FlashMenuInit(void);

/**************************************************************
                 *
**************************************************************/
void FlashMenuInit(void)
{
    FlashMenu[0].MenuCount = 4;
    FlashMenu[0].DisplayString = hai;
    FlashMenu[0].Subs = NullSubs;
    FlashMenu[0].ChildrenMenus = &Null;
    FlashMenu[0].ParentMenus = MainMenu;
     
    FlashMenu[1].MenuCount = 4;
    FlashMenu[1].DisplayString = "      Play      ";
    FlashMenu[1].Subs =NullSubs;
    FlashMenu[1].ChildrenMenus = &Null;
    FlashMenu[1].ParentMenus = MainMenu;
     
    FlashMenu[2].MenuCount = 4;
    FlashMenu[2].DisplayString = "      Pause     ";
    FlashMenu[2].Subs = NullSubs;
    FlashMenu[2].ChildrenMenus = &Null;
    FlashMenu[2].ParentMenus = MainMenu;
     
    //FlashMenu[3].MenuCount = 4;
    //FlashMenu[3].DisplayString = "  Flash Delete  ";
    //FlashMenu[3].Subs = NullSubs;;
    //FlashMenu[3].ChildrenMenus = &Null;
    //FlashMenu[3].ParentMenus = MainMenu;
     
    FlashMenu[3].MenuCount = 4;
    FlashMenu[3].DisplayString = "      Back      ";
    FlashMenu[3].Subs = NullSubs;
    FlashMenu[3].ChildrenMenus = MainMenu;
    FlashMenu[3].ParentMenus = MainMenu;
}

/**************************************************************
           *
**************************************************************/
void RobotMenuInit(void)
{
    RobotMenu[0].MenuCount = 4;
    RobotMenu[0].DisplayString =wan;
    RobotMenu[0].Subs = NullSubs;
    RobotMenu[0].ChildrenMenus = &Null;
    RobotMenu[0].ParentMenus = MainMenu;
     
    RobotMenu[1].MenuCount = 4;
    RobotMenu[1].DisplayString = "   wan   ";
    RobotMenu[1].Subs = NullSubs;
    RobotMenu[1].ChildrenMenus = &Null;
    RobotMenu[1].ParentMenus = MainMenu;
     
    RobotMenu[2].MenuCount = 4;
    RobotMenu[2].DisplayString = "    Go  Ahead   ";
    RobotMenu[2].Subs = NullSubs;
    RobotMenu[2].ChildrenMenus = &Null;
    RobotMenu[2].ParentMenus = MainMenu;
     
    //RobotMenu[3].MenuCount = 4;
    //RobotMenu[3].DisplayString = "     Go Back    ";
    //RobotMenu[3].Subs = NullSubs;
    //RobotMenu[3].ChildrenMenus = &Null;
    //RobotMenu[3].ParentMenus = MainMenu;
     
    RobotMenu[3].MenuCount = 4;
    RobotMenu[3].DisplayString = "      Back      ";
    RobotMenu[3].Subs = NullSubs;
    RobotMenu[3].ChildrenMenus = MainMenu;
    RobotMenu[3].ParentMenus = MainMenu;
     
}

/**************************************************************
                    *
**************************************************************/
void VoiceMenuInit(void)
{
    VoiceMenu[0].MenuCount = 4;
    VoiceMenu[0].DisplayString =gong;
    VoiceMenu[0].Subs = NullSubs;
    VoiceMenu[0].ChildrenMenus = &Null;
    VoiceMenu[0].ParentMenus = MainMenu;
     
    VoiceMenu[1].MenuCount = 4;
    VoiceMenu[1].DisplayString = "      Play      ";
    VoiceMenu[1].Subs = NullSubs;
    VoiceMenu[1].ChildrenMenus = &Null;
    VoiceMenu[1].ParentMenus = MainMenu;
     
    VoiceMenu[2].MenuCount = 4;
    VoiceMenu[2].DisplayString = "      gong     ";
    VoiceMenu[2].Subs = NullSubs;
    VoiceMenu[2].ChildrenMenus = &Null;
    VoiceMenu[2].ParentMenus = MainMenu;
     
    //VoiceMenu[3].MenuCount = 4;
    //VoiceMenu[3].DisplayString = "  Voice Delete  ";
    //VoiceMenu[3].Subs = NullSubs;
    //VoiceMenu[3].ChildrenMenus = &Null;
    //VoiceMenu[3].ParentMenus = MainMenu;
   
    VoiceMenu[3].MenuCount = 4;
    VoiceMenu[3].DisplayString = "      Back      ";
    VoiceMenu[3].Subs = NullSubs;
    VoiceMenu[3].ChildrenMenus = MainMenu;
    VoiceMenu[3].ParentMenus = MainMenu;
}
               
/**************************************************************
*  Ê±¼äÉ趨×ÓĿ¼³õʼ»¯                           *
**************************************************************/
void TimeMenuInit(void)
{
    TimeMenu[0].MenuCount = 4;
    TimeMenu[0].DisplayString =si;
    TimeMenu[0].Subs = NullSubs;
    TimeMenu[0].ChildrenMenus = &Null;
    TimeMenu[0].ParentMenus = MainMenu;
     
    TimeMenu[1].MenuCount = 4;
    TimeMenu[1].DisplayString = "    Date Set    ";
    TimeMenu[1].Subs = NullSubs;
    TimeMenu[1].ChildrenMenus = &Null;
    TimeMenu[1].ParentMenus = MainMenu;
     
    TimeMenu[2].MenuCount = 4;
    TimeMenu[2].DisplayString = "    AlertSet    ";
    TimeMenu[2].Subs = NullSubs;
    TimeMenu[2].ChildrenMenus = &Null;
    TimeMenu[2].ParentMenus = MainMenu;
     
    TimeMenu[3].MenuCount = 4;
    TimeMenu[3].DisplayString = "      si     ";
    TimeMenu[3].Subs = NullSubs;
    TimeMenu[3].ChildrenMenus = MainMenu;
    TimeMenu[3].ParentMenus = MainMenu;
     
}


void MainMenuInit(void)
{
     MainMenu[0].MenuCount = 4;
     MainMenu[0].DisplayString =hai;
     MainMenu[0].Subs = NullSubs;
     MainMenu[0].ChildrenMenus = TimeMenu;
     MainMenu[0].ParentMenus = &Null;

     MainMenu[1].MenuCount = 4;
     MainMenu[1].DisplayString = "  wan  ";
     MainMenu[1].Subs = NullSubs;
     MainMenu[1].ChildrenMenus = VoiceMenu;
     MainMenu[1].ParentMenus = &Null;

     MainMenu[2].MenuCount = 4;
     MainMenu[2].DisplayString = "  gong ";
     MainMenu[2].Subs = NullSubs;
     MainMenu[2].ChildrenMenus = RobotMenu;   
     MainMenu[2].ParentMenus = &Null;
      
     MainMenu[3].MenuCount = 4;
     MainMenu[3].DisplayString = "  si  ";
     MainMenu[3].Subs = NullSubs;
     MainMenu[3].ChildrenMenus = FlashMenu;      
     MainMenu[3].ParentMenus = &Null;

}

struct         MenuItem (*MenuPoint) = MainMenu;
char        DisplayStart  = 0;                                   
char         UserChoose    = 2;                                   
char         DisplayPoint  = 0;                                   
char         MaxItems      = 0;                           
char         Option                  = 0;               



//*------------------------------------------------------------------------------
//*------------------------------------------------------------------------------



void        ShowMenu(void)
{
                unsigned char i = 0;
                MaxItems = MenuPoint[0].MenuCount;       
                DisplayPoint = DisplayStart;
               
                        for (i = 0;i < LCD1602MaxDisplaYLinE;i++)
                        {
                                          hz_disp16(i,13,MainMenu[DisplayPoint].DisplayString);
                                        if ((DisplayPoint) == (UserChoose))
                                                {
                                                        hz_disp16(i,12,jiantou);          //
                                                }
                                        else{
                                                        hz_disp16(i,12,kong);    //д¿Õ¸ñ
                                                }
                                        DisplayPoint += 1;       
                                        if ((DisplayPoint) == (MaxItems))
                                                                                               {
                                              DisplayPoint = 0;
                                            }
                                }
}
//*------------------------------------------------------------------------------
//*------------------------------------------------------------------------------
void        ChangeMenu(void)
{                unsigned char GetKeyNum;
                GetKeyNum = KeYsCanFuc();
                if (GetKeyNum != 0xff)        //È·¶¨Óй¦ÄÜ°´¼ü±»°´ÏµÄÇé¿öϲÅÖ´ÐÐÆ书ÄÜ
                {                               
                        ShowMenu();                                                      //ÏÔʾ²Ëµ¥
                        switch (GetKeyNum)
                        {
                                case UP:
                                        UserChoose--;                              //Óû§²Ëµ¥µÄÑ¡Ôñ
                                        if (UserChoose >0)
                                        {
                                                UserChoose = MaxItems - 1;
                                        }
                                        break;
                                case Down:
                                        UserChoose++;
                                        if (UserChoose == MaxItems)
                                        {
                                                UserChoose = 0;
                                        }
                                        break;
                                case Enter:
                                        if ((MenuPoint[UserChoose].Subs) != NullSubs)
                                        {
                                                                                (*MenuPoint[UserChoose].Subs)();
                                                                        }
                                                                        if (MenuPoint[UserChoose].ChildrenMenus != &Null)
                                        {
                                                                          MenuPoint  = MenuPoint[UserChoose].ChildrenMenus;  
                                                                                              Option = UserChoose;
                                                                         UserChoose          = 0;
                                                                         DisplayStart = 0;
                                                                        }
                                                                                             break;
                                case Esc:
                       if (MenuPoint[0].ParentMenus != &Null)
                                {                                  
                                  MenuPoint          = MenuPoint[0].ParentMenus;                          
                                  UserChoose          = 0;
                                  DisplayStart = 0;
                                UserChoose   = Option;       
                        }
            break;                                
                        }
                       
                        if ((UserChoose < DisplayStart) || (UserChoose >= (DisplayStart + 1 )))
                                {
                            DisplayStart = UserChoose;
                    }  
                  ShowMenu();               
                }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2014-6-26 15:04:40 | 显示全部楼层
问题解决了吗

出0入0汤圆

发表于 2014-6-26 15:05:33 | 显示全部楼层
后来如何处理的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 00:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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