移植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_SUPPORTEDLCD_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);
}
显示结果:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
