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

📄 keyboard.lst

📁 通过车载终端采集GPS数据
💻 LST
字号:
C51 COMPILER V8.02   KEYBOARD                                                              09/25/2008 19:29:38 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN .\output\bin\keyBoard.obj
COMPILER INVOKED BY: C:\Keil802\C51\BIN\C51.EXE key\keyBoard.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gps
                    -\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\keyBoard.lst) OBJECT(.\output\bin\ke
                    -yBoard.obj)

line level    source

   1          #include "typedef.h"
   2          #include "keyBoard.h"
   3          //扫描输入
   4          Byte code keyInput[4] = {0x07, 0x0b, 0x0d, 0x0e};
   5          
   6          /**********************以下定义16个按键****************/
   7          #define KEY1_1 0xfff7
   8          #define KEY1_2 0xfffb
   9          #define KEY1_3 0xfffd
  10          #define KEY1_4 0xfffe
  11          #define KEY2_1 0xff7f
  12          #define KEY2_2 0xffbf
  13          #define KEY2_3 0xffdf
  14          #define KEY2_4 0xffef
  15          #define KEY3_1 0xf7ff
  16          #define KEY3_2 0xfbff
  17          #define KEY3_3 0xfdff
  18          #define KEY3_4 0xfeff
  19          #define KEY4_1 0x7fff
  20          #define KEY4_2 0xbfff
  21          #define KEY4_3 0xdfff
  22          #define KEY4_4 0xefff
  23          
  24          
  25          #define KEY1_12 0xfff3
  26          #define KEY_NULL 0xffff
  27          
  28          #define KEY_FIRST_ACC       2   /*第一次按键计次*/
  29          #define KEY_CONTINUE_ACC    10  /*连续按键间隔计次*/
  30          #define KEY_RELEASE_ACC     2   /*按键释放间隔次数*/
  31          static char keyCode;     /*保存按键码*/
  32          extern Uchar volatile xdata D12_Y0;//键盘扫描时的输入地址,用到0-3
  33          extern Uint8 xdata D12_Y2;//键盘扫描后的输出地址,用到4-7
  34          extern idata Uchar D17CS;//赋值D12_Y0的寄存器
  35          extern unsigned char volatile xdata D12_Y1;//原来的xCONTROLBYTE81K
  36          extern idata unsigned char D16CS;//D12_Y1的寄存器,原来的xConByte81KValue
  37          extern unsigned int backlightcount;
  38          /*返回代码见key.h文件定义*/
  39          char get_key(void)
  40          {
  41   1          char tmp;
  42   1              key_process();
  43   1      
  44   1          tmp = (Uchar)keyCode;
  45   1          keyCode = 0;
  46   1      
  47   1          return tmp;
  48   1      }
  49          
  50          /************************************
  51          *
  52          按键处理流程:
  53          1)通过比较上一次的按键值来消除抖动。不相同就清除计次,相同就累加计次。
C51 COMPILER V8.02   KEYBOARD                                                              09/25/2008 19:29:38 PAGE 2   

  54          2)累加到一定次数认为是按键稳定,发送蜂鸣声,判断按键类型。
  55          3)当按键持续一定时间后定时发送蜂鸣声和按键类型。
  56          4)按键释放要有一定的时间。即两次连续按键要有一定时间间隔。
  57          5)考虑本产品的实际情况,向上和向上按键允许连续,取消和确认只能是单次按键。
  58          
  59          当有效按键后要发送蜂鸣声。
  60          通过简单的状态机处理按键的抖动、单次按键、连续按键。
  61          keyState有以下几个状态:
  62          0:第一次按键状态,消除抖动状态。不相同就清除计次,相同就累加计次,到一定的次数认为是有效按键。
  63          1:连续按键状态。
  64          2:释放按键状态。
  65          *
  66          *************************************/
  67          //extern void debug_msgNeeded(unsigned int value);
  68          void key_process(void)
  69          {
  70   1          static bit initFlag = 0;
  71   1          static Byte keyState;
  72   1          static Byte keyAcc;
  73   1          static Uint16 keyKeep;
  74   1          Byte i;
  75   1              Uint16 tmp[4],test;//四行扫描的结果保存的地方
  76   1              Uint16 tmpValue;//最终保存结果
  77   1      
  78   1          if( initFlag == 0 )
  79   1          {
  80   2              initFlag = 1;
  81   2              keyState = 0;
  82   2              keyAcc = 0;
  83   2              keyKeep = KEY_NULL;
  84   2          }
  85   1      
  86   1              for (i=0; i<4; i++)
  87   1              {
  88   2                      tmp[i] = 0;
  89   2                      D17CS &= 0xf0;//低4位清零
  90   2                      D17CS |= keyInput[i];
  91   2                      D12_Y0 = D17CS;
  92   2              test = D12_Y2;//xCONTROLBYTE82;
  93   2                      tmp[i] = D12_Y2 &0xf0;//xCONTROLBYTE82 & 0xF0;
  94   2                      if (0 ==i)
  95   2                              tmp[i] = tmp[i]>>4;
  96   2                      else if (i > 1)
  97   2                              tmp[i] = tmp[i] << (4*(i-1));
  98   2              }
  99   1      
 100   1              //确定最终输出值
 101   1              tmpValue = 0;
 102   1              for (i=0; i<4; i++)
 103   1              {
 104   2                      tmpValue += tmp[i];
 105   2              }
 106   1          /*通过计次来达到消除抖动的目的*/
 107   1          if( tmpValue == keyKeep )
 108   1          {
 109   2              keyAcc ++;
 110   2          }
 111   1          else
 112   1          {
 113   2              keyAcc = 0;
 114   2              keyKeep = tmpValue;
 115   2          }
C51 COMPILER V8.02   KEYBOARD                                                              09/25/2008 19:29:38 PAGE 3   

 116   1      
 117   1          switch(keyState)
 118   1          {
 119   2              case 0: /*第一次按键状态*/
 120   2                  if( keyKeep == KEY_NULL )
 121   2                  {
 122   3                      keyAcc = 0;
 123   3                      break;
 124   3                  }
 125   2      
 126   2                  if( keyAcc == KEY_FIRST_ACC )
 127   2                  {
 128   3                      keyState = 1;
 129   3      
 130   3                      switch( keyKeep )
 131   3                      {
 132   4                          case KEY1_1:
 133   4                                              keyCode = KEY_CODE_ENTER;//KEY_CODE_ALT;
 134   4                              break;
 135   4      
 136   4                          case KEY1_2:
 137   4                                              keyCode = KEY_CODE_ESC;//KEY_CODE_NUM9;
 138   4                              break;
 139   4      
 140   4                          case KEY1_3:
 141   4                                              keyCode = KEY_CODE_MENU;//KEY_CODE_NUM5;
 142   4                              break;
 143   4      
 144   4                          case KEY1_4:
 145   4                                              keyCode = KEY_CODE_ALT;//KEY_CODE_NUM1;
 146   4                              break;
 147   4      
 148   4                          case KEY2_1:
 149   4                                              keyCode = KEY_CODE_NUM4;//KEY_CODE_ENTER;
 150   4                              break;
 151   4      
 152   4                          case KEY2_2:
 153   4                                              keyCode = KEY_CODE_NUM3;//KEY_CODE_NUM0;
 154   4                              break;
 155   4      
 156   4                          case KEY2_3:
 157   4                                              keyCode = KEY_CODE_NUM2;//KEY_CODE_NUM6;
 158   4                              break;
 159   4      
 160   4                          case KEY2_4:
 161   4                                              keyCode = KEY_CODE_NUM1;//KEY_CODE_NUM2;
 162   4                              break;
 163   4      
 164   4                          case KEY3_1:
 165   4                                              keyCode = KEY_CODE_NUM8;//KEY_CODE_ESC;
 166   4                              break;
 167   4      
 168   4                          case KEY3_2:
 169   4                                              keyCode = KEY_CODE_NUM7;//KEY_CODE_START;
 170   4                              break;
 171   4      
 172   4                          case KEY3_3:
 173   4                                              keyCode = KEY_CODE_NUM6;//KEY_CODE_NUM7;
 174   4                              break;
 175   4      
 176   4                          case KEY3_4:
 177   4                                              keyCode = KEY_CODE_NUM5;//KEY_CODE_NUM3;
C51 COMPILER V8.02   KEYBOARD                                                              09/25/2008 19:29:38 PAGE 4   

 178   4                              break;
 179   4      
 180   4                          case KEY4_1:
 181   4                                              keyCode = KEY_CODE_START;//KEY_CODE_MENU;
 182   4                              break;
 183   4      
 184   4                          case KEY4_2:
 185   4                                              keyCode = KEY_CODE_FUNC;//KEY_CODE_FUNC;
 186   4                              break;
 187   4      
 188   4                          case KEY4_3:
 189   4                                              keyCode = KEY_CODE_NUM0;//KEY_CODE_NUM8;
 190   4                              break;
 191   4      
 192   4                          case KEY4_4:
 193   4                                              keyCode = KEY_CODE_NUM9;//KEY_CODE_NUM4;
 194   4                              break;
 195   4      
 196   4                          case KEY1_12:
 197   4                              keyCode = KEY_LIGHT_CON;
 198   4                              break;
 199   4      
 200   4                          default:
 201   4                                              keyState = 0;
 202   4                              keyAcc = 0;
 203   4                              break;
 204   4                      }
 205   3                  }
 206   2                  break;
 207   2      
 208   2              case 1: /*连续按键状态*/
 209   2                  if( keyAcc == KEY_CONTINUE_ACC )
 210   2                  {
 211   3                      keyAcc = KEY_FIRST_ACC;    /*防止计数溢出*/
 212   3      
 213   3                  }
 214   2                  else if( keyAcc == 0 )
 215   2                  { /*按键有变化*/
 216   3                      keyState = 2;
 217   3                  }
 218   2      
 219   2                  break;
 220   2      
 221   2              case 2: /*释放按键状态*/
 222   2                  if( (keyAcc== KEY_RELEASE_ACC) && (keyKeep==KEY_NULL) )
 223   2                      keyState = 0;
 224   2      
 225   2                  break;
 226   2      
 227   2              default:
 228   2                  keyState = 0;
 229   2                  break;
 230   2          }
 231   1      
 232   1          return;
 233   1      
 234   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    570    ----
   CONSTANT SIZE    =      4    ----
C51 COMPILER V8.02   KEYBOARD                                                              09/25/2008 19:29:38 PAGE 5   

   XDATA SIZE       =      5      10
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -