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

📄 keypad.lst

📁 单片机的多级通讯程序 包含有keil源程序 和proteus的仿真程序
💻 LST
字号:
C51 COMPILER V7.50   KEYPAD                                                                06/30/2008 23:35:47 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE KEYPAD
OBJECT MODULE PLACED IN keypad.OBJ
COMPILER INVOKED BY: D:\Edu\Software\Keil\C51\BIN\C51.EXE keypad.c BROWSE NOAREGS INCDIR(..\common) DEBUG OBJECTEXTEND

line level    source

   1          
   2          /*
   3          ****************************************************
   4          
   5                          键盘
   6          
   7          ****************************************************
   8          */
   9          
  10          
  11          #include <reg52.H>
  12          #include "Typedef.H"
  13          #include "UserDef.H"
  14          #include "Keypad.h"
  15          
  16          
  17          /* 按键对照表 */
  18          static INT32U code KeyMap[][2] = {
  19          //      扫描码  虚键码
  20                  0xFFFF, VK_NULL,
  21                  0xFFEF, VK_0,
  22                  0xFFFD, VK_1,
  23                  0xFFDF, VK_2,
  24                  0xFDFF, VK_3,
  25                  0xFFFB, VK_4,
  26                  0xFFBF, VK_5,
  27                  0xFBFF, VK_6,
  28                  0xFFF7, VK_7,
  29                  0xFF7F, VK_8,
  30                  0xF7FF, VK_9,
  31                  0xEFFF, VK_ADD,
  32                  0xDFFF, VK_SUB,
  33                  0xBFFF, VK_MUL,
  34                  0x7FFF, VK_DIV,
  35                  0xFEFF, VK_EQU,
  36                  0xFFFE, VK_CLR,
  37                  };
  38          
  39          
  40          /* 端口定义 */
  41          sbit KP_Col0 = P1^0;
  42          sbit KP_Col1 = P1^1;
  43          sbit KP_Col2 = P1^2;
  44          sbit KP_Col3 = P1^3;
  45          sbit KP_Row0 = P1^4;
  46          sbit KP_Row1 = P1^5;
  47          sbit KP_Row2 = P1^6;
  48          sbit KP_Row3 = P1^7;
  49          
  50          
  51          /*  全局变量 */
  52          
  53          
  54          /***************************************************
  55          
C51 COMPILER V7.50   KEYPAD                                                                06/30/2008 23:35:47 PAGE 2   

  56                          按键扫描程序  
  57          
  58          ****************************************************/
  59          INT8U Keypad_GetKey(void)
  60                  {
  61   1              static INT8U cnt = 0;   //按键消抖计数器
  62   1              static INT16U PrevImg = 0x0FFF; //上次的扫描码
  63   1              static INT8U PrevKey = VK_NULL; //上次有效按键的虚键码
  64   1              INT16U img;
  65   1              INT8U n;
  66   1              BOOLEAN find;
  67   1      
  68   1              img = 0;
  69   1              find = FALSE;
  70   1      
  71   1              //获取扫描码
  72   1              P1 = 0xFF;
  73   1              KP_Col0 = 0;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 1;
  74   1              img |= (P1>>4); img <<= 4;
  75   1              KP_Col0 = 1;KP_Col1 = 0;KP_Col2 = 1;KP_Col3 = 1;
  76   1              img |= (P1>>4); img <<= 4;
  77   1              KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 0;KP_Col3 = 1;
  78   1              img |= (P1>>4); img <<= 4;
  79   1              KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 0;
  80   1              img |= (P1>>4);
  81   1      
  82   1              //消抖
  83   1              if (PrevImg != img)
  84   1                      {
  85   2                      cnt = 0;
  86   2                      PrevImg = img;
  87   2                      return VK_NULL;
  88   2                      }
  89   1      
  90   1              PrevImg = img;
  91   1              cnt ++;
  92   1              if (cnt < 5)
  93   1                      {
  94   2                      return VK_NULL;
  95   2                      }
  96   1      
  97   1              //本次消抖完毕,计数器清零,为下次消抖做准备
  98   1              cnt = 0;
  99   1      
 100   1              //获取按键的虚键码
 101   1              for (n=0;n<(sizeof(KeyMap)/8);n++)
 102   1                      {
 103   2                      if (KeyMap[n][0] == img)
 104   2                              {
 105   3                              find = TRUE;
 106   3                              break;
 107   3                              }
 108   2                      }
 109   1      
 110   1              if (find == TRUE)
 111   1                      {
 112   2                      if (KeyMap[n][1] != PrevKey)    //只识别改变的按键动作
 113   2                              {
 114   3                              PrevKey = KeyMap[n][1];
 115   3                              return KeyMap[n][1];
 116   3                              }
 117   2                      else
C51 COMPILER V7.50   KEYPAD                                                                06/30/2008 23:35:47 PAGE 3   

 118   2                              return VK_NULL;
 119   2                      }
 120   1              else 
 121   1                      return VK_INVALID;
 122   1              }
 123          
 124          


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