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

📄 key.lst

📁 我的一个工程
💻 LST
字号:
C51 COMPILER V7.06   KEY                                                                   07/21/2008 12:45:44 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN E:\温度表\KEY.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE E:\温度表\KEY.C DB SB OE

stmt level    source

   1          #include <reg52.h>
   2          #include "key.h"
   3          
   4          #define KEY_SET   0x0e//设置键
   5          #define KEY_UP    0x0b//向上键
   6          #define KEY_DOEN  0x0d//向下键
   7          #define KEY_RUN  0x07//运行键
   8          #define EAKER    0x09//上下键同时按下
   9          #define KEY_P1  P1
  10          
  11          
  12          extern void AT24C02_Write_Byte(unsigned char Device,unsigned char Addr, unsigned char Data);
  13          /***************************************************************************************************
  14          函数名称:Read_Temperature()
  15          函数入口:空
  16          函数出口:返回拨码开关的值
  17          功能描述:读取拨码开关并返回设定值
  18          
  19          ****************************************************************************************************/
  20          sbit gh=P3^4;
  21          sbit low=P3^3;
  22          unsigned int Read_Temperature(void)
  23          {
  24   1      unsigned int vioud,tmp[4];
  25   1      unsigned char m,n;
  26   1              gh=0;
  27   1              P0=0xff;
  28   1              m=P0;
  29   1              m=~m;
  30   1              n=(m&0x0f);
  31   1              m=m>>=4;
  32   1              tmp[0]=n*1000;
  33   1              tmp[1]=m*100;
  34   1              gh=1;
  35   1              low=0;
  36   1              P0=0xff;
  37   1              m=P0;
  38   1              m=~m;
  39   1              n=(m&0x0f);
  40   1              m=m>>=4;
  41   1              tmp[2]=n*10;
  42   1              tmp[3]=m;
  43   1              low=1;
  44   1              vioud=tmp[0];
  45   1              vioud+=tmp[1];
  46   1              vioud+=tmp[2];
  47   1              vioud+=tmp[3];
  48   1              return vioud;
  49   1      }
  50          /***************************************************************************************************
  51          函数名称:KEY_JIEXI(unsigned int Variable)
  52          函数入口:
  53                            unsigned int Variable :采集到的键盘值,就是P2、P3口的数值。
  54          函数出口:
  55          功能描述:键盘解析,通过采样的数值分析出当前按下的是那个键。(包括复合键)并针对键进行相应的操作
C51 COMPILER V7.06   KEY                                                                   07/21/2008 12:45:44 PAGE 2   

  56          关键点描述:无
  57          ****************************************************************************************************/
  58          KEY_JIEXI(unsigned int Variable)
  59          {        
  60   1              switch(Variable)
  61   1              {
  62   2                      //单键。。。。
  63   2                      case KEY_RUN:   //0x0e运行键
  64   2                   set=0;
  65   2                  
  66   2                 
  67   2                      break;
  68   2                      case KEY_DOEN:  //0x0d向下键
  69   2                              if(set)
  70   2                                      set--;
  71   2                        else
  72   2                                       set=5;
  73   2                break;
  74   2                      case KEY_UP:    //0x0b向上键
  75   2                      if(set<5)
  76   2                                set++;
  77   2                      else
  78   2                                      set=0;
  79   2                break;
  80   2                case KEY_SET:   //0x07设置键
  81   2                      switch(set)
  82   2                        {
  83   3                              case 1:
  84   3      
  85   3                              upper_limit.X=Read_Temperature();
  86   3                              AT24C02_Write_Byte(0xA0, 0x01, upper_limit.c[0]);
  87   3                              AT24C02_Write_Byte(0xA0, 0x02, upper_limit.c[1]);
  88   3                              break;
  89   3                              case 2:
  90   3                              lower_limit.X=Read_Temperature();
  91   3                              AT24C02_Write_Byte(0xA0, 0x03, lower_limit.c[0]);
  92   3                              AT24C02_Write_Byte(0xA0, 0x04, lower_limit.c[1]);
  93   3                              break;
  94   3                              case 3:
  95   3                              difference.X=Read_Temperature();
  96   3                              AT24C02_Write_Byte(0xA0, 0x05, difference.c[0]);
  97   3                              AT24C02_Write_Byte(0xA0, 0x06, difference.c[1]);
  98   3                              break;
  99   3                              case 4:
 100   3                                      set=0;
 101   3                              break;
 102   3                              case 5:
 103   3                                      set=0;
 104   3                              break;
 105   3                              default:
 106   3                          break;
 107   3                              }
 108   2                break;
 109   2                      case EAKER:   //上下键同时按下进行采集通道选择
 110   2                      
 111   2      
 112   2                break;//复合键。。。。
 113   2      
 114   2                      //未定义键
 115   2                      default:
 116   2                      break;
 117   2              }
C51 COMPILER V7.06   KEY                                                                   07/21/2008 12:45:44 PAGE 3   

 118   1              
 119   1      }
 120          /***************************************************************************************************/
 121          /***************************************************************************************************
 122          函数名称:KEY()
 123          函数入口:空
 124          函数出口:空
 125          功能描述:键盘消抖
 126          设计思想:
 127                                  建立一个键盘值保存缓冲区KEY_Variable[3],能够连续保存最近的三次采样到的键盘值。当最后两次采
 128                          样到的值相等并且和倒数第三次的值不相等时,说明有按键按下。进行确认。当三次的采样值都相等时,说
 129                          明此按键已经确认过了,不进行确认。
 130          ****************************************************************************************************/
 131          KEY()
 132          {
 133   1      unsigned char key_buf;
 134   1              KEY_Variable[2]=KEY_Variable[1];
 135   1              KEY_Variable[1]=KEY_Variable[0];
 136   1              EA = 0;
 137   1      
 138   1              key_buf=KEY_P1;
 139   1       KEY_Variable[0] =(key_buf&0xc0);
 140   1              KEY_Variable[0] >>=4;
 141   1       KEY_Variable[0]|=(key_buf&0x03);
 142   1      
 143   1      
 144   1              if(KEY_Variable[0] == KEY_Variable[1])
 145   1              {
 146   2                      if(KEY_Variable[1] == KEY_Variable[2])
 147   2                      {
 148   3                              SPEAKER=0;
 149   3                              return;
 150   3                      }
 151   2                      else
 152   2                      {
 153   3                               SPEAKER=1;
 154   3                              KEY_JIEXI(KEY_Variable[0]);   //分析按下的是什么键,并做相应的处理。
 155   3                      }
 156   2              }
 157   1              return;
 158   1      }
 159          
 160          
 161          
