完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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 全部代码 #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 |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4085 浏览 18 评论
1171浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2332浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 20:14 , Processed in 1.362253 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号