• 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口,来进行修改,达到自己的目的,需要具体代码的同学可以联系我。

      

  • 相关阅读:
    Java工作流引擎全局变量的介绍
    Java工作流系统-CCBPM如何自动升级?
    驰骋工作流系统-Java共工作流引擎配置定时任务
    那些年下过的大雨
    移动端APP列表点透事件处理方法
    关于React中状态保存的研究
    几个关于js数组方法reduce的经典片段
    关于React组件之间如何优雅地传值的探讨
    模拟制作网易云音乐(AudioContext)
    移动端效果之IndexList
  • 原文地址:https://www.cnblogs.com/sjsxk/p/5381978.html
Copyright © 2020-2023  润新知