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

本文讲述如何将一款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

任务处理函数

      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;

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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值