当前位置:   article > 正文

移植0.96OLED屏到CC2530的zstack协议栈_cc2530 0.96

cc2530 0.96

本文讲述如何将一款0.96寸的OLED显示屏移植到CC2530上,并且使用ZSTACK的API来获取MAC地址和PANID,并将这样的16进制数转为字符串用于显示。
环境:ZStack-CC2530-2.5.1a

Oled图
  ZSTACK自带有LCD屏的代码,所以协议栈中有Hal_lcd.C和Hal_lcd.h文件。我们可以直接替换这两个文件。
链接:Hal_lcd.c和Hal_lcd.h
我的原理图。使用了IIC总线,具体引脚的设置可以根据自己的硬件来。
这里写图片描述
头文件以及条件编译的设置
这里写图片描述

#ifdef LCD_SUPPORTED
#include "hal_lcd.h"
#endif
  • 1
  • 2
  • 3

任务处理函数

      case ZDO_STATE_CHANGE:
          SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
          if(SampleApp_NwkState == DEV_ZB_COORD) //判定当前设备类型
          {
…………..
#ifdef LCD_SUPPORTED
            LCD_P8x16Str(0, 0, "Chinasofti");
            LCD_P8x16Str(0, 2, "Panid:0x");
            showPANID();
            showMacAddr();
            LCD_P8x16Str(0, 6, "Chan:");
            LCD_ShowNum(48,6,DEFAULT_CHANLIST,4);
#endif
…………..
          }
        break;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

showPANID();和showMacAddr();的具体实现:
  由于PANID和MAC地址都是16进制的数字,有AB…F这样的字符,所以不能按普通十进制数字显示,因此我将其拆分为4个二进制位,然后用显示字符的方法来显示。以下的实现方式可能不是很简便。。。。
  _NIB.nwkPanId存储了PANID。即便是在f8wConfig设置-DZDAPP_CONFIG_PAN_ID=0xFFFF,也可以显示协调器建立起网络后得到的PANID。aExtendedAddress数组中直接存放了MAC地址。

uint8 HexToChar(uint8 temp)
{
    uint8 dst;
    if (temp < 10){
        dst = temp + '0';
    }else{
        dst = temp -10 +'A';
    }
    return dst;
}
 void showPANID()
{
  uint8  tempStr[4];
  uint8 dstPan[5] = {0};
  uint8 i;
  int tempPan =  _NIB.nwkPanId;
  tempStr[3] = tempPan&0xf;
  tempStr[2] = (tempPan>>4)&0xf;
  tempStr[1] = (tempPan>>8)&0xf;
  tempStr[0] = (tempPan>>12)&0xf;
  for(i = 0; i<4;i++)
    {
        dstPan[i] = HexToChar(tempStr[i]);
    }
    dstPan[4] = '\0';
    LCD_P8x16Str(64, 2, dstPan);
}
 void showMacAddr()
{
  uint8  str[16];
  uint8 dstPan[17] = {0};
  uint8 i;
  
    for(i = 0; i<8;i++)
    {
        str[2*i] = aExtendedAddress[i]>>4;
        str[2*i+1] = aExtendedAddress[i]&0xf;
    }
      for(i = 0; i<16;i++)
    {
        dstPan[i] = HexToChar(str[i]);
    }
   dstPan[16] = '\0';
    LCD_P8x16Str(0, 4, dstPan);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

显示结果:
这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/309461
推荐阅读
相关标签
  

闽ICP备14008679号