第十九節 協定棧五向按鍵
和前面幾個一樣,按鍵的驅動在協定棧中也已經有了,我們隻需要做一些小的修改,使它适應我們的開發闆即可。
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
請勿用于商業