【使用竞赛通用工程实现题目效果(带注释)


大棚种植区改造过程中提出新的需求,要求部分设备需要支持短距离无线 通讯控制风扇功能,该功能需要选手通过编程自行设计并实现。

任务要求:

  1. 使用两块黑色 ZigBee 开发板,分别命名为 A、B 并用标签纸贴上。
  2. 为板 B 上装一个继电器并连接一个风扇。
  3. 点击板 A 的 SW1 按键可以控制板 B 连接的风扇的启动或停止。

完成以上任务后请做以下步骤:

  • 开发完成后请将可以运行此要求的板 A、板 B 安装到答题区,通上电等 待裁判评判。
  • 请将完整的工程项目文件保存到U盘“提交资料\模块C\题2”目录下。

A板

(点击按键SW1->按键扫描消抖->等待按键松开->给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 "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

/*****点对点通讯地址设置******/
#define RF_CHANNEL                11         // 频道 11~26
#define PAN_ID                    0x1111     //网络id 
#define MY_ADDR                   0x2222     //本机模块地址
#define SEND_ADDR                 0x3333     //发送地址
/**************************************************/
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();
}


#define D3  P1_0
#define D4  P1_1
#define D5  P1_3
#define D6  P1_4
#define SW1 P1_2
#define JD  P1_7

void init_All()
{
  MCU_IO_DIR_OUTPUT(1,0);
  MCU_IO_DIR_OUTPUT(1,1);
  MCU_IO_DIR_OUTPUT(1,3);
  MCU_IO_DIR_OUTPUT(1,4);
  MCU_IO_DIR_OUTPUT(1,7);
  D3=D4=D5=D6=JD=0;
  MCU_IO_DIR_INPUT(1,2);
  
}

unsigned char data_send;//定义一个字符型的发送变量
unsigned char deta_recv;//定义一个字符型的接收变量

/********************MAIN************************/
void main(void)
{
  halBoardInit();//选手不得在此函数内添加代码
  ConfigRf_Init();//选手不得在此函数内添加代码
  init_All();
  while(1)
  {
    /* user code start */
    if(SW1==0)//按键扫描
    {
      halMcuWaitMs(100);//延时100毫秒
      if(SW1==0)
      {
        while(!SW1);
        data_send=1;//发送变量赋值1
        basicRfSendPacket(SEND_ADDR,&data_send,1);//发送地址+发送内容+内容字节
      }
    }
    /* user code end */
  }
}

B板

(时刻接收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 "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

unsigned char data_send;//定义一个字符型的发送变量
unsigned char deta_recv;//定义一个字符型的接收变量
/*****点对点通讯地址设置******/
#define RF_CHANNEL                11         // 频道 11~26
#define PAN_ID                    0x1111     //网络id 
#define MY_ADDR                   0x3333     //本机模块地址
#define SEND_ADDR                 0x2222     //发送地址
/**************************************************/
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();
}



#define D3  P1_0
#define D4  P1_1
#define D5  P1_3
#define D6  P1_4
#define SW1 P1_2
#define JD  P1_7

void init_All()
{
  MCU_IO_DIR_OUTPUT(1,0);
  MCU_IO_DIR_OUTPUT(1,1);
  MCU_IO_DIR_OUTPUT(1,3);
  MCU_IO_DIR_OUTPUT(1,4);
  MCU_IO_DIR_OUTPUT(1,7);
  D3=D4=D5=D6=JD=0;
  MCU_IO_DIR_INPUT(1,2);
  
}

unsigned char data_send;
unsigned char data_recv;

/********************MAIN************************/
void main(void)
{
  halBoardInit();//选手不得在此函数内添加代码
  ConfigRf_Init();//选手不得在此函数内添加代码
  init_All();
  while(1)
  {
    /* user code start */
    if(basicRfPacketIsReady())//更新接收(如果有信息发出并接收)
    {
      basicRfReceive(&data_recv,1,NULL)//接收到数据记录为data_recv
      if(data_recv==1)//如果接收到的数据为1
      {
        JD^=1;//切换JD的状态
      }
    }
    /* user code end */
  }
}

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