|
本身新手,如果问的比较幼稚,也请多多包涵,不吝赐教~~我用的是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》
|