[原创] Launchpad、LCD12864、4*4键盘构成良好人机交互模拟四级菜单

shan_99   2013-3-27 14:58 楼主
最近做设计因为要用到菜单显示,由于时间关系没怎么去看而且也看不太懂,所以我利用修改标志位的方式写了一个模拟4级菜单。现在贴出来供大家参考,有什么问题的望大家指正!大家共同进步,谢谢!

/********************************************
          宽带放大器-软件实现模块
********************************************/

unsigned char cx = 6,cy = 2;
unsigned long a1 = 0,a2 = 0,a3 = 0,a4 = 0,a5 = 0,a6 = 0,a7 = 0;
unsigned int Enter_Control = 0,wei=0;
unsigned int Gain_number =0;
unsigned int Menu1_Flag = 1;//菜单1的标志位
unsigned int Menu2_Flag = 1;//菜单2的标志位
unsigned int Menu2_Return_Flag = 1;//菜单2 “返回”标志位
unsigned int Menu2_Enter_Flag= 1;//菜单2 “确定”标志位
unsigned int Menu3_Enter_Flag = 1;//菜单3的标志位
//unsigned int Cancel_Return = 1;//取消 返回 功能标志位
/**********************************
module :     主菜单
function:     SoftW_LCD_Menu1()
返回值 :    无
功能  :   显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu1()
{
    LCD_12864_string(1,2,"宽带放大器");
    LCD_12864_string(2,1,"系统增益:");
    LCD_12864_string(2,6,"99");
    LCD_12864_string(2,8,"dB");
    LCD_12864_string(3,1,"输出电压:");
    LCD_12864_string(3,6,"33");
    LCD_12864_string(3,8,"mV");
    LCD_12864_string(4,7,"预设");
}

/*********************************
module :     二级菜单
function:     SoftW_LCD_Menu2()
返回值 :    无
功能  :   显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu2()
{
   LCD_12864_string(1,2,"增益预置模式");
   LCD_12864_string(3,3,"确定继续?");
   LCD_12864_string(4,1,"返回");
   LCD_12864_string(4,7,"确定");
}

/*********************************
module :     三级菜单
function:     SoftW_LCD_Menu3()
返回值 :    无
功能  :   显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu3()
{
   LCD_12864_string(1,3,"预置界面");
   LCD_12864_string(2,1,"预置增益:");
   LCD_12864_string(2,8,"dB");
   LCD_12864_string(4,1,"返回");
   LCD_12864_string(4,7,"确定");
}

/*********************************
module :     四级菜单
function:     SoftW_LCD_Menu4()
返回值 :    无
功能  :   显示 输出电压和增益
**********************************/
void SoftW_LCD_Menu4()
{

   LCD_12864_string(2,2,"增益设置完成");
   LCD_12864_string(3,3,"请返回!");
   LCD_12864_string(4,1,"返回");
}
/*********************************
module :     Enter 预置值
function:    SoftW_Enter_Gain()
返回值 :    无
功能  :   输入增益预设值,完成设置
**********************************/
void SoftW_Enter_Gain()
{
   if(Enter_Control)
   {
      if(Key_Val > 0 && Key_Val < 11)
      {
         wei++;
         if(Key_Val == 10) Key_Val = 0;
      }
      switch (wei)
      {
       case 1: Gain_number += Key_Val*10;       break;
       case 2: Gain_number += Key_Val;          break;
       default: break;
      }
      Key_Val = 0;      
      if(wei == 0)
      LCD_12864_string(3, 6, "^");
      else if(wei == 1)
         LCD_12864_string(3, 6," ^");
      //else if(wei == 2)
         //LCD_12864_string(3, 6,"   ");
      //else if(wei == 3)
      //LCD_12864_string(3, 3, "   ^");
      else
         wei = 0;
      LCD_12864_address_set(cx,cy);
      write_data(Gain_number/10 + 0x30);
      write_data(Gain_number%10 + 0x30);  //个位
   }
}
/*********************************
module :     控制增益
function:     SoftW_VG()
返回值 :    无
功能  :   增益预置、显示
**********************************/
void Key_SoftW_VG()
{
/**************主页显示**********/
if(Menu1_Flag)
   {
      SoftW_LCD_Menu1();//显示主界面
      Menu1_Flag = 0;//清除标志位,避免一直显示主界面
   }
/**********进入二级菜单***********
          Control key:16
*********************************/
  if(Menu2_Flag)
   {
      if(Key_Val==16)
      {
         Key_Val = 0;//关闭键值功能
         wei = 0;//清除按键输入增益次数标志
         clr_screen();  //清屏
         delay();//延时约15ms,避免显示不准确
         SoftW_LCD_Menu2();//显示二级菜单
         Menu2_Flag = 0;//清除标志位,避免该菜单显示不稳定
         Key_Menu2_ValF = 0;//清除菜单2按键中断标志位,为该菜单下的其他操作备用
         Menu2_Return_Flag = 1;//为该菜单下的 返回 用
         Menu2_Enter_Flag = 1;//为该菜单下的 确定 用
         //Cancel_Return = 1;//返回功能正常
      }
   }
/**********进入三级菜单**********
          Control key:16
********************************/
   if(!Menu2_Flag&&Key_Menu2_ValF&&Menu2_Enter_Flag)
   {
      if(Key_Val==16)//进入三级菜单
      {
         Enter_Control = 1;//按键输入增益控制字开
         Key_Val = 0;//关键值功能
         wei = 0;//清除按键输入增益次数标志
         clr_screen();  //清屏
         delay();//延时约15ms,避免显示不准确
         SoftW_LCD_Menu3();//显示三级菜单
         Key_Menu3_ValF = 0;//清除菜单3按键中断标志位,为该菜单下的其他操作备用
         Menu2_Enter_Flag = 0;//清除标志位,避免该菜单显示不稳定
         Menu3_Enter_Flag = 1;//为该菜单下的 确定 用
         //Cancel_Return = 0;//取消该级菜单的返回功能
      }
   }
/**********进入四级菜单**********
          Control key:16
*********************************/
  if(!Menu2_Enter_Flag&&Key_Menu3_ValF&&Menu3_Enter_Flag)
   {
      if(Key_Val==16)//进入四级菜单
      {
         Enter_Control = 0;//关按键输入增益控制字
         Key_Val = 0;
         wei = 0;
         clr_screen();  //清屏
         delay();//延时约15ms,避免显示不准确
         SoftW_LCD_Menu4();
                          //传输 Gain_number 给外设
         Menu3_Enter_Flag = 0;//清除标志位,避免该菜单显示不稳定
         Gain_number = 0;
         //Cancel_Return = 1;//返回功能正常
      }
   }
/**********返回主菜单************
          Control key:13
*********************************/
  if(!Menu2_Flag&&Menu2_Return_Flag/*&&Cancel_Return*/)
   {
      if(Key_Val==13)//菜单返回主菜单
      {
         Enter_Control = 0;
         wei = 0;
         Key_Val = 0;
         clr_screen();  //清屏
         delay();//延时约15ms,避免显示不准确
         SoftW_LCD_Menu1();//回到 主界面
         Menu2_Flag = 1;//为主菜单 进入 备用

         Menu2_Enter_Flag = 1;//避免菜单2和菜单4的显示乱
         Menu3_Enter_Flag = 0;//避免菜单2和菜单4的显示乱

         Menu2_Return_Flag = 0;//清除标志位,避免该菜单显示不稳定
      }
   }
SoftW_Enter_Gain();//键盘输入预设键值
}

    SoftW_Achi.c (2013-3-27 14:58 上传)

    6.1 KB, 下载次数: 44

    四级模拟菜单

回复评论 (4)

好资料,给你顶一下!
点赞  2013-3-27 16:21

回复 沙发 fengye5340 的帖子

谢谢
点赞  2013-3-27 17:02
顶一个,说不定以后还能借鉴楼主的思路
点赞  2013-4-3 20:15
顶一下
呵呵呵
点赞  2018-4-17 23:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复