点对点通信实现跑马灯

简介: 点对点通信实现跑马灯内容简介代码解析全部代码


内容简介



ZIGBBE自组网方式,将两个ZIGBBE盒进行组网

按键按下A将数据发送给B

B判断是否有ZIGBBE信号,如果有就接收信息

如果接收到的数据为开启跑马灯,则开启跑马灯


代码解析



按键按下LED3亮并且A发送数据给B

 if(scan_key())   //有按键,则发送数据
       {           
            halLedToggle(3);       // 绿灯取反,发送指示  LED3
            basicRfSendPacket(SEND_ADDR,"ZIGBEE TEST\r\n",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[i];
      Delay(10000);
    }
  } 
}

延迟函数实现

void Delay(uint n)
{
  uint tt;
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;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 <stdio.h>
#include <string.h>
#include  <stdarg.h>
#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 TEST\r\n",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[i];
      Delay(10000);
    }
  } 
}
void Delay(uint n)
{
  uint tt;
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
  for(tt = 0;tt<n;tt++);
}



相关文章
|
网络协议 Linux Unix
已完成--基于LINUX内核中的TCP/IP的核心过程分析
在我的博客中的《如何从应用程序进入linux内核》日志中我详细分析了Unix的socket的创建、发送、接收、关闭的过程,而你看到下边这些文章是基于IPV4的追踪分析的过程。从围绕着服务器端的socket的建立--监听--接收连接--客户端发送连接请求--与服务器对接--数据接收--数据发送整个过程为主线分析。
621 0
|
4天前
|
人工智能 安全 测试技术
|
6天前
|
云安全 人工智能 安全
阿里云 Agentic SOC 位居 IDC MarketScape安全运营智能体2026领导者类别
以 Agentic AI 重构安全运营闭环,阿里云云安全在产品能力与市场份额
1193 3
|
7天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
730 12
|
6天前
|
数据采集 机器学习/深度学习 人工智能
田间杂草定位与检测4200张YOLO智慧农业数据集分享
本数据集含4200张真实农田图像,YOLO格式,单类别(杂草)高质量标注,覆盖多作物、多光照、多生长阶段等复杂场景,专为智慧农业杂草检测与智能除草设备研发设计,支持YOLOv5/v8/v10等主流模型训练。
371 94
|
10天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
4天前
|
Web App开发 数据采集 人工智能
|
11天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
390 0