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口,来进行修改,达到自己的目的,需要具体代码的同学可以联系我。
zigbee学习之路(十五):基于协议栈的按键实验的更多相关文章
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- zigbee学习之路(十):串口(接收)
一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...
- 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
在之前的定时器驱动程序中,我们发现在连续按下按键的时候,正常情况下应该是一次按下对应一次松开.而程序有时候会显示是两次按下,一次松开.这个问题是因为在按下的时候,因为是机械按键,所以电压信号会产生一定 ...
- IOS学习之路十五(UIView 添加背景图片以及加边框)
怎样给UIview添加背景图片呢很简单,就是先给view添加一个subview,然后设为背景图片: 效果图如下: 很简单直接上代码: //设置内容 self.myTopView.backgroundC ...
- FastAPI 学习之路(五十六)将token存放在redis
在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...
- FastAPI 学习之路(五十五)操作Redis
之前我们分享了操作关系型数据库,具体文章, FastAPI 学习之路(三十二)创建数据库 FastAPI 学习之路(三十三)操作数据库 FastAPI 学习之路(三十四)数据库多表操作 这次我们分享的 ...
- VSTO学习笔记(十五)Office 2013 初体验
原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
随机推荐
- EntityFramework 连接字符串
1. Microsoft SQL Server 2016 LocalDB <connectionStrings> <add name="DefaultConnection& ...
- @Html.Raw()
在用VS 2015写代码时,匹配邮箱的正则表达式 /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ @报错 主要因为 @是MVC里的关键字,所以不能直 ...
- 转:HAR(HTTP Archive)规范
HAR(HTTP Archive),是一个用来储存HTTP请求/响应信息的通用文件格式,基于JSON.这个格式的出现可以使HTTP监测工具以一种通用的格式导出所收集的数据,这些数据可以被其他支持HAR ...
- gmc银联接口开发demo
1.接口文档 1.1 无gmc界面接口 (dll/ocx) dll调用(posinf.dll)函数名为:int bankall (char * request,char *response),其中第一 ...
- dede文章内容页增加视频文件
具体方法:1.在优酷上注册个账号.将要上传的视频在优酷上发布.2.待审核完成后分享复制html代码. 3.在后台发布文章时点击源码,将优酷中复制的代码考过来.4.发布后生成页面即可.(可参照vide ...
- jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据
jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() ...
- word嵌入图片部分被段落遮挡
这是因为图片所在段落的行距被设置为固定行距造成的 解决办法: 把图片所在段落的行距改为单倍行距
- .NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. Re ...
- SSIS2012 项目部署模型
SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integration Services 服务器,使用包部署模型可以将单独的包部署到Integrat ...
- gradle基础的build文件模板_tomcat
group '组织名' version '版本号' /* 支持的插件 */ apply plugin: 'java' // 项目基础变成语言支持为java apply plugin: 'war' // ...