一.前言
經過上次的學習,相信大家已經初步學會使用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口,來進行修改,達到自己的目的,需要具體代碼的同學可以聯系我。