⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.lst

📁 ST7565_Driver_menu.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
 185   1          {
 186   2              DisplayLenCount=ScreenHLine;
 187   2          }
 188   1          LCD_disp_CLS();
 189   1      
 190   1          for (i=0;i<DisplayLenCount;i++)
 191   1          {
 192   2              if (i==Menu_State.FocusLine)
 193   2              {
 194   3              //光标所在行菜单项显示,可以自定义反白显示等
 195   3                  UpdatedisplayMenu_Focus(p->MenuTxt);
 196   3              }
 197   2              else
 198   2              {
 199   3                  LCD_disp_printR(p->MenuTxt,MenuItemDisplayStartX,i+MenuItemDisplayStartY);
 200   3              }
 201   2              p++;
 202   2          }
 203   1      
 204   1      
 205   1      
 206   1      
 207   1      }
 208          
 209          //按键处理函数
 210          void UpdateMenuPanelkeyInner(unsigned char MenuKeyCode)
 211          {
 212   1          unsigned char i;
 213   1          //父菜单堆栈临时元素
 214   1          Menu_Statestruct  tmpParent;
 215   1      
 216   1          //菜单是否更新 1是 0否
 217   1              MenuDisPlayUpdate=1;
 218   1      
 219   1          switch (MenuKeyCode)
 220   1          {
 221   2      
 222   2          //一直按着向上键
 223   2          case   MenuKey_UpCon:
 224   2      
 225   2          case  MenuKey_Up:
 226   2      
 227   2      
 228   2              if (Menu_State.FocusLine>0)
 229   2              {
 230   3                  Menu_State.FocusLine--;  //焦点在屏上是第几项
 231   3              }
 232   2              else
 233   2              {
 234   3                  if (Menu_State.ItemStartDisplay>0)
 235   3                  {
 236   4                      Menu_State.ItemStartDisplay--;
 237   4                  }
 238   3                  else
 239   3                  {
 240   4                      Menu_State.ItemStartDisplay=MenuPanel[Menu_State.CurrentPanel].MenuItemCount-1;
 241   4                  }
C51 COMPILER V8.05a   MENU                                                                 09/22/2009 20:36:58 PAGE 5   

 242   3      
 243   3              }
 244   2      
 245   2              break;
 246   2      
 247   2           //一直按着向下键
 248   2         case   MenuKey_DownCon:
 249   2          case  MenuKey_Down:
 250   2              if ((Menu_State.ItemStartDisplay+Menu_State.FocusLine)<MenuPanel[Menu_State.CurrentPanel].MenuItem
             -Count-1)
 251   2              {
 252   3                  if (Menu_State.FocusLine<ScreenHLine-1 )
 253   3                  {
 254   4                      Menu_State.FocusLine++;  //焦点在屏上是第几项
 255   4                  }
 256   3                  else
 257   3                  {
 258   4                      Menu_State.ItemStartDisplay++; //显示第一项对应的菜单条目索引
 259   4                  }
 260   3              }
 261   2              else
 262   2              {
 263   3                  Menu_State.FocusLine=0;
 264   3                  Menu_State.ItemStartDisplay=0;
 265   3              }
 266   2      
 267   2              break;
 268   2          case  MenuKey_Ok:
 269   2      
 270   2              i=Menu_State.FocusLine+Menu_State.ItemStartDisplay;
 271   2              if ((MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->MenuChildID==MenuNoChild)
 272   2              {
 273   3                  (*((MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->CurrentOperate))();
 274   3              }
 275   2              else
 276   2              {
 277   3                   if (StackFull()==0)
 278   3                   {
 279   4                  //父菜单显示在屏幕上的第一条条目
 280   4                  tmpParent.ItemStartDisplay=Menu_State.ItemStartDisplay;
 281   4                   //焦点在屏上是第几项
 282   4                  tmpParent.FocusLine=Menu_State.FocusLine;
 283   4                  //父菜单号
 284   4                  tmpParent.CurrentPanel=Menu_State.CurrentPanel;//本级菜单的菜单索引号
 285   4                  //入栈
 286   4                  StackPush(tmpParent);
 287   4      
 288   4      
 289   4                  Menu_State.CurrentPanel=(MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->MenuChildID;//父
             -菜单的菜单索引号
 290   4                  Menu_State.ItemStartDisplay=0; //显示第一项对应的菜单条目索引
 291   4                  Menu_State.FocusLine=0;  //焦点在屏上是第几项
 292   4                   
 293   4                   }
 294   3                   else
 295   3                   {
 296   4                      //菜单达到最大深度,栈满提示函数
 297   4                          StackFullErr();
 298   4      
 299   4                   }
 300   3      
 301   3              };
C51 COMPILER V8.05a   MENU                                                                 09/22/2009 20:36:58 PAGE 6   

 302   2              break;
 303   2          //一直按着返回键
 304   2         case MenuKey_CancelCon:
 305   2          case  MenuKey_Cancel:
 306   2                  //测试栈是否空 1 是 0 否
 307   2                  if( StackEmpty()==0)
 308   2                  {            
 309   3                      tmpParent=StackPOP();
 310   3                      Menu_State.CurrentPanel=tmpParent.CurrentPanel;
 311   3                      Menu_State.ItemStartDisplay=tmpParent.ItemStartDisplay; //显示第一项对应的菜单条目索引
 312   3                      Menu_State.FocusLine=tmpParent.FocusLine;  //焦点在屏上是第几项
 313   3                  
 314   3                  }
 315   2                  else
 316   2                  {
 317   3                    //菜单已经到最顶了,栈空提示函数
 318   3                          StackEmptyErr();
 319   3      
 320   3                  }
 321   2      
 322   2              break;
 323   2      
 324   2              default:
 325   2               //菜单是否更新 1是 0否
 326   2                    MenuDisPlayUpdate=0;
 327   2               break;
 328   2      
 329   2          }
 330   1      }
 331          
 332          void UpdateMenuPanelkey(unsigned char MenuKeyCode)
 333          {
 334   1      if (MenuKeyCode==MenuKey_Null)
 335   1      {
 336   2              return;
 337   2      }
 338   1      //弄这两个函数并列目的是减小RAM使用
 339   1      UpdateMenuPanelkeyInner(MenuKeyCode);//更新按键
 340   1      //菜单是否更新 1是 0否
 341   1      if (MenuDisPlayUpdate==1)
 342   1      {
 343   2      UpdatedisplayMenuPanel();//更新菜单显示
 344   2      }
 345   1      
 346   1      }
 347          
 348          
 349          void init_Menu()
 350          {   
 351   1          //菜单栈初始化
 352   1          StackINI();
 353   1      
 354   1          Menu_State.CurrentPanel=0;//本级菜单的菜单索引号
 355   1          Menu_State.ItemStartDisplay=0; //显示第一项对应的菜单条目索引
 356   1          Menu_State.FocusLine=1;  //焦点在屏上是第几项
 357   1          UpdatedisplayMenuPanel();//更新菜单
 358   1      }
 359          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    717    ----
C51 COMPILER V8.05a   MENU                                                                 09/22/2009 20:36:58 PAGE 7   

   CONSTANT SIZE    =    472    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -