basicRF双向灯光控制
题目:
实现基于BasicRF无线点对点通信的双向灯光控制,具体要求如下:
1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义。
<2> 按下节点A的SW1按键,松开后,向节点B发送1个字节的无线数据。节点B接收到新的无线数据后,判断该数据如果为0xa2,则切换节点B中D4灯的开关状态。
<3> 按下节点B的SW1按键,松开后,向节点A发送1个字节的无线数据。节点A接收到新的无线数据后,判断该数据如果为0xa2,则切换节点A中D4灯的开关状态。
注:<1> D4灯,连接到CC2530的P1_1引脚。
<2> SW1按键;连接到CC2530的P1_2引脚。
配置点对点无线通信的基本参数
#define RF_CHANNEL 17 // 频道 11~26
#define PAN_ID 0x1234 //网络id
配置节点信息
//节点A的地址信息
#define MY_ADDR 0x000a //本机模块地址
#define SEND_ADDR 0x000b //发送地址 //节点B的地址信息
//#define MY_ADDR 0x000b //本机模块地址
//#define SEND_ADDR 0x000a //发送地址
变量定义与函数声明
#define D4 P1_1
#define SW1 P1_2 unsigned char cmd = 0xa2; //无线发送的命令字
unsigned char dat = ; //无线接收的数据 void Init_Port(); //初始化D4灯与SW1按键
void Delay(unsigned char t); //普通延时函数
void Scan_Keys(); //按键扫描处理函数
void Recv_RF_Data(); //无线数据接收处理函数
端口初始化函数的实现
void Init_Port()
{
//初始化D4灯和D5灯的端口P1_1
P1SEL &= ~0x02; //P1_1为通用I/O端口
P1DIR |= 0x02; //P1_1端为输出口
//初始化SW1按键的端口P1_2
P1SEL &= ~0x04; //P1_2为通用I/O端口
P1DIR &= ~0x04; //P1_2端为输出口
P1INP &= ~0x04; //P1_2设置为上拉/下拉模式
P2INP &= ~0x40; //P1_2设置为上拉 D4 = ;
}
延时函数
void Delay(unsigned char t)
{
while(t--);
}
按键扫描函数
void Scan_Keys()
{
if(SW1 == )
{
Delay();
if(SW1 == ) //确定SW1按键按下
{
while(SW1 == ); //等待SW1按键松开
basicRfSendPacket(SEND_ADDR, &cmd, );
}
}
}
无线数据接收处理函数的实现
void Recv_RF_Data()
{
if(TRUE == basicRfPacketIsReady()) //接收到新的无线数据
{
basicRfReceive(&dat, , NULL); //读出1个字节数据到dat变量
if(dat == 0xa2) //判断接收数据是否为0xa5
{
D4 = ~D4; //切换D4灯的开关状态
dat = 0x00;
}
}
}
主函数的实现
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码 Init_Port(); //初始化D4灯和SW1按键的端口 while()
{
/* user code start */
Scan_Keys(); //扫描处理按键
Recv_RF_Data(); //接收处理无线数据
/* user code end */
}
}
basicRF双向灯光控制的更多相关文章
- 基于W5500+Yeelink的远程灯光控制设计
概述 工具:物联网云平台Yeelink DHT11温湿度传感器 W5500EVB 编译环境:Keil4 目的:通过以太网实时监控远程某个位置的温度和湿度 在W5500EVB端连接LED灯.通过W ...
- SPI、I2C、UART、I2S、GPIO、SDIO、CAN 简介
转自http://sanwen.net/a/fmxnjoo.html SPI.I2C.UART.I2S.GPIO.SDIO.CAN,看这篇就够了 总线 总线,总要陷进里面.这世界上的信号都一样,但是总 ...
- SPI、I2C、UART、I2S、GPIO、SDIO、CAN
总线,总线,总要陷进里面.这世界上的信号都一样,但是总线却成千上万,让人头疼. 总的来说,总线有三种:内部总线.系统总线和外部总线.内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连: ...
- 基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录
在5月12日Unite2017开发者大会上,米哈游技术总监兼美术指导贺甲进行了主题为次世代卡通渲染的演讲.一下为详细分享内容: 大家好,首先自我介绍一下,我叫贺甲,在米哈游担任技术总监和美术指导工作, ...
- 对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
SPI SPI(Serial Peripheral Interface:串行外设接口); SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SDO).串行数据输入(SDI).SPI总线可 ...
- SPI、I2C、I2S、UART、GPIO、SDIO、CAN、JTAG的区别及使用方法。
SPI 全称及由来:SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的. ...
- include的用法例子,以及include+merge的用法例子
[include+LinearLayout]的使用例子 AndroidIncludeLayout.java package com.AndroidIncludeLayout; import andro ...
- 软件产品案例分析----K米app
第一部分 调研.评测 1.1评测 1.1.1 第一次上手体验 1.1.2 bug 1.1.2.1 bug定义 1.1.2.2 栗子 1.1.2.2.1 A级 1.1.2.2.2 B级 1.1.2.2. ...
- USB Keyboard Recorder
catalogue . 引言 . Device Class Definition for Human Interface Devices (HID) . USB HID Report Descript ...
随机推荐
- 自定义vue组件之仿百度分页逻辑
<template> <div> <ul :total="total" :pageSize="pageSize" :pageNum ...
- SpringCloud入门(十): Config 统一配置中心
SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...
- 安卓menu的介绍与使用
菜单之前是用户点击系统的菜单键才展示出来的,后来这个键渐渐被移除,菜单变成了点击任意的view都可以展示.菜单非为3种: 1.Options menu and action bar 选项菜单和操作栏 ...
- numpy basic sheatsheet
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.NumPy 通常与 SciPy(Scien ...
- F. Count Prime Pairs
单点时限: 2.0 sec 内存限制: 512 MB 对于数组a,如果i≠j并且ai+aj是一个质数,那么我们就称(i,j)为质数对,计算数组中质数对的个数. 输入格式 第一行输入一个n,表示数组的长 ...
- 纯js时钟特效详细代码分析实例教程
电子时钟是网上常见的功能,在学习date对象和定时器功能时,来完成一个电子时钟的制作是不错的选择.学习本教程之前,读者需要具备html和css技能,同时需要有简单的javascript基础. 先准备一 ...
- Matlab学习-(4)
1. 函数 1.1 原始方法 之前我调用函数的方法是,首先写好函数文件,然后保存,然后在主函数中调用.这种方法的不足在于会导致你的工作目录的文件太多,从而导致很乱.在网上找了一些解决方法. 1.2 本 ...
- Category、load、initialize 源码讲解
今天深圳天气有暴风雨,没有事情干,趁着周末和平常晚上写一篇关于Category知识的梳理!可能针对平常只会知道些category基本结论知道的人有些帮助,写这篇博客会按照下面的目录结合实例以及Cate ...
- PHP 语法字符串函数 strcmp、strlen 使用及实现
说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别. 函数分类 用户自定义函数 say(); function say() { echo & ...
- 为什么redis是单线程的以及为什么这么快?
官网的说法 我们先来认真看一下官网的说法.翻译过来大意如下: CPU并不是您使用Redis的瓶颈,因为通常Redis要么受内存限制,要么受网络限制.例如,使用在一般Linux系统上运行的流水线Redi ...