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

📄 main.lst

📁 LCD多级菜单显示程序!320*240的LCD显示器!全部调试通过的!
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.08   MAIN                                                                  10/31/2007 10:13:27 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE 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          unsigned char code second_menu_1[][16]=                 //二级子菜单
  29          {
  30                  "1.1二级菜单1  ",
  31                  "1.Ⅱ二级菜单2  ",
  32                  "1.Ⅰ二级菜单3  ",
  33                  " 1、二级菜单4  ",
  34                  "1.5二级菜单5  ",
  35                  " 1.6二级菜单6  ",
  36                  " 1.7二级菜单7  ",
  37                  " 1.8二级菜单8  "
  38          };
  39          unsigned char code second_menu_2[][16]=                 //二级子菜单
  40          {
  41                  "2.1 二级菜单1 ",
  42                  "2.2 二级菜单2 ",
  43                  "2.3 二级菜单3 ",
  44                  "2.4 二级菜单4 ",
  45                  "2.5 二级菜单5 ",
  46                  "2.6二级菜单6 ",
  47                  "2.7二级菜单7 ",
  48                  "2.8二级菜单8 "
  49          };
  50          unsigned char code second_menu_3[][16]=                 //二级子菜单
  51          {
  52                  "3.1二级子菜单1",
  53                  "3.2二级子菜单2",
  54                  "3.3二级子菜单3",
  55                  "3.4二级子菜单4",
C51 COMPILER V7.08   MAIN                                                                  10/31/2007 10:13:27 PAGE 2   

  56                  "3.5二级子菜单5",
  57                  "3.6二级子菜单6",
  58                  "3.7二级子菜单7",
  59                  "3.8二级子菜单8"
  60          };
  61          unsigned char code second_menu_4[][16]=                 //二级子菜单
  62          {
  63                  "4.1二级子菜单1",
  64                  "4.2二级子菜单2",
  65                  "4.3二级子菜单3",
  66                  "4.4二级子菜单4",
  67                  "4.5二级子菜单5",
  68                  "4.6二级子菜单6",
  69                  "4.7二级子菜单7",
  70                  "4.8二级子菜单8"
  71          };
  72          unsigned char code second_menu_5[][16]=                 //二级子菜单
  73          {
  74                  "5.1二级子菜单1",
  75                  "5.2二级子菜单2",
  76                  "5.3二级子菜单3",
  77                  "5.4二级子菜单4",
  78                  "5.5二级子菜单5"
  79          };
  80          unsigned char code second_menu_6[][16]=                 //二级子菜单
  81          {
  82                  "              ",
  83                  "    实验程序  ",
  84                  "  菜单程序调试 ",
  85                  "                               "
  86          };
  87          //*********************************************************
  88          //时子程序
  89          //********************************************************                                                              
  90          void Delay1(time)
  91          unsigned int time;
  92          {
  93   1              while(time--);
  94   1      }
  95          //***********************************************
  96          //键盘识别子程序
  97          //***********************************************
  98          unsigned char GetKey(time)
  99          unsigned char time;
 100          {       
 101   1              unsigned char xdata sec1,sec2,keyvalue;
 102   1              sec2=SECOND;
 103   1              if(sec1!=sec2)
 104   1              {       
 105   2                      sec1=sec2;
 106   2                      ESCTicker++;
 107   2                      if(ESCTicker>10)                                //无按键操作60秒后,关闭背光
 108   2                      {
 109   3                              ESCTicker = 0;
 110   3                              LEDState = LEDState&0x7f;
 111   3                      }
 112   2              }
 113   1      
 114   1              LED=LEDState;
 115   1      
 116   1              if((F_back == 0xaa)&&(LEDState<0x80))
 117   1              {       //F_back需不需要返回主屏的标志
C51 COMPILER V7.08   MAIN                                                                  10/31/2007 10:13:27 PAGE 3   

 118   2                      return(ESC);                            //60秒内无按键,且不在主屏幕,则返回主屏.
 119   2              }
 120   1              watchdog();
 121   1      
 122   1              keyvalue = KEY_ADDR;                    //判键 #define KEY_ADDR XBYTE[0X4000] 读取按键值
 123   1              if(keyvalue!=0xff)
 124   1              {       
 125   2                      if(Ticker > time)               //time按键以后的延时时间
 126   2                      {
 127   3                              LEDState=LEDState|0x80; //有按键点亮背光
 128   3                              Ticker = 0;                             //按键延时计数器清零
 129   3                              ESCTicker=0;                    //背光关闭计时器清零,返回上一级菜单
 130   3                              return(keyvalue);
 131   3                      }
 132   2                      else
 133   2                      {
 134   3                              keyvalue = 0xff;
 135   3                              return(keyvalue);
 136   3                      }
 137   2              }
 138   1              else
 139   1              {
 140   2                      Ticker = 0;
 141   2                      return(0xff);
 142   2               }
 143   1        }
 144          //*********************************************************
 145          //一级菜单显示
 146          //*********************************************************
 147          void d_first(void)      //一级菜单显示
 148          {       unsigned char key_value;
 149   1              ArrayLine=0;
 150   1              ScrLine=0;
 151   1              while(1)
 152   1              {       
 153   2                      ReverseLine(ScrLine);
 154   2                      PrintStr(0,0,P_first[ArrayLine]);
 155   2                      PrintStr(1,0,P_first[ArrayLine+1]);
 156   2                      PrintStr(2,0,P_first[ArrayLine+2]);
 157   2                      PrintStr(3,0,P_first[ArrayLine+3]);
 158   2                      while(1)
 159   2                      {       
 160   3                              key_value=GetKey(12);
 161   3                              if(key_value!=0xff)             //判断按键是否有键按下 
 162   3                              break;
 163   3                      }
 164   2                      watchdog();
 165   2                      switch(key_value)
 166   2                      {       
 167   3                                      /* 当按向上键和加号键时向上移动*/
 168   3                              case UP:
 169   3                              case PLUS:
 170   3                                  if (ArrayLine==0)                           //当数组指针在第一行时,只有此时才考虑到最后一行
 171   3                                  {//ArrayLine 显示屏变量
 172   4                                      if (ScrLine<=0)                         //如果屏幕指针在第一行则到最后一行
 173   4                                              {   
 174   5                                                      ScrLine = 3;                    //ScrLine 反白显示行变量
 175   5                                                      ArrayLine = ARRAYLINE;  //#define ARRAYLINE 2 一级菜单长度减4
 176   5                                              }
 177   4                                              else                                            //如果屏幕指针没有在最后一行则向上移动
 178   4                                                      ScrLine--; 
 179   4                                      }
C51 COMPILER V7.08   MAIN                                                                  10/31/2007 10:13:27 PAGE 4   

 180   3                                      else                                                    //如果数组指针不在第一行
 181   3                                      {
 182   4                                              if (ScrLine<=0)                         //如果屏幕指针在第一行,则要向上滚屏

⌨️ 快捷键说明

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