天天看点

第十九节 协议栈五向按键

第十九节 协议栈五向按键

和前面几个一样,按键的驱动在协议栈中也已经有了,我们只需要做一些小的修改,使它适应我们的开发板即可。

1.修改工程配置,使能按键功能。

第十九节 协议栈五向按键

2.在我们的工程中要使用按键功能,仅仅打开配置选项是不够的。因为协议栈代码默认只有MINIDK开发板才有按键。

第十九节 协议栈五向按键

从这里可以看到(类似的地方有很多),如果要使能按键功能还需要定义CC2540_MINIDK,但是阅读整个协议栈你会发现,定义CC2540_MINIDK后还会打开其它的功能,而那些功能并不是我们想要的,所以在这里我们使用另外一种方法来实现。我们定义我们的开发板也能使用按键功能,所以在工程配置中添加MT254xboard=TRUE,然后在按键功能有宏开关的地方加入这个条件。具体位置参见代码。

第十九节 协议栈五向按键

按下相应的按键后可以看到串口输出相应的按键值。五向按键的工作原理在裸机开发的时候已经讲过了,在协议栈中已经有相应的驱动代码了,无需我们编写,只需要按照实际情况改写即可。例如我们的开发板每个按键对应的电压值和原来的值并不一样,所以我们这里改写了每个按键值的电压范围。

uint8 halGetJoyKeyInput(void)
{
  /* The joystick control is encoded as an analog voltage.
   * Read the JOY_LEVEL analog value and map it to joy movement.
   */
  uint16 adc;
  uint8 ksave0 = 0;
  uint8 ksave1;

  /* Keep on reading the ADC until two consecutive key decisions are the same. */
  do
  {
    ksave1 = ksave0;    /* save previouse key reading */

    adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_10);

    if ((adc >= 2) && (adc <= 95))  // 85 right
    {
      ksave0 |= HAL_KEY_RIGHT;
    }
    else if ((adc >= 96) && (adc <= 110))    // 101 cent
    {
       ksave0 |= HAL_KEY_CENTER;
    }
    else if ((adc >= 111) && (adc <= 140))    // 127 up
    {
       ksave0 |= HAL_KEY_UP;
    }
    else if ((adc >= 141) && (adc <= 200))    // 170 left
    {
      ksave0 |= HAL_KEY_LEFT;
    }
    else if ((adc >= 201) && (adc <= 300))   // 257 down
    {
     ksave0 |= HAL_KEY_DOWN;
    }
  } while (ksave0 != ksave1);

  return ksave0;
}
           

本文章转载自

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx

请勿用于商业