C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 1   


C51 COMPILER V9.56.0.0, COMPILATION OF MODULE BSP_KEY
OBJECT MODULE PLACED IN .\Objects\bsp_key.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE ..\bsp\bsp_key.c LARGE OPTIMIZE(8,SPEED) BROWSE INCDIR(..\bsp;..\app) DE
                    -BUG OBJECTEXTEND PRINT(.\Listings\bsp_key.lst) TABS(2) OBJECT(.\Objects\bsp_key.obj)

line level    source

   1          #include "bsp.h"
   2          
   3          
   4          #define K4        PIN_KEY_ENTER
   5          #define K3        PIN_KEY_DOWN
   6          #define K2        PIN_KEY_UP
   7          #define K1        PIN_KEY_BACK
   8          
   9          static KEY_FIFO_T s_tKey;   /* 按键FIFO变量,结构体 */
  10          
  11          /******************************此区域无需改动******************************/
  12          bit nb_Key1Release;     //按键释放
  13          bit nb_Key2Release;     //按键释放
  14          bit nb_Key3Release;     //按键释放
  15          bit nb_Key4Release;     //按键释放
  16          
  17          bit nb_Key1IntialFlag;    //按键初始化标志
  18          bit nb_Key2IntialFlag;    //按键初始化标志
  19          bit nb_Key3IntialFlag;    //按键初始化标志
  20          bit nb_Key4IntialFlag;    //按键初始化标志
  21          
  22          bit nb_ClearKey1TimeFlag; //按键旗标
  23          bit nb_ClearKey2TimeFlag; //按键旗标
  24          bit nb_ClearKey3TimeFlag; //按键旗标
  25          bit nb_ClearKey4TimeFlag; //按键旗标
  26          
  27          unsigned int gui_Key1Times; //按键按下计时
  28          unsigned int gui_Key2Times; //按键按下计时
  29          unsigned int gui_Key3Times; //按键按下计时
  30          unsigned int gui_Key4Times; //按键按下计时
  31          
  32          bit nb_Key1Value;     //按键值
  33          bit nb_Key2Value;     //按键值
  34          bit nb_Key3Value;     //按键值
  35          bit nb_Key4Value;     //按键值
  36          /******************************此区域无需改动******************************/
  37          
  38          /*
  39          *********************************************************************************************************
  40          * 函 数 名: bsp_InitKey
  41          * 功能说明: 初始化按键. 该函数被 bsp_Init() 调用。
  42          * 形    参:  无
  43          * 返 回 值: 无
  44          *********************************************************************************************************
  45          */
  46          void bsp_InitKey(void)
  47          {
  48   1        P3M0 = 0x22;        //P3.1 P3.0设置为上拉输入 key1 ENTER    key2 DOWN
  49   1        P1M3 = 0x22;                  //P1.7 P1.6设置为上拉输入  key3  UP   key4 back  
  50   1        bsp_KeyClear();
  51   1      }
  52          
  53          void bsp_disable_key(void)
  54          {
C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 2   

  55   1        g_clock_cb = NULL;
  56   1      }
  57          
  58          void bsp_enable_key(void)
  59          {
  60   1        g_clock_cb = bsp_KeyScan;
  61   1      }
  62          
  63          /*
  64          *********************************************************************************************************
  65          * 函 数 名: bsp_PutKey
  66          * 功能说明: 将1个键值压入按键FIFO缓冲区。可用于模拟一个按键。
  67          * 形    参:  _KeyCode : 按键代码
  68          * 返 回 值: 无
  69          *********************************************************************************************************
  70          */
  71          void bsp_PutKey(unsigned char _KeyCode)
  72          {
  73   1        s_tKey.Buf[s_tKey.Write] = _KeyCode;
  74   1      
  75   1        if (++s_tKey.Write  >= KEY_FIFO_SIZE)
  76   1        {
  77   2          s_tKey.Write = 0;
  78   2        }
  79   1      }
  80          
  81          /*
  82          *********************************************************************************************************
  83          * 函 数 名: bsp_GetKey
  84          * 功能说明: 从按键FIFO缓冲区读取一个键值。
  85          * 形    参:  无
  86          * 返 回 值: 按键代码
  87          *********************************************************************************************************
  88          */
  89          unsigned char bsp_GetKey(void)
  90          {
  91   1        unsigned char ret;
  92   1      
  93   1        if (s_tKey.Read == s_tKey.Write)
  94   1        {
  95   2          return KEY_NONE;
  96   2        }
  97   1        else
  98   1        {
  99   2          ret = s_tKey.Buf[s_tKey.Read];
 100   2      
 101   2          if (++s_tKey.Read >= KEY_FIFO_SIZE)
 102   2          {
 103   3            s_tKey.Read = 0;
 104   3          }
 105   2          return ret;
 106   2        }
 107   1      }
 108          
 109          void bsp_KeyClear(void)
 110          {
 111   1        
 112   1        nb_Key1Release = 1;
 113   1        nb_ClearKey1TimeFlag = 0;
 114   1      
 115   1        nb_Key2Release = 1;
 116   1        nb_ClearKey2TimeFlag = 0;
C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 3   

 117   1        
 118   1        nb_Key3Release = 1;
 119   1        nb_ClearKey3TimeFlag = 0;
 120   1      
 121   1        nb_Key4Release = 1;
 122   1        nb_ClearKey4TimeFlag = 0;
 123   1        
 124   1        gui_Key1Times = 0;
 125   1        gui_Key2Times = 0;
 126   1        gui_Key3Times = 0;
 127   1        gui_Key4Times = 0;
 128   1        
 129   1        
 130   1        s_tKey.Read = s_tKey.Write = 0;
 131   1      }
 132          
 133          /*
 134          *********************************************************************************************************
 135          * 函 数 名: bsp_KeyScan
 136          * 功能说明: 扫描所有按键。非阻塞，被systick中断周期性的调用
 137          * 形    参:  无
 138          * 返 回 值: 无
 139          *********************************************************************************************************
 140          */
 141          void bsp_KeyScan(void)
 142          {
 143   1      /************************************K1************************************/
 144   1        if((K1 == KEY1_VALID_VALUE)&&(nb_Key1Release == 1)) {//按键第一次按下
 145   2          /* 有按键按下时, 进来这个分支. 第一次进来时nb_ClearKey1TimeFlag为非0值 */
 146   2          if(nb_ClearKey1TimeFlag) {
 147   3            // 清完值后重新开始计时.
 148   3            nb_ClearKey1TimeFlag = 0;
 149   3            gui_Key1Times = 0;//清除按键计时
 150   3          }
 151   2          
 152   2          if(gui_Key1Times > KEY_DELAY) {//判断是否超过消抖时间
 153   3            if(nb_Key1Release == 1) {//如果按键是释放状态
 154   4              nb_Key1Release = 0;//记录按键状态为按下
 155   4            }
 156   3            gui_Key1Times = 0;//清除按键计时
 157   3          }
 158   2        }
 159   1        else if((K1 == KEY1_VALID_VALUE) && (nb_Key1Release == 0))//如果按键处于按下状态
 160   1        {
 161   2          if(gui_Key1Times >= 100 && (gui_Key1Times % 25 == 0)){//如果按下时间超过1秒，说明按键处�
             -�长按状态
 162   3      //每250ms发出1次长按事件
 163   3            bsp_PutKey(KEY_1_LONG_DOWN);  /* 将键值放入KEY FIFO */
 164   3          }
 165   2        }
 166   1        else if((K1 != KEY1_VALID_VALUE) && (nb_Key1Release == 0))//如果按键释放，且按键处于按下状
             -态
 167   1        {
 168   2          nb_Key1Release = 1;
 169   2          if(gui_Key1Times < 100)//如果按下的时间不到1秒
 170   2          {
 171   3            bsp_PutKey(KEY_1_SHORT_DOWN); /* 将键值放入KEY FIFO */
 172   3          }
 173   2        }
 174   1        else {
 175   2          nb_ClearKey1TimeFlag = 1;
 176   2        }
C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 4   

 177   1        
 178   1      /************************************K2************************************/
 179   1        if((K2 == KEY2_VALID_VALUE)&&(nb_Key2Release == 1)) {//按键第一次按下
 180   2          /* 有按键按下时, 进来这个分支. 第一次进来时nb_ClearKey2TimeFlag为非0值 */
 181   2          if(nb_ClearKey2TimeFlag) {
 182   3            // 清完值后重新开始计时.
 183   3            nb_ClearKey2TimeFlag = 0;
 184   3            gui_Key2Times = 0;//清除按键计时
 185   3          }
 186   2          
 187   2          if(gui_Key2Times > KEY_DELAY) {//判断是否超过消抖时间
 188   3            if(nb_Key2Release == 1) {//如果按键是释放状态
 189   4              nb_Key2Release = 0;//记录按键状态为按下
 190   4            }
 191   3            gui_Key2Times = 0;//清除按键计时
 192   3          }
 193   2        }
 194   1        else if((K2 == KEY2_VALID_VALUE) && (nb_Key2Release == 0))//如果按键处于按下状态
 195   1        {
 196   2          if(gui_Key2Times >= 100 && (gui_Key2Times % 25 == 0)){//如果按下时间超过1秒，说明按键处�
             -�长按状态
 197   3      //每200ms发出1次长按事件
 198   3            bsp_PutKey(KEY_2_LONG_DOWN);  /* 将键值放入KEY FIFO */
 199   3          }
 200   2        }
 201   1        else if((K2 != KEY2_VALID_VALUE) && (nb_Key2Release == 0))//如果按键释放，且按键处于按下状
             -态
 202   1        {
 203   2          nb_Key2Release = 1;
 204   2          if(gui_Key2Times < 100)//如果按下的时间不到1秒
 205   2          {
 206   3            bsp_PutKey(KEY_2_SHORT_DOWN); /* 将键值放入KEY FIFO */
 207   3          }
 208   2        }
 209   1        else {
 210   2          nb_ClearKey2TimeFlag = 1;
 211   2        }
 212   1      /************************************K3************************************/
 213   1        if((K3 == KEY3_VALID_VALUE)&&(nb_Key3Release == 1)) {//按键第一次按下
 214   2          /* 有按键按下时, 进来这个分支. 第一次进来时nb_ClearKey3TimeFlag为非0值 */
 215   2          if(nb_ClearKey3TimeFlag) {
 216   3            // 清完值后重新开始计时.
 217   3            nb_ClearKey3TimeFlag = 0;
 218   3            gui_Key3Times = 0;//清除按键计时
 219   3          }
 220   2          
 221   2          if(gui_Key3Times > KEY_DELAY) {//判断是否超过消抖时间
 222   3            if(nb_Key3Release == 1) {//如果按键是释放状态
 223   4              nb_Key3Release = 0;//记录按键状态为按下
 224   4            }
 225   3            gui_Key3Times = 0;//清除按键计时
 226   3          }
 227   2        }
 228   1        else if((K3 == KEY3_VALID_VALUE) && (nb_Key3Release == 0))//如果按键处于按下状态
 229   1        {
 230   2          if(gui_Key3Times >= 100 && (gui_Key3Times % 25 == 0)){//如果按下时间超过1秒，说明按键处�
             -�长按状态
 231   3      //每200ms发出1次长按事件
 232   3            bsp_PutKey(KEY_3_LONG_DOWN);  /* 将键值放入KEY FIFO */
 233   3          }
 234   2        }
 235   1        else if((K3 != KEY3_VALID_VALUE) && (nb_Key3Release == 0))//如果按键释放，且按键处于按下状
C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 5   

             -态
 236   1        {
 237   2          nb_Key3Release = 1;
 238   2          if(gui_Key3Times < 100)//如果按下的时间不到1秒
 239   2          {
 240   3            bsp_PutKey(KEY_3_SHORT_DOWN); /* 将键值放入KEY FIFO */
 241   3          }
 242   2        }
 243   1        else {
 244   2          nb_ClearKey3TimeFlag = 1;
 245   2        }
 246   1      /************************************K4************************************/
 247   1        if((K4 == KEY4_VALID_VALUE)&&(nb_Key4Release == 1)) {//按键第一次按下
 248   2          /* 有按键按下时, 进来这个分支. 第一次进来时nb_ClearKey4TimeFlag为非0值 */
 249   2          if(nb_ClearKey4TimeFlag) {
 250   3            // 清完值后重新开始计时.
 251   3            nb_ClearKey4TimeFlag = 0;
 252   3            gui_Key4Times = 0;//清除按键计时
 253   3          }
 254   2          
 255   2          if(gui_Key4Times > KEY_DELAY) {//判断是否超过消抖时间
 256   3            if(nb_Key4Release == 1) {//如果按键是释放状态
 257   4              nb_Key4Release = 0;//记录按键状态为按下
 258   4            }
 259   3            gui_Key4Times = 0;//清除按键计时
 260   3          }
 261   2        }
 262   1        else if((K4 == KEY4_VALID_VALUE) && (nb_Key4Release == 0))//如果按键处于按下状态
 263   1        {
 264   2          if(gui_Key4Times >= 100 && (gui_Key4Times % 25 == 0)){//如果按下时间超过1秒，说明按键处�
             -�长按状态
 265   3      //每200ms发出1次长按事件
 266   3            bsp_PutKey(KEY_4_LONG_DOWN);  /* 将键值放入KEY FIFO */
 267   3          }
 268   2        }
 269   1        else if((K4 != KEY4_VALID_VALUE) && (nb_Key4Release == 0))//如果按键释放，且按键处于按下状
             -态
 270   1        {
 271   2          nb_Key4Release = 1;
 272   2          if(gui_Key4Times < 100)//如果按下的时间不到1秒
 273   2          {
 274   3            bsp_PutKey(KEY_4_SHORT_DOWN); /* 将键值放入KEY FIFO */
 275   3          }
 276   2        }
 277   1        else {
 278   2          nb_ClearKey4TimeFlag = 1;
 279   2        } 
 280   1        gui_Key1Times++;
 281   1        gui_Key2Times++;
 282   1        gui_Key3Times++;
 283   1        gui_Key4Times++;
 284   1      }
 285          
 286          
 287          
 288          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    674    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     21    ----
C51 COMPILER V9.56.0.0   BSP_KEY                                                           09/09/2024 13:43:20 PAGE 6   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     16    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
