![](https://img-blog.csdnimg.cn/img_convert/cccc07f8351c66e01b0c465ab72a725c.png)
控制端代码
#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 "hal_uart.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 25 // 频道 11~26
#define PAN_ID 0x1234 //网络id
#define MY_ADDR 0x1111 //本机模块地址
#define SEND_ADDR 0x8888 //发送地址
/**************************************************/
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define R1 P1_7
#define R2 P2_0
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.myAddr = MY_ADDR;
basicRfConfig.ackRequest = TRUE;
while(basicRfInit(&basicRfConfig) == FAILED);
basicRfReceiveOn();
}
/********************MAIN************************/
int key_flag=0;
void send_data(){
uint8 buf[1];
if(key_flag==1){
buf[0] = 'k';
basicRfSendPacket(SEND_ADDR, buf, 1);
}
if(key_flag==0){
buf[0] = 'g';
basicRfSendPacket(SEND_ADDR, buf, 1);
}
}
void key_scan(){
if(SW1==0){
halMcuWaitMs(10);
if(SW1==0){
key_flag=1-key_flag;
send_data();
while(SW1==0);
}
}
}
//LED灯闪烁
void blink(){
LED1=1;
for(int i=0;i<5;i++){
halMcuWaitMs(100);
if(SW1==0)break;
}
LED1=0;
for(int i=0;i<5;i++){
halMcuWaitMs(100);
if(SW1==0)break;
}
}
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
//P1SEL &= ~0X07;
P1DIR |= 0X83; // 1000 0011
P2DIR |= 0X01; // 0000 0001
while(1)
{
/* user code start */
key_scan();
if(key_flag==1){
blink();
}
else{
LED1=0;
}
/* user code end */
}
}
节点端代码
#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 "hal_uart.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 25 // 频道 11~26
#define PAN_ID 0x1234 //网络id
#define MY_ADDR 0x8888 //本机模块地址
#define SEND_ADDR 0x1111 //发送地址
/**************************************************/
#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define R1 P1_7
#define R2 P2_0
static basicRfCfg_t basicRfConfig;
int key_flag=0;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID;
basicRfConfig.channel = RF_CHANNEL;
basicRfConfig.myAddr = MY_ADDR;
basicRfConfig.ackRequest = TRUE;
while(basicRfInit(&basicRfConfig) == FAILED);
basicRfReceiveOn();
}
void key_scan(){
if(SW1==0){
halMcuWaitMs(10);
if(SW1==0){
key_flag=1-key_flag;
while(SW1==0);
}
}
}
void receiveData(){
uint8 buf[1];
if(basicRfPacketIsReady()){
basicRfReceive(buf, 1,NULL);
if(buf[0]=='k'){
R2 =1;
}
else if(buf[0]=='g'){
R2 =0;
}
}
}
//实现呼吸灯功能
void pwm(){
for(int i=0;i<100;i++){
for(int j=0;j<50;j++){
LED1 = 1;
halMcuWaitUs(i);
LED1 = 0;
halMcuWaitUs(100-i);
}
if(SW1==0) break; //按键按下是退出呼吸灯
}
for(int i=0;i<100;i++){
for(int j=0;j<50;j++){
LED1 = 0;
halMcuWaitUs(i);
LED1 = 1;
halMcuWaitUs(100-i);
}
if(SW1==0) break;
}
}
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
//P1SEL &= ~0X07;
P1DIR |= 0X83; // 1000 0011
P2DIR |= 0X01; // 0000 0001
while(1)
{
/* user code start */
receiveData();
key_scan();
if(key_flag==1){
R1 =1;
pwm();
}
else{
R1 =0;
LED1 = 0;
}
/* user code end */
}
}