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 */
        }
    }
  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/yuling520/p/12770200.html
Copyright © 2011-2022 走看看