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

📄 key.lst

📁 单片机开发列程
💻 LST
字号:
C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Key.c LARGE BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS

line level    source

   1          #define __KEY_H__
   2          #include "Config.h"
   3          
   4          #define KEYPORT P6                  //定义端口
   5          #define KEYPORTPINCFG P6PINCFG      //定义端口
   6          #define KEYMASK 0x0F                //按键的屏蔽码,屏蔽掉高位的LED,定义成宏方便使用.
   7          /********************************************************************************************************
   8          **函数名称:KeyDelay
   9          **函数功能:用于按键的延时去抖
  10          **输    入:uchar DelayLoops   延时循环次数,控制延时时间
  11          **输    出:无
  12          ********************************************************************************************************/
  13          void KeyDelay(uchar DelayLoops)
  14          {
  15   1          uint i;
  16   1          for(; DelayLoops > 0; DelayLoops --)
  17   1          {
  18   2              for(i = 5000; i > 0; i --)
  19   2              {;}
  20   2          }  
  21   1      }
  22          
  23          /****************************************************************************************************
  24          **函数名称:KeyRead
  25          **函数功能:读按键程序
  26          **输    入:无
  27          **输    出:返回读到的键值
  28          **全局变量:uchar code KeyDecode[4]->用于按键解码
  29          **          GlKeyFlag  保存上次的键值
  30          ****************************************************************************************************/
  31          uchar code KeyDecode[4] = {0x0E,0x0D,0x0B,0x07};            //按下不同键对应的代码
  32          uchar GlKeyFlag = KEYMASK;                                  //纪录上一次按键的全局变量
  33          
  34          uchar KeyRead(void)
  35          {
  36   1          uchar KeyBuf,KeyBuf1,i;
  37   1          
  38   1          PORTINEN |= (BIT0 | BIT1 | BIT2 | BIT3);                //使能按键输入
  39   1          //KEYPORTPINCFG |= 0x0F;                                //设置低四位为输入    
  40   1          //------------------------------------------------------------------------------
  41   1          //判定本次有无按键按下
  42   1          //------------------------------------------------------------------------------
  43   1          KeyBuf  = KEYPORT;
  44   1          KeyBuf &= KEYMASK;                                      //屏蔽无关位
  45   1          if(KeyBuf1 != KEYMASK)                                  //有键按下
  46   1          {
  47   2              KeyDelay(1);                                        //延时去抖
  48   2      
  49   2              KeyBuf1  = KEYPORT;
  50   2              KeyBuf1 &= KEYMASK;                                 //再读
  51   2              if((KeyBuf1 != KEYMASK) && (KeyBuf1 == KeyBuf))     
  52   2                                          //延时后还是有按键中断且与第一次的相同说明有键按下
  53   2              {;}                         //有键按下,则键值被保存,随后再判断
  54   2              else
  55   2              {
C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 2   

  56   3                  KeyBuf  = KEYMASK;     
  57   3                  KeyBuf1 = KEYMASK;      //无键按下,将所有标志清零
  58   3              }
  59   2          }
  60   1          //------------------------------------------------------------------------------
  61   1          //根据本次读到的键值和全局变量保存的值判定有无键按下
  62   1          //------------------------------------------------------------------------------
  63   1          if(KeyBuf == KEYMASK)           //本次无键按下,清全局标志
  64   1          {
  65   2              if(GlKeyFlag != KEYMASK)    //如果全局变量保存的是有键状态,则将其清除
  66   2              {
  67   3                  GlKeyFlag = KEYMASK;    //保存无键状态               
  68   3              } 
  69   2          }
  70   1          else                            //如果检测到有键按下
  71   1          {
  72   2              if(GlKeyFlag == KEYMASK)    //如果上次没有键按下则判定这次按键有效
  73   2              {
  74   3                  GlKeyFlag = KeyBuf;     //将这次的键值保存到全局变量   
  75   3              }
  76   2             else                         //这次的键值与上次的键值一样或为其他键值,说明健还未松手,判定无键
  77   2              {
  78   3                  KeyBuf = KEYMASK;       //判定无键                   
  79   3              }          
  80   2          }
  81   1          //------------------------------------------------------------------------------
  82   1          //返回结果
  83   1          //------------------------------------------------------------------------------
  84   1          if(KeyBuf != KEYMASK)               //如果有键按下
  85   1          {
  86   2              for(i = 0; i < 4; i ++)         //通过读到的代码查找按键
  87   2              {
  88   3                  if(KeyBuf == KeyDecode[i])
  89   3                  {
  90   4                      return (i + 1 + 0x30);  //返回按键对应的ASIIC '1','2','3','4'
  91   4                  }            
  92   3              }
  93   2          }
  94   1      
  95   1          return 0;   //如果没有键按下或是没有找到对应的键值,则返回0,否则返回对应的字符
  96   1      }
  97          
C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _KeyDelay (BEGIN)
                                           ; SOURCE LINE # 13
;---- Variable 'DelayLoops' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 14
                                           ; SOURCE LINE # 16
0000         ?C0001:
0000 EF                MOV     A,R7
0001 D3                SETB    C
0002 9400              SUBB    A,#00H
0004 4010              JC      ?C0007
                                           ; SOURCE LINE # 17
                                           ; SOURCE LINE # 18
;---- Variable 'i' assigned to Register 'R4/R5' ----
0006 7D88              MOV     R5,#088H
0008 7C13              MOV     R4,#013H
000A         ?C0004:
                                           ; SOURCE LINE # 19
000A ED                MOV     A,R5
000B 1D                DEC     R5
000C 7001              JNZ     ?C0022
000E 1C                DEC     R4
000F         ?C0022:
000F ED                MOV     A,R5
0010 4C                ORL     A,R4
0011 70F7              JNZ     ?C0004
                                           ; SOURCE LINE # 20
