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

📄 key.lst

📁 用89c54单片机开发的32键扫描键盘程序。
💻 LST
字号:
C51 COMPILER V7.20   KEY                                                                   09/21/2001 13:13:04 PAGE 1   


C51 COMPILER V7.20, 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

line level    source

   1          #pragma large
   2          #include "public.h"
   3          
   4          
   5          
   6          #include "string.h"
   7          #include "stdio.h"
   8          
   9          unsigned char xdata row,col;
  10          
  11          
  12          
  13          unsigned char data  gKey,gLastKey;
  14          
  15          
  16          unsigned char xdata chartable[4][8]={ {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37},
  17                                                                          {0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47},
  18                                                                          {0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57},
  19                                                                          {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67}};
  20          
  21          
  22          
  23          void KeyInit()
  24          {
  25   1      
  26   1              P0=0x00;        //列
  27   1              P3_2=1;
  28   1              P3_3=1;
  29   1              P4_2=1;
  30   1              P4_3=1; 
  31   1              gLastKey=0;
  32   1              gKey=0; 
  33   1              
  34   1      
  35   1      }
  36          
  37          
  38          unsigned char checkcol(unsigned char row,unsigned char * col)
  39          {
  40   1      
  41   1              unsigned char xdata i,tmp,tmpKey;;
  42   1              switch(row)
  43   1              {
  44   2                      case 0:
  45   2                              tmpKey=P3_2;       //首先检测P3_2行
  46   2                              break;
  47   2                      case 1:
  48   2                              tmpKey=P3_3;       //首先检测P3_2行
  49   2                              break;
  50   2                      case 2:
  51   2                              tmpKey=P4_2;       //首先检测P3_2行
  52   2                              break;
  53   2                      case 3:
  54   2                              tmpKey=P4_3;       //首先检测P3_2行
  55   2                              break;
C51 COMPILER V7.20   KEY                                                                   09/21/2001 13:13:04 PAGE 2   

  56   2                      default:
  57   2                              tmpKey=P3_2;       //首先检测P3_2行
  58   2                              break;
  59   2              }
  60   1              
  61   1              
  62   1              if(tmpKey==0)
  63   1              {
  64   2                      Delay(10);      //去抖动
  65   2                      switch(row)
  66   2                      {
  67   3                      case 0:
  68   3                              tmpKey=P3_2;       //首先检测P3_2行
  69   3                              break;
  70   3                      case 1:
  71   3                              tmpKey=P3_3;       //首先检测P3_2行
  72   3                              break;
  73   3                      case 2:
  74   3                              tmpKey=P4_2;       //首先检测P3_2行
  75   3                              break;
  76   3                      case 3:
  77   3                              tmpKey=P4_3;       //首先检测P3_2行
  78   3                              break;
  79   3                      default:
  80   3                              tmpKey=P3_2;       //首先检测P3_2行
  81   3                              break;
  82   3                      }
  83   2                      if(tmpKey==1) //是干扰
  84   2                      {
  85   3                              KeyInit();
  86   3                              
  87   3                              return 0;
  88   3                      }
  89   2                      switch(row)
  90   2                      {
  91   3                      case 0:
  92   3                              P3_2=0;    //首先检测P3_2行
  93   3                              break;
  94   3                      case 1:
  95   3                              P3_3=0;    //首先检测P3_2行
  96   3                              break;
  97   3                      case 2:
  98   3                              P4_2=0;    //首先检测P3_2行
  99   3                              break;
 100   3                      case 3:
 101   3                              P4_3=0;    //首先检测P3_2行
 102   3                              break;
 103   3                      default:
 104   3                              P3_2=0;    //首先检测P3_2行
 105   3                              break;
 106   3                      }
 107   2                      tmpKey=P0;        //读取列
 108   2                      if(tmpKey==0xFF)
 109   2                      {
 110   3                              KeyInit();
 111   3                              return 0;
 112   3                      }
 113   2                      Delay(10);//去抖动
 114   2                      tmpKey=P0;
 115   2                      if(tmpKey==0xFF)
 116   2                      {
 117   3                              KeyInit();
C51 COMPILER V7.20   KEY                                                                   09/21/2001 13:13:04 PAGE 3   

 118   3                              return 0;
 119   3                      }
 120   2                      tmpKey^=0xFF;
 121   2                      for(i=0;i<7;i++)
 122   2                      {
 123   3                              tmp=tmpKey&0x01;
 124   3                              tmpKey>>=1;
 125   3                              if(tmp==1)
 126   3                              {
 127   4                                      *col=i;
 128   4                                      return 1;
 129   4                              }
 130   3                      }
 131   2      
 132   2      
 133   2              }
 134   1      }
 135          
 136          
 137          unsigned char keyproc()
 138          {
 139   1              unsigned char data tmpKey;
 140   1      
 141   1      
 142   1              if(gLastKey!=0)//上次有按钮按下,现在检测是否弹起
 143   1              {
 144   2                      tmpKey=P0;
 145   2                      Delay(10);//去抖动
 146   2                      tmpKey=P0;
 147   2                      if(tmpKey==0xFF)  //按钮弹起
 148   2                      {
 149   3                              
 150   3                              tmpKey=gLastKey|0x81;//
 151   3      
 152   3                              KeyInit();
 153   3      
 154   3                              return tmpKey;
 155   3                      }
 156   2              }
 157   1      
 158   1              //下面开始按钮按下的检测
 159   1              if(checkcol(0,&col)==1)
 160   1              {
 161   2                      gLastKey=chartable[0][col];
 162   2                      return gLastKey;
 163   2              }
 164   1      
 165   1              if(checkcol(1,&col)==1)
 166   1              {
 167   2                      gLastKey=chartable[1][col];
 168   2                      return gLastKey;
 169   2              }
 170   1      
 171   1              if(checkcol(2,&col)==1)
 172   1              {
 173   2                      gLastKey=chartable[2][col];
 174   2                      return gLastKey;
 175   2              }
 176   1      
 177   1              if(checkcol(3,&col)==1)
 178   1              {
 179   2                      gLastKey=chartable[3][col];
C51 COMPILER V7.20   KEY                                                                   09/21/2001 13:13:04 PAGE 4   

 180   2                      return gLastKey;
 181   2              }
 182   1              return 0;
 183   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    391    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     34       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   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 + -