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

📄 key.lst

📁 单片机上的贪吃蛇。12864显示。含详细资料
💻 LST
字号:
C51 COMPILER V8.02   KEY                                                                   03/12/2009 22:02:28 PAGE 1   


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

line level    source

   1          #include "REG52.H"
   2          #include "Key.h"
   3          #define OS_LONG_KEY_EN 1//如果应用中需要处理长按键动作,则定义为1,否则定义为0(如果应用中不需要处理长按动
             -作,则建议定义为0,以节省代码空间)
   4          
   5          /***********************************************
   6          功能说明:按键驱动扫描
   7          入口参数:无
   8          出口参数:扫描一次键盘以获得按键句柄
   9          注:交OSReadKey()函数调用
  10          需要根据实际硬件的键盘接口修改
  11          ***********************************************/
  12          unsigned char OSScanKey(void)
  13          {
  14   1              unsigned char Temp;
  15   1              unsigned char i;
  16   1              P2=0xff;
  17   1              Temp=P1;
  18   1              for(i=0;i<8;i++)
  19   1              {
  20   2                      if((Temp&(1<<i))==0)
  21   2                              break;
  22   2              }
  23   1              if(i<8)
  24   1                      return i+1;
  25   1              else
  26   1                      return  0;
  27   1      }
  28          
  29          /**********************************************
  30          功能说明:读取按键动作
  31          入口参数:无
  32          出口参数:返回按键动作
  33          注:没有按键动作,则返回0,1号按键动作,返回1-4
  34          2号按键动作,返回5-8,如此类推
  35          返回1、5、..:确认短按按下
  36          返回2、6、..:确认长按按下
  37          返回3、7、..:确认短按松开
  38          返回4、8、..:确认长按松开
  39          ***********************************************/
  40          unsigned char OSReadKey(void)
  41          {
  42   1              static unsigned char KeyEventCnt=0;
  43   1              static unsigned char KeySampleCnt=0;
  44   1              static unsigned char KeyBuffer=0;
  45   1      #define SHORT_ON_DITHERING_COUNTER 3//定义短按按下去抖时间
  46   1      #define SHORT_OFF_DITHERING_COUNTER 3//定义短按松开去抖时间,一般与短按按下去抖时间相同
  47   1      
  48   1      #if OS_LONG_KEY_EN>0
  49   1              static unsigned int LongKeySampleCnt=0;
  50   1              #define LONG_ON_DITHERING_COUNTER 250//定义长按按下确认需要的时间,如果是每1MS调用一次OSReadKey(),则1000
             -意味着这个时间为1S
  51   1              #define LONG_OFF_DITHERING_COUNTER 3//定义长按松开去抖时间,一般和短按去抖时间相同
  52   1      #endif
  53   1              unsigned char KeyTemp;
C51 COMPILER V8.02   KEY                                                                   03/12/2009 22:02:28 PAGE 2   

  54   1              KeyTemp=OSScanKey();
  55   1              switch(KeyEventCnt)
  56   1              {
  57   2                      case 0:
  58   2                              if(KeyTemp!=0)
  59   2                              {
  60   3                                      KeySampleCnt=0;
  61   3                                      KeyBuffer=KeyTemp;
  62   3                                      KeyEventCnt=1;     
  63   3                              }
  64   2                              return 0;//no key on,return 0
  65   2                              break;
  66   2                      
  67   2                      #if OS_LONG_KEY_EN>0    
  68   2                      case 1:
  69   2                              if(KeyTemp!=KeyBuffer)
  70   2                              {
  71   3                                      KeyEventCnt=0;
  72   3                                      return 0;//is dithering,return 0
  73   3                              }
  74   2                              else
  75   2                              {
  76   3                                      if(++KeySampleCnt>SHORT_ON_DITHERING_COUNTER)
  77   3                                      {
  78   4                                              KeySampleCnt=0;
  79   4                                              KeyEventCnt=2;
  80   4                                              LongKeySampleCnt=0;
  81   4                                              return ((KeyBuffer-1)<<2)+1;//sure that key on,return (KeyBuffer-1)<<2+1
  82   4                                      }
  83   3                                      else
  84   3                                              return 0;//not sure that key on,return 0                 
  85   3                              }
  86   2                              break;
  87   2                                      
  88   2                      case 2:
  89   2                              if(++LongKeySampleCnt>LONG_ON_DITHERING_COUNTER)
  90   2                              {
  91   3                                      KeySampleCnt=0;
  92   3                                      KeyEventCnt=3;
  93   3                                      return ((KeyBuffer-1)<<2)+2; //sure that key long on,return (KeyBuffer-1)<<2+2
  94   3                              }
  95   2                              else
  96   2                              {
  97   3                                      if(KeyTemp!=KeyBuffer)
  98   3                                      {
  99   4                                              if(++KeySampleCnt>SHORT_OFF_DITHERING_COUNTER)
 100   4                                              {
 101   5                                                      KeyEventCnt=0;
 102   5                                                      return ((KeyBuffer-1)<<2)+3;//after short on to off,(KeyBuffer-1)<<2+3
 103   5                                              }
 104   4                                              else
 105   4                                                      return 0;
 106   4                                      }
 107   3                                      else
 108   3                                      {
 109   4                                              KeySampleCnt=0;
 110   4                                              return 0;
 111   4                                      }
 112   3                              }
 113   2                              break;
 114   2                      
 115   2                      case 3:
C51 COMPILER V8.02   KEY                                                                   03/12/2009 22:02:28 PAGE 3   

 116   2                              if(KeyTemp!=KeyBuffer)
 117   2                              {
 118   3                                      if(++KeySampleCnt>LONG_OFF_DITHERING_COUNTER)
 119   3                                      {
 120   4                                              KeyEventCnt=0;
 121   4                                              return ((KeyBuffer-1)<<2)+4;  //after long key on turn to off,(KeyBuffer-1)<<2+4
 122   4                                      }
 123   3                                      else
 124   3                                              return 0;
 125   3                              }
 126   2                              else
 127   2                              {
 128   3                                      KeySampleCnt=0;
 129   3                                      return 0;
 130   3                              }
 131   2                              break;
 132   2                      
 133   2                      #else
                              case 1:
                                      if(KeyTemp!=KeyBuffer)
                                      {
                                              KeyEventCnt=0;
                                              return 0;//is dithering,return 0
                                      }
                                      else
                                      {
                                              if(++KeySampleCnt>=SHORT_ON_DITHERING_COUNTER)
                                              {
                                                      KeySampleCnt=0;
                                                      KeyEventCnt=2;
                                                      return ((KeyBuffer-1)<<2)+1;//sure that key on,return (KeyBuffer-1)<<2+1
                                              }
                                              else
                                                      return 0;//not sure that key on,return 0                 
                                      }
                                      break;
                                              
                              case 2:
                                      if(KeyTemp!=KeyBuffer)
                                      {
                                              if(++KeySampleCnt>=SHORT_OFF_DITHERING_COUNTER)
                                              {
                                                      KeyEventCnt=0;
                                                      return ((KeyBuffer-1)<<2)+3;//after short on to off,(KeyBuffer-1)<<2+3
                                              }
                                              else
                                                      return 0;
                                      }
                                      else
                                      {
                                              KeySampleCnt=0;
                                              return 0;
                                      }
                                      break;
                              #endif
 171   2      
 172   2                      default:break;
 173   2              }
 174   1              return 0;
 175   1      }
 176          /***************************************************************/

C51 COMPILER V8.02   KEY                                                                   03/12/2009 22:02:28 PAGE 4   


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