0013         ?C0003:
0013 1F                DEC     R7
0014 80EA              SJMP    ?C0001
                                           ; SOURCE LINE # 21
0016         ?C0007:
0016 22                RET     
             ; FUNCTION _KeyDelay (END)

             ; FUNCTION KeyRead (BEGIN)
                                           ; SOURCE LINE # 34
;---- Variable 'KeyBuf1' assigned to Register 'R6' ----
                                           ; SOURCE LINE # 35
                                           ; SOURCE LINE # 38
0000 43F70F            ORL     PORTINEN,#0FH
                                           ; SOURCE LINE # 43
;---- Variable 'KeyBuf' assigned to Register 'R3' ----
0003 ABC8              MOV     R3,P6
                                           ; SOURCE LINE # 44
0005 EB                MOV     A,R3
0006 540F              ANL     A,#0FH
0008 FB                MOV     R3,A
                                           ; SOURCE LINE # 45
0009 EE                MOV     A,R6
000A 640F              XRL     A,#0FH
000C 6017              JZ      ?C0008
                                           ; SOURCE LINE # 46
                                           ; SOURCE LINE # 47
000E 7F01              MOV     R7,#01H
0010 120000      R     LCALL   _KeyDelay
                                           ; SOURCE LINE # 49
0013 AEC8              MOV     R6,P6
                                           ; SOURCE LINE # 50
0015 EE                MOV     A,R6
C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 4   

0016 540F              ANL     A,#0FH
0018 FE                MOV     R6,A
                                           ; SOURCE LINE # 51
0019 640F              XRL     A,#0FH
001B 6004              JZ      ?C0009
001D EE                MOV     A,R6
001E 6B                XRL     A,R3
001F 6004              JZ      ?C0008
                                           ; SOURCE LINE # 53
0021         ?C0009:
                                           ; SOURCE LINE # 55
                                           ; SOURCE LINE # 56
0021 7B0F              MOV     R3,#0FH
                                           ; SOURCE LINE # 57
0023 7E0F              MOV     R6,#0FH
                                           ; SOURCE LINE # 58
                                           ; SOURCE LINE # 59
0025         ?C0008:
                                           ; SOURCE LINE # 63
0025 EB                MOV     A,R3
0026 B40F0D            CJNE    A,#0FH,?C0011
                                           ; SOURCE LINE # 64
                                           ; SOURCE LINE # 65
0029 900000      R     MOV     DPTR,#GlKeyFlag
002C E0                MOVX    A,@DPTR
002D 640F              XRL     A,#0FH
002F 6012              JZ      ?C0013
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
0031 740F              MOV     A,#0FH
0033 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
0034 800D              SJMP    ?C0013
0036         ?C0011:
                                           ; SOURCE LINE # 71
                                           ; SOURCE LINE # 72
0036 900000      R     MOV     DPTR,#GlKeyFlag
0039 E0                MOVX    A,@DPTR
003A B40F04            CJNE    A,#0FH,?C0014
                                           ; SOURCE LINE # 73
                                           ; SOURCE LINE # 74
003D EB                MOV     A,R3
003E F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 75
003F 8002              SJMP    ?C0013
0041         ?C0014:
                                           ; SOURCE LINE # 77
                                           ; SOURCE LINE # 78
0041 7B0F              MOV     R3,#0FH
                                           ; SOURCE LINE # 79
                                           ; SOURCE LINE # 80
0043         ?C0013:
                                           ; SOURCE LINE # 84
0043 EB                MOV     A,R3
0044 640F              XRL     A,#0FH
0046 6014              JZ      ?C0016
                                           ; SOURCE LINE # 85
                                           ; SOURCE LINE # 86
;---- Variable 'i' assigned to Register 'R7' ----
0048 E4                CLR     A
0049 FF                MOV     R7,A
C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 5   

004A         ?C0017:
                                           ; SOURCE LINE # 87
                                           ; SOURCE LINE # 88
004A EF                MOV     A,R7
004B 900000      R     MOV     DPTR,#KeyDecode
004E 93                MOVC    A,@A+DPTR
004F B50305            CJNE    A,AR3,?C0019
                                           ; SOURCE LINE # 89
                                           ; SOURCE LINE # 90
0052 EF                MOV     A,R7
0053 2431              ADD     A,#031H
0055 FF                MOV     R7,A
0056 22                RET     
                                           ; SOURCE LINE # 91
                                           ; SOURCE LINE # 92
0057         ?C0019:
0057 0F                INC     R7
0058 EF                MOV     A,R7
0059 B404EE            CJNE    A,#04H,?C0017
                                           ; SOURCE LINE # 93
005C         ?C0016:
                                           ; SOURCE LINE # 95
005C 7F00              MOV     R7,#00H
                                           ; SOURCE LINE # 96
005E         ?C0021:
005E 22                RET     
             ; FUNCTION KeyRead (END)

C51 COMPILER V8.01   KEY                                                                   09/30/2007 11:14:56 PAGE 6   

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


P6 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
KeyRead. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  KeyBuf . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  KeyBuf1. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
GlKeyFlag. . . . . . . . . . . . . . .  PUBLIC   XDATA  U_CHAR   0000H  1
wchar_t. . . . . . . . . . . . . . . .  TYPEDEF  -----  CHAR     -----  1
KeyDecode. . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0000H  4
PORTINEN . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00F7H  1
va_list. . . . . . . . . . . . . . . .  TYPEDEF  -----  PTR      -----  3
_KeyDelay. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  DelayLoops . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0004H  2


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