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

📄 menu.lst

📁 proteus电子钟(带闹钟数码管显示)
💻 LST
字号:
C51 COMPILER V7.06   MENU                                                                  05/31/2009 01:55:42 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN Menu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE software\Menu.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Menu.lst) OBJECT(Menu.obj
                    -)

stmt level    source

   1          #include "main.h"
   2          #include "port.h"
   3          #include "DisplayDir.h"
   4          #include "SysTick.h"
   5          
   6          #include "key.h"
   7          #include "Menu.h"
   8          #include "RTC.h"
   9          
  10          
  11          #define MAX_MENU_ITEM   1
  12          void (code *FuncPtr)(void);
  13          typedef struct {
  14                  uint8_t Current_Index;
  15                  uint8_t Set_Index;
  16                  uint8_t Enter_Index;
  17                  uint8_t Right_Index;
  18                  uint8_t Up_Index;       
  19                  void (code *Current_Operation)(void);
  20          }Key_Table;
  21          
  22          static uint8_t Index = 0;
  23          static UserChoose = 0;          //用户所选菜单项
  24          
  25          // 时间变量
  26          static uint8_t hour_temp, minute_temp;
  27          
  28          // 函数列表
  29          static void NopFunc(void);
  30          static void MainMenuItem(void);
  31          static void Exit_MainMenuItem(void);
  32          
  33          static void AdjHourSelect(void);
  34          static void AdjMinuteSelect(void);
  35          
  36          static void AdjTime_Hour(void);
  37          static void AdjTime_Minute(void);
  38          
  39          static void SetTime_Enter(void);
  40          
  41          
  42          Key_Table code table[] = {
  43                  
  44          //   |----------------- Current_Index
  45          //       |      |-------------- Set_Index       
  46          //       |      |  |----------- Enter_Index
  47          //       |      |  |    |------ Right_Index
  48          //       |  |  |    |    |- Up_Index
  49          //       |  |  |    |    |
  50                  {0,     1, 0,   0,   0,   (*NopFunc)},                  // 主菜单
  51                  {1,     4, 5,   255, 255, (*MainMenuItem)},             // SEL.0, 调时  
  52                  {2,     4, 255, 255, 255, (*MainMenuItem)},             // SEL.1, 设闹铃
  53                  {3,     4, 255, 255, 255, (*MainMenuItem)},             // SEL.2, 删除闹铃
  54                  {4,     4, 255, 255, 255, (*Exit_MainMenuItem)},// 退出菜单
C51 COMPILER V7.06   MENU                                                                  05/31/2009 01:55:42 PAGE 2   

  55                  
  56                  // SEL.0, 调时
  57                  {5,     1, 9,   6,   7,   (*AdjHourSelect)},    // 调时选择
  58                  {6,     1, 9,   5,   8,   (*AdjMinuteSelect)},  // 调分选择
  59                  {7,     1, 9,   6,   7,   (*AdjTime_Hour)},             // 调时
  60                  {8,     1, 9,   5,   8,   (*AdjTime_Minute)},   // 调分
  61                  {9,     0, 0,   0,   0,   (*SetTime_Enter)},    // ok
  62                  // SEL.1, 设闹铃
  63          
  64          };
  65          
  66          void Menu_Change(uint8_t KeyNum)
  67          {
  68   1              uint8_t Index_Backup;
  69   1              Index_Backup = Index;   // Index备份
  70   1              switch(KeyNum) 
  71   1              {                   
  72   2                      case K_Set:     Index = table[Index].Set_Index;                 break; 
  73   2                      case K_Right:   Index = table[Index].Right_Index;               break; 
  74   2                      case K_Up:              Index = table[Index].Up_Index;                  break; 
  75   2                      case K_Enter:   Index = table[Index].Enter_Index;               break; 
  76   2                      default:                /* --------------------------- */               break;
  77   2              }
  78   1      
  79   1              if (255 == Index)
  80   1              {
  81   2                      Index = Index_Backup;   // 无效键       
  82   2              }
  83   1              else
  84   1              {
  85   2                      FuncPtr = table[Index].Current_Operation;
  86   2                      (*FuncPtr)();           
  87   2              }       
  88   1      }
  89                  
  90          void NopFunc(void)
  91          {
  92   1              // 空函数,作用不小啊!!
  93   1      }
  94          
  95          // 主菜单item
  96          void MainMenuItem(void)
  97          {
  98   1              LedChangeFlag = 0x00;
  99   1              LedChangeFlag |= (1 << DOT3) | (1 << BIT4);     
 100   1              bUpdateDisplayEn = 0;
 101   1      
 102   1              hour_temp =  Rtc.hour;          // 读时间
 103   1              minute_temp = Rtc.min;
 104   1      
 105   1              if (UserChoose >= MAX_MENU_ITEM)
 106   1              {
 107   2                      UserChoose = 0;
 108   2              }
 109   1      
 110   1              DisplayBuffer[0] = _S;
 111   1              DisplayBuffer[1] = _E; 
 112   1              DisplayBuffer[2] = _L; 
 113   1              DisplayBuffer[3] = UserChoose++;  
 114   1      }
 115          // 不保存退也菜单
 116          void Exit_MainMenuItem(void)
