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

📄 menu.lst

📁 通过调节一个可变电阻得到变化的电压来模拟一个湿度度传感器
💻 LST
字号:
C51 COMPILER V8.05a   MENU                                                                 10/28/2008 10:30:04 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN menu.OBJ
COMPILER INVOKED BY: F:\Keil C51 V8\C51\BIN\C51.EXE menu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "commons.h"
   2          
   3          //以下定义菜单相关的参数
   4          #define MENU_NUM        5
   5          #define MENU_MAX        9999
   6          #define MENU_MIN        0
   7          #define E2PROM_FLAG_ADDR 0x10
   8          #define E2PROM_ADDR 0x12
   9          #define FLAG 1234
  10          
  11          char _menu_name[] = {'a','b','c','d','e'};
  12          unsigned char _delta[] = {55, 75, 10, 1, 5};
  13          int _menu_value[]      = {0,  0,  0,  0, 0};
  14          int _default_value[]   = {3500,500,1000,0, 80};
  15          
  16          unsigned char _menu_idx = 0;
  17          unsigned char _menu_status = MENU_OFF;
  18          char _menu_str[] = "      ";
  19          
  20          void menu_init(void) {
  21   1              unsigned int flag = 0;
  22   1              read_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
  23   1              if (flag != FLAG) {
  24   2                      flag = FLAG;
  25   2                      write_e2prom(E2PROM_FLAG_ADDR, (unsigned char)&flag, 2);
  26   2                      write_e2prom(E2PROM_ADDR, (unsigned char)&_default_value[0], sizeof(_default_value)); 
  27   2              }
  28   1              read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
  29   1      }
  30          
  31          void menu_routine(void) {
  32   1              char i = 0;
  33   1              char key = get_key();
  34   1      
  35   1              if (_menu_status == MENU_OFF) {
  36   2                      if (key == 0) {
  37   3                              _menu_status = MENU_ON;
  38   3                              _menu_idx = 0;
  39   3                              _key_led = 0x10;
  40   3                              //将e2prom里的5个参数读入_menu_value数组
  41   3                              read_e2prom(E2PROM_ADDR, (unsigned char)&_menu_value[0], sizeof(_menu_value));
  42   3                      }
  43   2              } else {
  44   2                      if (key == 0) { //不保存键值,切换到下一个参数
  45   3                              _key_led = 0x10;
  46   3                              if (++_menu_idx == MENU_NUM) {
  47   4                                      _key_led = 0;
  48   4                                      _menu_status = MENU_OFF;
  49   4                              }
  50   3                      } else if (key == 1) { //保存键值,切换到下一个参数
  51   3                              _key_led = 0x20;
  52   3                              write_e2prom(E2PROM_ADDR + _menu_idx * 2, (unsigned char)&_menu_value[_menu_idx], 2);
  53   3                              if (++_menu_idx == MENU_NUM) {
  54   4                                      _key_led = 0;
  55   4                                      _menu_status = MENU_OFF;
C51 COMPILER V8.05a   MENU                                                                 10/28/2008 10:30:04 PAGE 2   

  56   4                              }
  57   3                      } else if (key == 2) { //参数值加1
  58   3                              _key_led = 0x40;                                
  59   3                              //if (++_menu_value[_menu_idx] > MENU_MAX) {
  60   3                              _menu_value[_menu_idx] += _delta[_menu_idx];
  61   3                              if (_menu_value[_menu_idx] > MENU_MAX) {
  62   4                                      _menu_value[_menu_idx] = MENU_MAX;
  63   4                              }
  64   3                      } else if (key == 3) { //参数值减1
  65   3                              _key_led = 0x80;
  66   3                              //if (--_menu_value[_menu_idx] < MENU_MIN) {
  67   3                              _menu_value[_menu_idx] -= _delta[_menu_idx];
  68   3                              if (_menu_value[_menu_idx] < MENU_MIN) {
  69   4                                      _menu_value[_menu_idx] = MENU_MIN;
  70   4                              }
  71   3                      }
  72   2              }
  73   1      
  74   1              if (_menu_status == MENU_ON) {
  75   2                      //菜单状态为开时,显示参数值
  76   2                      _menu_str[0] = _menu_name[_menu_idx];//参数名称
  77   2                      to_string(&_menu_str[2], 4, _menu_value[_menu_idx]);//从LED的第3位起显示参数值
  78   2                      print(_menu_str);
  79   2              }
  80   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    349    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     39       4
   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 + -