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," ",1); //
    HalLedBlink( HAL_LED_1, 2, 50, 500 ); //LED1闪烁2次,每次为500ms,点亮时间为50%
  }

当检测到按键按下的时候,我们就可以看到灯闪烁的效果了

四.总结

    通过本次,主要想向大家介绍的是zigbee里的按键函数以及运用,根据按键对应的不同I/O口,来进行修改,达到自己的目的,需要具体代码的同学可以联系我。

  

原文地址:https://www.cnblogs.com/sjsxk/p/5381978.html