C51 COMPILER V7.06   MENU                                                                  05/31/2009 01:55:42 PAGE 3   

 117          {
 118   1              LedChangeFlag = 0x00;           
 119   1              LedChangeFlag |= (1 << DOT2);   // 只有时钟的时个位点可以闪烁
 120   1              bUpdateDisplayEn = 1;
 121   1              
 122   1              Index = 0;
 123   1              UserChoose = 0;
 124   1      }
 125          
 126          // 调时位选择                                                                                                                                    
 127          void AdjHourSelect(void)
 128          {
 129   1              LedChangeFlag = 0x00;
 130   1              bUpdateDisplayEn = 0;
 131   1      
 132   1              LedChangeFlag |= (1 << BIT1) | (1 << BIT2);             // 调时选择
 133   1              UpdateDisplayBuffer(hour_temp, minute_temp);                    
 134   1      }
 135          
 136          // 调分位选择
 137          void AdjMinuteSelect(void)
 138          {
 139   1              LedChangeFlag = 0x00;
 140   1              bUpdateDisplayEn = 0;
 141   1              
 142   1              LedChangeFlag |= (1 << BIT3) | (1 << BIT4);             // 调分选择     
 143   1              UpdateDisplayBuffer(hour_temp, minute_temp); 
 144   1      }
 145          
 146          // 调时
 147          void AdjTime_Hour(void)
 148          {
 149   1              bUpdateDisplayEn = 0;
 150   1      
 151   1              hour_temp++;
 152   1              if (hour_temp >= 24)
 153   1                      hour_temp = 0;
 154   1              DisplayBuffer[0] = hour_temp / 10;
 155   1              DisplayBuffer[1] = hour_temp % 10; 
 156   1      }
 157          
 158          // 调分
 159          void AdjTime_Minute(void)
 160          {
 161   1              bUpdateDisplayEn = 0;
 162   1      
 163   1              minute_temp++;
 164   1              if (minute_temp >= 60)
 165   1                      minute_temp = 0;
 166   1      
 167   1              DisplayBuffer[2] = minute_temp / 10;
 168   1              DisplayBuffer[3] = minute_temp % 10; 
 169   1      }
 170          
 171          // 调时OK
 172          void SetTime_Enter(void)
 173          {
 174   1              Rtc.hour = hour_temp;           // 时间
 175   1              Rtc.min = minute_temp;
 176   1              Rtc.sec = 0;
 177   1              ClockReviseTemp = 0;            // 复位校正计时器
 178   1              ClockReviseTemp1 = 0;
C51 COMPILER V7.06   MENU                                                                  05/31/2009 01:55:42 PAGE 4   

 179   1              Exit_MainMenuItem();
 180   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    300    ----
   CONSTANT SIZE    =     70    ----
   XDATA SIZE       =   ----    ----
   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 + -