在线情况
楼主
  • 头像
  • 级别
  • 门派
  • 职务总版主
  • 声望+9
  • 财富5
  • 积分3065
  • 经验390701
  • 文章6744
  • 注册2006-03-07
一个经典的液晶菜单程序
[P]转载:ahong007
[CODE]unsigned char tempin,tempout,temprun;
unsigned char Key_Value();
unsigned char Change_Value(unsigned char);
void Delay_1(unsigned int m);
void Run_Satus();
char * MainMenuTitle = "主菜单";
const char * MainMenuItems[] = {
    "1.室内温度调整",
    "2.室外温度调整",
    "3.运行时间调整",
    "4.ESC    退出",
};
TMenu MainMenu;
void OnSelectMainMenu(int index)
{       
    if (index < 0 || index >= sizeof(MainMenuItems) / sizeof(char *)) return;
    ClearScreen();
    switch (index) {
    case 0:
        TextOut(0, 1, "室内调整开始 ");
        tempin=Change_Value(tempin);
        TextOut(0, 1, "室内调整完毕");
        Delay_1(300000);
        break;
    case 1:
       TextOut(0, 1, "室外调整开始 ");
       tempout=Change_Value(tempout);
       TextOut(0, 1, "室外调整完毕");
        Delay_1(300000);
        break;
    case 2:
       TextOut(0, 1, "运行时间调整开始");
       tempout=Change_Value(temprun);
        TextOut(0, 1, "运行时间完毕");
         Delay_1(300000);
        break;
    case 3:
       break;
    }
    ClearScreen();
}
UINT OnMainMenuOk(void * arg)
{
    TMenu * pMenu = (TMenu *)arg;
    if (pMenu) OnSelectMainMenu(pMenu->Current);
    return 0;
}
UINT OnMainMenuCancel(void * arg)
{
    TMenu * pMenu = (TMenu *)arg;
    if (pMenu) {
        CloseMenu(pMenu);
    }
    return 0;
}
UINT OnMainMenuOtherKey(void * arg)
{
    TMenu * pMenu = (TMenu *)arg;
    char key;
    if (pMenu) {
        key = pMenu->EventArg;
        OnSelectMainMenu(key - '1');
        DrawMenu(pMenu);
    }
    return 0;
}
void InitMenu()
{
    InitializeMenu(&MainMenu, MainMenuTitle, MainMenuItems, sizeof
(MainMenuItems) / sizeof(char *));
    MainMenu.OnOk = OnMainMenuOk;
    MainMenu.OnOtherKey = OnMainMenuOtherKey;
    MainMenu.OnCancel = OnMainMenuCancel;
}
unsigned char Key_Value()
{
  unsigned char KeyTemp;
  KeyTemp=GetKey();
  switch(KeyTemp)
  {  case(VK_ESCAPE):
          return(0);
          break;
      case(VK_ENTER):
          return(1);
          break;
      case(VK_UP):
          return(2);
          break;
      case(VK_DOWN):
          return(3);
          break;
          }
}
unsigned char Change_Value(unsigned char temp2)
{ unsigned char temp3;
   temp3=temp2;
while((Key_Value()!=0)&&(Key_Value()!=1))
        {
        if(Key_Value()==2)temp3++;
        else if(Key_Value()==3)temp3--;
        ClearLine(1);
        TextOut(0, 1, "调整状态%d", temp3);
        }
        if(Key_Value()==1)return(temp3);
        else if(Key_Value()==0) return(temp2);
}
 void Delay_1(unsigned int m)
 {while(m--);
 }
void Run_Satus()
{
 ClearScreen();
 TextOut(0, 0, "室内温度  %d",tempin);
 TextOut(0, 1, "室外温度  %d",tempout);
 TextOut(0, 2, "运行时间  %d",temprun);
 TextOut(0, 3, "ENTER 进入调整");
}
void tmain()
{
     tempin=30;
     tempout=30;
     temprun=30;
    unsigned char key;
    InitMenu();
    while(1)
    {
    Run_Satus();
    key=GetKey();
    if(key==VK_ENTER)ShowMenu(&MainMenu);
  }
}
[/CODE][/P]
[ 此帖最后由DC在2012-11-8 0:23:10从 电子通识 转移过来 ]
[COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
在线情况
2
  • 头像
  • 级别
    • 积分11
    • 经验295
    • 文章36
    • 注册2007-02-12
    谢谢啦!!
    微控网感谢您的参与
    在线情况
    3
    • 头像
    • 级别
      • 积分1
      • 经验19
      • 文章2
      • 注册2007-03-01
      谢谢
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分20
        • 经验6734
        • 文章55
        • 注册2006-08-19
        DC,这个程序能不能移植到我们那块MC430F14这块板上啊,用KM12232F实现呢???
        微控网感谢您的参与
        在线情况
        5
        • 头像
        • 级别
        • 门派
        • 职务总版主
        • 声望+9
        • 财富5
        • 积分3065
        • 经验390701
        • 文章6744
        • 注册2006-03-07
        我认这没什么好移植的,主要是理解和参考别人的程序思路.理解了思路,可以自行模仿或重新设计适合自己的.
        [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
        在线情况
        6
        • 头像
        • 级别
          • 积分13
          • 经验89
          • 文章15
          • 注册2007-04-05
          参考一下
          微控网感谢您的参与
          在线情况
          7
          • 头像
          • 级别
            • 积分19
            • 经验1701
            • 文章62
            • 注册2006-11-30
            这个好,刚好设计中用到,学习一下它的精髓
            微控网感谢您的参与
            在线情况
            8
            • 头像
            • 级别
              • 积分6
              • 经验445
              • 文章8
              • 注册2007-03-20
              学习........
              微控网感谢您的参与
              在线情况
              9
              • 头像
              • 级别
                • 积分1
                • 经验53
                • 文章1
                • 注册2012-06-12
                [P]学习了,谢谢[/P]
                微控网感谢您的参与
                Powered by LeadBBS 9.2 .
                Page created in 0.2637 seconds with 5 queries.