【技能大赛笔记01】Zigbee点对点按键控制程序开发
【技能大赛笔记01】Zigbee点对点按键控制程序开发
--2017年“物联网物联网技术应用与维护”任务五题1(中职组)
广东职业技术学院 欧浩源 2017-12-20
1、题目要求


2、工程文件
在比赛中,提供了一个基于BasicRF的工程项目和一份函数说明文档,参赛选手需要在这个工程项目中编写合适的代码以实现题目的功能。在工程项目中有“rf_set.c”和"slave_node.c"这两个代码文件,分别是主节点和从节点的应用代码,参赛选手需要在这两个文件中编写合适的代码。
<1> 主节点“rf_set.c”的代码如下:

<2> 从节点"slave_node.c"的代码如下:

3、关键知识点
<1> 对题目的理解非常关键。
刚看到题目的时候我也懵B了。四个LED怎么表示8个数据位呢?
主节点和从节点分别有4个LED,一共8个LED分别表示8个数据位。
1:用LED亮表示,
0:用LED灭表示。
数据依次从高到低排列:
主节点的D4 D3 D6 D5,从节点的D4 D3 D6 D5
例如:1110 0100用二进制表示,就是:
主节点的D4:亮
主节点的D3:亮
主节点的D6:亮
主节点的D5:灭
从节点的D4:灭
从节点的D3:亮
从节点的D6:灭
从节点的D5:灭
理解这个很重要,不然题目是做不出来的。
<2> 补码与原码的换算关系
对于正数,原码 = 补码。
对于负数,原码 = 补码(除了符号位)的各个位取反,加1。
补码1001 1100的原码为:1110 0100
补码1010 0110的原码为:1101 1010
补码1011 0000的原码为:1101 0000
<3> 点对点通信的数据发送和数据接收的两个函数的应用。
//将数据mode的一个字节发送到目标地址为0x0002的板子上。
basicRfSendPacket(0x0002, mode, );
//将板子接收到的数据读取1个字节放到Rx数组中。
basicRfReceive(Rx,,NULL);
4、代码实现
<1> 主节点“rf_set.c”的代码编写如下:
//↓↓↓↓↓↓↓请在选手此区域内补充代码↓↓↓↓↓↓↓ void RFInit()
{
rf.myAddr=0x0001; //本机地址
rf.panId=0x1000; //网络ID
rf.channel=10; //通信信道
rf.ackRequest=1; //应答信号
while(basicRfInit(&rf)==1);
basicRfReceiveOn();
} void main()
{
Init();
RFInit();
while(1)
{
if(key1==0)
{
DelayMS(10);
if(key1==0)
{
while(key1==0);
P1=0x00;
mode[0]++;
switch(mode[0])
{ case 0x30: break;
P1=0x00;
//补码1001 1100的原码为:1110 0100
case 0x31:
LED4 = 1;
LED3 = 1;
LED6 = 1;
LED5 = 0;
break; //补码1010 0110的原码为:1101 1010
case 0x32:
LED4 = 1;
LED3 = 1;
LED6 = 0;
LED5 = 1;
break; //补码1011 0000的原码为:1101 0000
case 0x33:
LED4 = 1;
LED3 = 1;
LED6 = 0;
LED5 = 1;
break;
}
basicRfSendPacket(0x0002, mode, 1);
if(mode[0]>=0x34)
{
mode[0]=0x30;
}
}
}
}
}
//↑↑↑↑↑↑↑请在选手此区域内补充代码↑↑↑↑↑↑↑
<2> 从节点"slave_node.c"的代码编写如下:
//↓↓↓↓↓↓↓请在选手此区域内补充代码↓↓↓↓↓↓↓ void RFInit()
{
rf.myAddr=0x0002; //本机地址
rf.panId=0x1000; //网络ID
rf.channel=10; //通信信道
rf.ackRequest=1; //应答信号
while(basicRfInit(&rf)==1);
basicRfReceiveOn();
} void main()
{
Init();
RFInit();
while(1)
{
if(basicRfPacketIsReady())
{
uint8 Rx[5]=0x00;
//basicRfReceive(Rx,5,NULL);
basicRfReceive(Rx,1,NULL);
P1=0x00;
switch(Rx[0])
{
case 0x30:
P1=0x00;
break;
//补码1001 1100的原码为:1110 0100
case 0x31:
LED4 = 0;
LED3 = 1;
LED6 = 0;
LED5 = 0;
break;
//补码1010 0110的原码为:1101 1010
case 0x32:
LED4 = 1;
LED3 = 0;
LED6 = 1;
LED5 = 0;
break;
//补码1011 0000的原码为:1101 0000
case 0x33:
LED4 = 0;
LED3 = 0;
LED6 = 0;
LED5 = 0;
break;
}
}
}
}
//↑↑↑↑↑↑↑请在选手此区域内补充代码↑↑↑↑↑↑↑
在编译和烧写代码的时候要注意,主节点的要把"slave_node.c"代码文件移除出工程,在把“rf_set.c”添加进来,然后编译、烧写。从节点也需要做相应的移除和添加代码文件。当代码分别烧写到两个Zigbee模块上,上电就可以实现题目的功能了。
<注1>:完整工程代码下载(百度云盘):https://pan.baidu.com/s/1bpxxNqf
<注2>:关于BasicRF更详细的资料,可以参考网络中《基于BasicRF的点对点无线双向控制LED灯案例分析》一文。
【技能大赛笔记01】Zigbee点对点按键控制程序开发的更多相关文章
- OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建
个人已经厌倦了Windows下的开发方式,于是决定转到Linux平台上来,当然我也知道这个转变会很艰辛,但是我还是要坚持.所以,后面的所有开发我都会基于Linux和Qt,先从开发环境的搭建开始做起,当 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup
2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- JS自学笔记01
JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】
转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
随机推荐
- 楼梯T-SQL:超越基础6级:使用CASE表达式和IIF函数
从他的楼梯到T-SQL DML,Gregory Larsen涵盖了更多的高级方面的T-SQL语言,如子查询. 有时您需要编写一个可以根据另一个表达式的评估返回不同的TSQL表达式的单个TSQL语句. ...
- java三级考试理论题
Java试卷 一.单项选择题: 1. 试题: 在WINDOWS环境下,ODBC在__A____中设置 A. 控制面板 B. 注册表 C. 浏览器 D. 写字板 2. 阅读以下描述: C <jsp ...
- Problem E: 分数类的输出
Problem E: 分数类的输出 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2699 Solved: 1227[Submit][Status][ ...
- Problem D: 来开个书店吧
某出版社可出版图书和磁带.其中图书按照每页的价格乘以页数进行定价,磁带根据每10分钟的价格乘以磁带录音的分钟数进行定价.请定义Publicatioin.Book.Tape以及BookStore四个类. ...
- 基于.net的通用内存缓存模型组件
谈到缓存,我们自然而然就会想到缓存的好处,比如: 降低高并发数据读取的系统压力:静态数据访问.动态数据访问 存储预处理数据,提升系统响应速度和TPS 降低高并发数据写入的系统压力 提升系统可用性,后台 ...
- java 以a为开头单词的词典查询示例
java中HashMap类表示为字典类,其中key,value一一对应的原则.因此是词典查询的首要工具.(HashMap字典类字面意思也可以看出~~) 程序思路: 程序开始前,应先创建一个字典文本用于 ...
- JAVA提高十二:HashMap深入分析
首先想说的是关于HashMap源码的分析园子里面应该有很多,并且都是分析得很不错的文章,但是我还是想写出自己的学习总结,以便加深自己的理解,因此就有了此文,另外因为小孩过来了,因此更新速度可能放缓了, ...
- ubuntu小技巧(不定期更新)
1.gedit打开windows保存的txt出现乱码 默认情况下,用ubuntu打开windows保存含有中文的txt文件时会出现乱码. 只需在终端运行以下两条命令则可解决. gsettings se ...
- maven项目打包运行出错问题汇总
maven项目打包时总会出现莫名其妙的错误,现总结一下. 打包方式:在maven项目底下运行cmd,输入mvn clean package,会自动按pom.xml的配置打成包.使用java -jar ...
- C# 链接MySql数据库
C# 链接MySql数据库只得注意的几点: 1.C#链接MySql数据库要在网上下载一个mysql-connector-net-6.0.4-noinstall.rar 这里面放的都是一堆dll .将 ...