CC2530无线点灯

12 篇文章 7 订阅
1 篇文章 0 订阅

CC2530无线点灯

代码目的:用A板使用按键SW1无线控制B板上的所有LED灯亮灭
涉及到的地方:BasicRF通讯、按键控制、灯的控制



一、主要使用的函数

1.无线发送函数

函数格式
uint8 basicRfSendPacket( uint16 destAddr , uint8 *pPayload , uint8 length )

uint16 destAddr: 发送目标的地址
uint8 *pPayload: 发送的数据
uint8 length: 发送格式的长度
注意:
1.uint8为unsigned char
2.uint16为unsigned short

2.无线接收函数

函数格式
uint8 basicRfReceive( uint8 *pRxData , uint16 len , int16 *pRssi )

uint8 *pRxData: 接收到的数据
uint16 destAddr: 数据的长度
int16 *pRssi: 接收信号的强度

3.判断无线包状态函数

函数格式
uint8 basicRfPacketIsReady( void )

使用函数时注意,先得判断是否有数据包发送过来之后再去使用无线接收函数。

4.演示

发送数据
代码如下(示例):

      Send_Data[0] = 0x01;
      basicRfSendPacket(0x1234,Send_Data,1);  //发送Send_Data数据给地址为0x1234的设备

接收数据
代码如下(示例):

      if(basicRfPacketIsReady())    //是否接收到无线RF发来的信号
      {
        basicRfReceive(Recv_Data,1,NULL);     //获取无线RF的数据
        if(Recv_Data[0] == 0x01)
        {
          ;                           //程序段
        }
        
      }

二、A板代码

代码如下(示例):

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>


static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   11;               // 频道
    basicRfConfig.channel     =   0xabcd;           //网络id 
    basicRfConfig.myAddr      =   0xaaaa;           //本机模块地址 
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}

#define SW1 P1_2
#define uint8_t unsigned char
#define uint32_t unsigned int
#define SEND_ADDR                 0xbbbb     //发送地址

/*
	Send_Data[32]:发送数据时使用的变量
	使用的位置:Scan_Key()中
	Key_Flag:判断是否再次点击   
	使用的位置:Scan_Key()中
*/
uint8_t Send_Data[32],Key_Flag=1;


// @brief        延迟函数
void  Delay(uint32_t  x)
{
  while(x--);
}


// @brief        按键初始化函数
void Init_Port()
{
  P1SEL |= 0x04;
  P1DIR &= ~0x04;
}

// @brief        按键扫描处理函数
void Scan_Key()     
{
  if(SW1 == 0)
  {
    Delay(100);
    if(SW1 == 0)
    {
      while(SW1 == 0);
      if(Key_Flag)
      {
      Key_Flag=0;
      Send_Data[0] = 0x01;
      basicRfSendPacket(SEND_ADDR,Send_Data,1);   //发送0x01给B板
      }
      else
      {
      Key_Flag=1;
      Send_Data[0] = 0x02;
      basicRfSendPacket(SEND_ADDR,Send_Data,1);   //发送0x02给B板
      }
    }
  }
}

/********************MAIN************************/
void main(void)
{
    halBoardInit();     //初始化其他功能
    ConfigRf_Init();    // 无线RF初始化
    Init_Port();        //初始化按键引脚
    while(1)
    {
      Scan_Key();       //扫描按键是否触发
    }
}

三、B板代码

代码如下(示例):

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>


static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   11;               // 频道
    basicRfConfig.channel     =   0xabcd;           //网络id 
    basicRfConfig.myAddr      =   0xbbbb;           //本机模块地址 
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}

#define uint8_t unsigned char

/*
	Recv_Data[32]:用于存放从RF收到的数据
	使用的位置:main()中
*/
uint8_t Recv_Data[32];


//初始化LED灯
void Init_Port()
{
  P1SEL &= ~0x1b;
  P1DIR |= 0x1b;
  P1 &= ~0x1b;
}
/********************MAIN************************/
void main(void)
{
    halBoardInit();     //初始化其他功能
    ConfigRf_Init();    // 无线RF初始化
    Init_Port();        //初始化LED灯引脚
    while(1)
    {
      if(basicRfPacketIsReady())    //是否接收到无线RF发来的信号
      {
        basicRfReceive(Recv_Data,1,NULL);     //获取无线RF的数据
        if(Recv_Data[0] == 0x01)
        {
          P1 |= 0x1b;                           //灯亮
        }
        if(Recv_Data[0] == 0x02) 
        {
          P1 &= ~0x1b;                           //灯灭
        }
      }
    }
}

总结

本文基于BasicRF包来对CC2530无线点灯,最主要的是了解包中提供函数的使用方法。

源文件下载/download
源文件查看基础代码在rf_set.c中,调用的函数在basic_rf.c中

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就很离谱吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值