ZIGBBE自组网方式,将两个ZIGBBE盒进行组网
按键按下A将数据发送给B
B判断是否有ZIGBBE信号,如果有就接收信息
如果接收到的数据为开启跑马灯,则开启跑马灯
代码解析
按键按下LED3亮并且A发送数据给B
if(scan_key()) //有按键,则发送数据
{
halLedToggle(3); // 绿灯取反,发送指示 LED3
basicRfSendPacket(SEND_ADDR,"ZIGBEE TESTrn",13);
}
B节点判断是否有新的ZIGBBE信号,如果有就接收数据,并判断是否为需要的数据,如果是,则开启跑马灯
if(basicRfPacketIsReady()) // 判断有无收到zigbee信号
{
//halLedToggle(1);
len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); // 接收数据
if(pRxData[0]=='Z')
LSD();
}
跑马灯实现代码
void LSD()
{
uchar i;
uchar stat[4]={0x20,0x01,0x10,0x08};
P1DIR |= 0x39; //LED定义为输出
P1 &= ~0x39; //全部熄灭
while(1)
{
for(i=0;i<4;i++)
{
P1=stat
;
Delay(10000);
}
}
}
延迟函数实现
void Delay(uint n)
{
uint tt;
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
}
全部代码
#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
#include
#include
#define uint unsigned int
#define uchar unsigned char
uint8 scan_key();
void LSD();
void Delay(uint);
#define MAX_SEND_BUF_LEN 128
#define MAX_RECV_BUF_LEN 128
static uint8 pTxData[MAX_SEND_BUF_LEN]; //定义无线发送缓冲区的大小
static uint8 pRxData[MAX_RECV_BUF_LEN]; //定义无线接收缓冲区的大小
#define MAX_UART_SEND_BUF_LEN 128
#define MAX_UART_RECV_BUF_LEN 128
uint8 uTxData[MAX_UART_SEND_BUF_LEN]; //定义串口发送缓冲区的大小
uint8 uRxData[MAX_UART_RECV_BUF_LEN]; //定义串口接收缓冲区的大小
uint16 uTxlen = 0;
uint16 uRxlen = 0;
/*****点对点通讯地址设置******/
#define RF_CHANNEL 20 // 频道 11~26
#define PAN_ID 0x1A5B //网络id
//#define MY_ADDR 0xAC3A //本机模块地址
//#define SEND_ADDR 0x1015 //发送地址
#define MY_ADDR 0x1015 // 本机模块地址
#define SEND_ADDR 0xAC3A //发送地址
/**************************************************/
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
basicRfConfig.panId = PAN_ID; //zigbee的ID号设置
basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置
basicRfConfig.myAddr = MY_ADDR; //设置本机地址
basicRfConfig.ackRequest = TRUE; //应答信号
while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功
basicRfReceiveOn(); // 打开RF
}
/********************MAIN************************/
void main(void)
{
uint16 len = 0;
halBoardInit(); //模块相关资源的初始化
ConfigRf_Init(); //无线收发参数的配置初始化
while(1)
{
if(scan_key()) //有按键,则发送数据
{
halLedToggle(3); // 绿灯取反,发送指示 LED3
basicRfSendPacket(SEND_ADDR,"ZIGBEE TESTrn",13);
}
if(basicRfPacketIsReady()) // 判断有无收到zigbee信号
{
//halLedToggle(1);
len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); // 接收数据
if(pRxData[0]=='Z')
LSD();
}
}
}
/************/
#define key_io P1_2
uint8 keysta=0;
uint16 KeyTime = 0;
uint8 scan_key()
{
//按键新开
if(key_io == 0)
{
if(KeyTime<100)
{
KeyTime++;
keysta=1;
}
else
{
keysta=0;
}
halMcuWaitMs(10);
return 0;
}
else
{
KeyTime = 0;
if(keysta==0)
return 0;
else
keysta=0;
return 1;
}
}
void LSD()
{
uchar i;
uchar stat[4]={0x20,0x01,0x10,0x08};
P1DIR |= 0x39; //LED定义为输出
P1 &= ~0x39; //全部熄灭
while(1)
{
for(i=0;i<4;i++)
{
P1=stat
;
Delay(10000);
}
}
}
void Delay(uint n)
{
uint tt;
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
for(tt = 0;tt
}