zoukankan      html  css  js  c++  java
  • basicRF双向灯光控制

    题目:

    实现基于BasicRF无线点对点通信的双向灯光控制,具体要求如下:

    1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义。
    <2> 按下节点A的SW1按键,松开后,向节点B发送1个字节的无线数据。节点B接收到新的无线数据后,判断该数据如果为0xa2,则切换节点B中D4灯的开关状态。
    <3> 按下节点B的SW1按键,松开后,向节点A发送1个字节的无线数据。节点A接收到新的无线数据后,判断该数据如果为0xa2,则切换节点A中D4灯的开关状态。

    注:<1> D4灯,连接到CC2530的P1_1引脚。

    <2> SW1按键;连接到CC2530的P1_2引脚。

    配置点对点无线通信的基本参数

    #define RF_CHANNEL    17         // 频道 11~26
    #define PAN_ID        0x1234     //网络id 

    配置节点信息

    //节点A的地址信息
    #define MY_ADDR       0x000a     //本机模块地址
    #define SEND_ADDR     0x000b     //发送地址
    
    //节点B的地址信息
    //#define MY_ADDR     0x000b     //本机模块地址
    //#define SEND_ADDR   0x000a     //发送地址

    变量定义与函数声明

    #define D4  P1_1
    #define SW1 P1_2
    
    unsigned char cmd = 0xa2;       //无线发送的命令字
    unsigned char dat = 0;          //无线接收的数据
    
    void Init_Port();               //初始化D4灯与SW1按键
    void Delay(unsigned char t);    //普通延时函数
    void Scan_Keys();               //按键扫描处理函数
    void Recv_RF_Data();            //无线数据接收处理函数

    端口初始化函数的实现

    void Init_Port()
    {
      //初始化D4灯和D5灯的端口P1_1
      P1SEL &= ~0x02;     //P1_1为通用I/O端口
      P1DIR |= 0x02;      //P1_1端为输出口
      //初始化SW1按键的端口P1_2
      P1SEL &= ~0x04;     //P1_2为通用I/O端口
      P1DIR &= ~0x04;     //P1_2端为输出口
      P1INP &= ~0x04;     //P1_2设置为上拉/下拉模式
      P2INP &= ~0x40;     //P1_2设置为上拉
      
      D4 = 0;
    }

    延时函数

    void Delay(unsigned char t)
    {
      while(t--);
    }

    按键扫描函数

    void Scan_Keys()
    {
      if(SW1 == 0)
      {
        Delay(100);
        if(SW1 == 0)                        //确定SW1按键按下
        {
          while(SW1 == 0);                  //等待SW1按键松开
          basicRfSendPacket(SEND_ADDR, &cmd, 1);
        }
      }
    }

    无线数据接收处理函数的实现

    void Recv_RF_Data()
    {
      if(TRUE == basicRfPacketIsReady())    //接收到新的无线数据
      {
        basicRfReceive(&dat, 1, NULL);      //读出1个字节数据到dat变量
        if(dat == 0xa2)                     //判断接收数据是否为0xa5
        {
          D4 = ~D4;                         //切换D4灯的开关状态
          dat = 0x00;
        }
      }
    }

    主函数的实现

    void main(void)
    {
        halBoardInit();//选手不得在此函数内添加代码
        ConfigRf_Init();//选手不得在此函数内添加代码
    
        Init_Port();      //初始化D4灯和SW1按键的端口
          
        while(1)
        {
        /* user code start */
          Scan_Keys();    //扫描处理按键
          Recv_RF_Data(); //接收处理无线数据
        /* user code end */
        }
    }
  • 相关阅读:
    蒙特卡洛法(随即取样法) 数模 笔记
    【数模学习】Matlab 符号微积分 计算微分、雅可比矩阵、不定积分与定积分、求解微分方程
    Length of Last Word
    基于视频深度学习的人物行为识别 资料汇总
    3S比赛预定
    求解一元多次方程 牛顿迭代法
    LeetCode | Climbing Stairs
    LeetCode | Palindrome Number
    LeetCode | Merge Sorted Array
    LeetCode | Valid Palindrome
  • 原文地址:https://www.cnblogs.com/yuling520/p/12770200.html
Copyright © 2011-2022 走看看