2022山东高职Zigbee点对点开发

1|02022山东高职Zigbee点对点开发

2|0题目

3、ZigBee 设备功能开发
使用两个蓝色 ZigBee 节点盒进行组网通讯,并分别命名为节点端和控制端。
节点端上安装双联继电器模块并外接风扇、照明灯。根据任务要求完成功能开发。
任务要求:

在控制端点击 SW1 键后,板上的 LED1 灯实现间隔 0.5 秒亮灭状态,同时
节点端的风扇转动。再次点击 SW1 键后,板上的 LED1 灯熄灭、风扇停止。
可以反复实现此功能。

在节点端点击 SW1 键后,板上 LED1 灯实现呼吸灯效果,同时照明灯亮起。
再次点击 SW1 键后,板上的 LED1 灯和照明灯都熄灭。可以反复实现此功
能。

2|1控制端

#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 */ } }

2|2节点端

#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 */ } }

__EOF__

本文作者~内个臣呐~
本文链接https://www.cnblogs.com/Xin-chen/p/16914070.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ~内个臣呐~  阅读(261)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示