C51 COMPILER V7.06   KEY                                                                   07/21/2008 12:45:44 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
EA . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00AFH  1
p_temp . . . . . . . . . . . . . . . .  * TAG *  -----  UNION    -----  2
  c. . . . . . . . . . . . . . . . . .  MEMBER   -----  ARRAY    0000H  2
  X. . . . . . . . . . . . . . . . . .  MEMBER   -----  U_INT    0000H  2
SPEAKER. . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B5H  1
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
difference . . . . . . . . . . . . . .  PUBLIC   DATA   UNION    0000H  2
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
_KEY_JIEXI . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  Variable . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
lower_limit. . . . . . . . . . . . . .  PUBLIC   DATA   UNION    0002H  2
upper_limit. . . . . . . . . . . . . .  PUBLIC   DATA   UNION    0004H  2
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
ADC. . . . . . . . . . . . . . . . . .  PUBLIC   DATA   BIT      0000H  1
set. . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0006H  1
gh . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B4H  1
low. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
_AT24C02_Write_Byte. . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
KEY. . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  key_buf. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
Read_Temperature . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  vioud. . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
  tmp. . . . . . . . . . . . . . . . .  AUTO     DATA   ARRAY    0000H  8
  m. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  n. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
KEY_Variable . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0007H  3
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    314    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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