2022山东高职Zigbee点对点开发
题目
3、ZigBee 设备功能开发
使用两个蓝色 ZigBee 节点盒进行组网通讯,并分别命名为节点端和控制端。
节点端上安装双联继电器模块并外接风扇、照明灯。根据任务要求完成功能开发。
任务要求:
在控制端点击 SW1 键后,板上的 LED1 灯实现间隔 0.5 秒亮灭状态,同时
节点端的风扇转动。再次点击 SW1 键后,板上的 LED1 灯熄灭、风扇停止。
可以反复实现此功能。
在节点端点击 SW1 键后,板上 LED1 灯实现呼吸灯效果,同时照明灯亮起。
再次点击 SW1 键后,板上的 LED1 灯和照明灯都熄灭。可以反复实现此功
能。
控制端
#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 <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 11 // 频道 11~26
#define PAN_ID 2201 //网络id
#define MY_ADDR 0x0A //本机模块地址
#define SEND_ADDR 0x0B //发送地址
/**************************************************/
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();
}
void init(){
P1SEL &= ~ 0x1F;
P1DIR |= 0x1B;
P1 = 0;
}
unsigned char flag = 0;
void KeyScanner(){
if(P1_2 == 0){
while(P1_2 == 0);
flag = flag ==0?1:0;
P1_0 = 0;
}
}
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
init();
unsigned int t = 0;
while(1)
{
/* user code start */
KeyScanner();
if(flag == 1){
t ++;
halMcuWaitMs(1);
if(t == 500){
P1_0 = 1;
}
if(t == 1000){t = 0;
P1_0 = 0;
}
}
basicRfSendPacket(SEND_ADDR,&flag,1);
/* 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 <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL 11 // 频道 11~26
#define PAN_ID 2201 //网络id
#define MY_ADDR 0x0B //本机模块地址
#define SEND_ADDR 0x0A //发送地址
/**************************************************/
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();
}
void Read();
unsigned char read = 0;
void init(){
P1SEL &= ~ 0x1F;
P1DIR |= 0x1B;
P1 = 0;
P1SEL &= ~0x80;
P1DIR |= 0x80;
P2SEL &= ~ 0x01;
P2DIR |= 0x01;
P2 = 0;
}
unsigned flag = 0;
void KeyScanner(){
if(P1_2 == 0){
while(P1_2 == 0);
flag = flag == 0?1:0;
}
}
void Led1_HX(){
P1_7 = 1;
unsigned int time = 300,i,j;
for(i = 0;i < time;i++){
for(j = 0;j < i;j++){
P1_0 = 1;
KeyScanner();Read();
if(flag != 1)break;
}
for(j = 0;j <time - i;j++){
P1_0 = 0;
KeyScanner();Read();
if(flag != 1)break;
}
}
for(i = 0;i < time;i++){
for(j = 0;j < i;j++){
P1_0 = 0;
KeyScanner();Read();
if(flag != 1)break;
}
for(j = 0;j <time - i;j++){
P1_0 = 1;
KeyScanner();Read();
if(flag != 1)break;
}
}
}
void Read(){
basicRfReceive(&read,1,NULL);
if(read){
P2_0 = 1;
}else P2_0 = 0;
}
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
init();
while(1)
{
/* user code start */
Read();
KeyScanner();
if(flag)
Led1_HX();
else P1_7 =P1_0= 0;
/* user code end */
}
}
标签:P1,hal,Zigbee,void,点对点,flag,basicRfConfig,2022,include
From: https://www.cnblogs.com/Xin-chen/p/16914070.html