zigbee學習之路(十五):基於協議棧的按鍵實驗


一.前言

     經過上次的學習,相信大家已經初步學會使用zigbee協議進行發送和接受數據了。今天,我們要進行的實驗是按鍵的實驗,學會如何在協議棧里實現按鍵中斷。

二.實驗功能

    在協議棧上實現按鍵中斷,BUT1 按下,LED1 閃爍兩次。

三.代碼講解

    大家還記得,前面做過的按鍵實驗是怎么配置的嗎,其實基於zigbee的協議棧原理是差不多的,我們要對按鍵的接口和狀態是差不多,TI已經為我們建立了專用的按鍵配置的代碼文件,我們只要在此基礎上修改就行了。先打開hel_key.c進行修改,下面是代碼

#define HAL_KEY_SW_6_PORT   P0   //1、配置IO口(S1在P0_4)

#define HAL_KEY_SW_6_BIT    BV(4)

#define HAL_KEY_SW_6_SEL    P0SEL

#define HAL_KEY_SW_6_DIR    P0DIR/* edge interrupt */

#define HAL_KEY_SW_6_EDGEBIT  BV(0)

#define HAL_KEY_SW_6_EDGE     HAL_KEY_RISING_EDGE //2、P0上升沿觸發中斷/* SW_6 interrupts */

#define HAL_KEY_SW_6_IEN      IEN1  /* CPU interrupt mask register */

#define HAL_KEY_SW_6_IENBIT   BV(5) /* Mask bit for all of Port_0 */

#define HAL_KEY_SW_6_ICTL     P0IEN /* Port Interrupt Control register */

#define HAL_KEY_SW_6_ICTLBIT  BV(4) /* P0IEN - P0.1 enable/disable bit */

#define HAL_KEY_SW_6_PXIFG    P0IFG /* Interrupt flag at source */

以上就是對按鍵端口進行配置,和我們普通的I/O口初始化差不多。

然后我們繼續修改,在hal_board_cfg.h 中修改

#define PUSH1_BV BV(4)//S1 在P0_4
#define PUSH1_SBIT P0_4

最后,我們在OnBoard.c中進行修改

默認為查詢方式,現在我們將其改為中斷方式

我們既然使用了中斷,就要配置並用它,在hal_key.c函數中開啟中斷

這樣的話,按鍵相關的配置就出不多完成了,只要等着zigbee中的事件函數調用就行了。下面是具體的按鍵的處理函數。

void SampleApp_HandleKeys( uint8 shift, uint8 keys )
{
  (void)shift;  // Intentionally unreferenced parameter
 
  if ( keys & HAL_KEY_SW_6 )
  {
    HalUARTWrite(0,"K1",2); //提示被按下的是KEY1
    HalUARTWrite(0,"\n",1); //
    HalLedBlink( HAL_LED_1, 2, 50, 500 ); //LED1閃爍2次,每次為500ms,點亮時間為50%
  }

 

當檢測到按鍵按下的時候,我們就可以看到燈閃爍的效果了

四.總結

    通過本次,主要想向大家介紹的是zigbee里的按鍵函數以及運用,根據按鍵對應的不同I/O口,來進行修改,達到自己的目的,需要具體代碼的同學可以聯系我。

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM