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

📄 menu.lst

📁 LCD多级菜单显示程序!320*240的LCD显示器!全部调试通过的!
💻 LST
字号:
C51 COMPILER V7.08   MENU                                                                  10/30/2007 10:36:26 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN menu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE menu.c DEBUG OBJECTEXTEND

line level    source

   1          #include <stdio.h>              /* standard I/O .h-file */
   2          #include <reg51f.h>
   3          #include <absacc.h>
   4          #include <main.h>
   5          #include <time.h>
   6          #include "lcd.h"
   7          #include "x5045.h"
   8          
   9          unsigned char xdata     LEDState,   //LED灯、液晶背光状态变量
  10                                                  ArrayLine,      //显示屏变量
  11                                                  ScrLine,        //反白显示行变量
  12                                                  JD_ticker,      //接地计时变量(10毫秒)
  13                                                  Ticker,         //按键等用的计时变量;
  14                                                  ESCTicker,  //背光计数器清零
  15                                                  F_back;         //需不需要返回上一级的标志,
  16                                                                      //0xAA----需要返回
  17                                                                      //0x55----不需要返回
  18          
  19          unsigned char code P_first[][16]=                               //一级菜单
  20          {
  21                  " 1、一级菜单1  ",
  22                  " 2、一级菜单2  ",
  23                  " 3、一级菜单3  ",
  24                  " 4、一级菜单4  ",
  25                  " 5、一级菜单5  ",
  26                  " 6、一级菜单6  "
  27          };
  28          //*********************************************************
  29          //时子程序
  30          //********************************************************                                                              
  31          void Delay1(time)
  32          unsigned int time;
  33          {
  34   1              while(time--);
  35   1      }
  36          //***********************************************
  37          //键盘识别子程序
  38          //***********************************************
  39          unsigned char GetKey(time)
  40          unsigned char time;
  41          {       
  42   1              unsigned char xdata keyvalue;
  43   1              keyvalue = KEY_ADDR;                    //判键 #define KEY_ADDR XBYTE[0X4000] 读取按键值
  44   1              if(keyvalue!=0xff)
  45   1              {       
  46   2                      if(Ticker > time)        //time按键以后的延时时间
  47   2                      {
  48   3                              LEDState=LEDState|0x80; //有按键点亮背光
  49   3                              LED=LEDState;
  50   3                              Ticker = 0;                             //按键延时计数器清零
  51   3                              ESCTicker=0;            //背光关闭计时器清零
  52   3                              return(keyvalue);
  53   3                      }
  54   2                      else
  55   2                      {
C51 COMPILER V7.08   MENU                                                                  10/30/2007 10:36:26 PAGE 2   

  56   3                              keyvalue = 0xff;
  57   3                              return(keyvalue);
  58   3                      }
  59   2              }
  60   1              else
  61   1              {
  62   2                      Ticker = 0;
  63   2                      return(0xff);
  64   2               }
  65   1        }
  66          //*********************************************************
  67          //一级菜单显示
  68          //*********************************************************
  69          void d_first(void)      //一级菜单显示
  70          {       unsigned char key_value;
  71   1              ArrayLine=0;
  72   1              ScrLine=0;
  73   1              while(1)
  74   1              {       
  75   2                      ReverseLine(ScrLine);
  76   2                      PrintStr(0,0,P_first[ArrayLine]);
  77   2                      PrintStr(1,0,P_first[ArrayLine+1]);
  78   2                      PrintStr(2,0,P_first[ArrayLine+2]);
  79   2                      PrintStr(3,0,P_first[ArrayLine+3]);
  80   2                      while(1)
  81   2                      {       
  82   3                              key_value=GetKey(12);
  83   3                              if(key_value!=0xff)             //按键松开之后
  84   3                              break;
  85   3                      }
  86   2                      switch(key_value)
  87   2                      {       
  88   3                                      /* 当按向上键和加号键时向上移动*/
  89   3                              case UP:
  90   3                              case PLUS:
  91   3                                  if (ArrayLine==0)                           //当数组指针在第一行时,只有此时才考虑到最后一行
  92   3                                  {//ArrayLine 显示屏变量
  93   4                                      if (ScrLine<=0)                         //如果屏幕指针在第一行则到最后一行
  94   4                                              {   
  95   5                                                      ScrLine = 3;                    //ScrLine 反白显示行变量
  96   5                                                      ArrayLine = ARRAYLINE;  //#define ARRAYLINE 2 一级菜单长度减4
  97   5                                              }
  98   4                                              else                                            //如果屏幕指针没有在最后一行则向上移动
  99   4                                                      ScrLine--; 
 100   4                                      }
 101   3                                      else                                                    //如果数组指针不在第一行
 102   3                                      {
 103   4                                              if (ScrLine<=0)                         //如果屏幕指针在第一行,则要向上滚屏
 104   4                                                      ArrayLine--;
 105   4                                              else
 106   4                                                      ScrLine--;                              //如果屏幕指针不在第一行,则向上移动
 107   4                                      }
 108   3                                      break;
 109   3                              case DOWN:                                                      //向下的逻辑与向上的逻辑相反
 110   3                              case SUB:
 111   3                                  if (ArrayLine>=ARRAYLINE)           //#define ARRAYLINE 2
 112   3                                  {
 113   4                                      if (ScrLine>=3)
 114   4                                              {
 115   5                                                      ScrLine = 0;
 116   5                                                      ArrayLine = 0;
 117   5                                              }
C51 COMPILER V7.08   MENU                                                                  10/30/2007 10:36:26 PAGE 3   

 118   4                                              else
 119   4                                                      ScrLine++;
 120   4                                      }
 121   3                                      else
 122   3                                      {
 123   4                                              if (ScrLine>=3)
 124   4                                                      ArrayLine++;
 125   4                                              else
 126   4                                                      ScrLine++;
 127   4                                      }
 128   3                                      break;
 129   3                              case ENTER:
 130   3                                      d_second(ArrayLine+ScrLine);            //进入菜单项对应的二级菜单
 131   3                                      break;
 132   3                              case ESC:
 133   3                                      InitLcd();
 134   3                                      return;
 135   3                              }
 136   2                              }               
 137   1              }
 138          
 139          //************************************************************
 140          //二级菜单
 141          //************************************************************
 142          void d_second(second_num)
 143          unsigned char second_num;
 144          {       
 145   1              switch(second_num)
 146   1              {       case 0:         
 147   2                              //d_realdata();                                         
 148   2                              break;
 149   2                      case 1:
 150   2                              //d_save();                     
 151   2                              break;  
 152   2                      case 2:
 153   2                              //d_sysset();                   
 154   2                              break;
 155   2                      case 3:
 156   2                              //d_sprint();                   
 157   2                              break;
 158   2                      case 4:
 159   2                              //d_sysdebug();         
 160   2                              break;
 161   2                      case 5:
 162   2                              //d_revsion();          
 163   2                              break;
 164   2              }
 165   1      }
 166          
 167          //*****************************************************************
 168          //主屏显示
 169          //*****************************************************************
 170          void welcome(void)
 171          {       unsigned char xdata key_value,secb,seca,temp[9];//;,bb
 172   1              struct DATE d_date;     
 173   1              struct TIME t_time;
 174   1              while(1)
 175   1               {
 176   2                      F_back = 0x55;                          //在主屏,不需要返回. F_baCK=0X55标识需要返回标志
 177   2                      key_value=GetKey(12);
 178   2                      LED=LED&0xf3;
 179   2                      if(key_value==ENTER)            //按确认键进入主菜单
C51 COMPILER V7.08   MENU                                                                  10/30/2007 10:36:26 PAGE 4   

 180   2                      {       
 181   3                              F_back = 0xaa;                  //标识需要返回标志
 182   3                              LED=LED&0xfc;
 183   3                              d_first();                              
 184   3                      }
 185   2                      secb=SECOND;                            //每秒刷新一次时间
 186   2                      watchdog();
 187   2                      if(seca!=secb)
 188   2                      {
 189   3                              seca=secb;      
 190   3                              GetTime(&t_time);
 191   3                              GetDate(&d_date);
 192   3                              if((d_date.year>99)||(d_date.mon>12)||(d_date.day>31)||(t_time.hour>23)||(t_time.min>59)||(t_time.sec>5
             -9))
 193   3                              {
 194   4                                      //repair_time();
 195   4                                      InitLcd();
 196   4                                      PrintStr(1,2,"时钟出错");       //时钟出错后把年月日时分秒设为默认值后进入时钟设置界面
 197   4                                      Delay1(5000);
 198   4                                      InitLcd();
 199   4                              }
 200   3                              PrintStr(1,0,"  菜单程序调试  ");
 201   3                              PrintStr(2,6,"    ");
 202   3                              PrintStr(2,0,"    ");
 203   3                              PrintStr(0,0,"    实验程序    ");
 204   3                              PrintStr(3,6,"    ");
 205   3                              PrintStr(3,0,"    ");
 206   3      
 207   3                              temp[0] = d_date.year/10 + 0x30;
 208   3                              temp[1] = d_date.year%10 + 0x30;
 209   3                              temp[2] = '-';
 210   3                              temp[3] = d_date.mon/10 + 0x30;
 211   3                              temp[4] = d_date.mon%10 + 0x30;
 212   3                              temp[5] = '-';
 213   3                              temp[6] = d_date.day/10 + 0x30;
 214   3                              temp[7] = d_date.day%10 + 0x30;
 215   3                              temp[8] = 0;
 216   3                              PrintStr(2,2,temp);
 217   3      
 218   3                              temp[0] = t_time.hour/10 + 0x30;
 219   3                              temp[1] = t_time.hour%10 + 0x30;
 220   3                              temp[2] = ':';
 221   3                              temp[3] = t_time.min/10 + 0x30;
 222   3                              temp[4] = t_time.min%10 + 0x30;
 223   3                              temp[5] = ':';
 224   3                              temp[6] = t_time.sec/10 + 0x30;
 225   3                              temp[7] = t_time.sec%10 + 0x30;
 226   3                              temp[8] = 0;
 227   3                              PrintStr(3,2,temp);
 228   3                              }
 229   2                      }
 230   1              }
 231          void main()
 232          {
 233   1              welcome();
 234   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    758    ----
   CONSTANT SIZE    =    144    ----
   XDATA SIZE       =      7      13
C51 COMPILER V7.08   MENU                                                                  10/30/2007 10:36:26 PAGE 5   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   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 + -