天天看點

第十九節 協定棧五向按鍵

第十九節 協定棧五向按鍵

和前面幾個一樣,按鍵的驅動在協定棧中也已經有了,我們隻需要做一些小的修改,使它适應我們的開發闆即可。

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

請勿用于商業