毕业设计 DS18B20 多终端测温实验---求大神帮助,急急急!!!

多点水温采集显示系统设计(ZigBee)

一共用到4的ZigBee节点,一个为协调器,三个终端。将三个终端的温度发送到协调器上显示,但是ds18b20的测温搞不懂。
终端
void SampleApp_Send_P2P_Message( void )
{
byte str[4];
char strTemp[10];
byte temp;

temp = ReadDs18B20(); //读取温度数据
str[0] = temp/10+48;
str[1] = temp%10+48;
str[2] = ’ ';
str[3] = ‘\0’;

HalUARTWrite(0, “TEMP:”, 5); //终端通过串口输出提示信息
HalUARTWrite(0, str, 4);
HalUARTWrite(0, “\n”,1);

osal_memcpy(strTemp, “TEMP:”, 5);
osal_memcpy(&strTemp[5], str, 5);
HalLcdWriteString(strTemp, HAL_LCD_LINE_3); //LCD显示
Color =BLUE;
LCD_write_CN_string(63,50,“℃”);//LCD显示
//把温度数据无线发给协调器
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
2,
str,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
协调器
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
char strTemp1[10],strTemp2[10],strTemp3[10];
uint16 flashTime;

switch ( pkt->clusterId )
{
case SAMPLEAPP_P2P_CLUSTERID: //协调器收到数据通过串口或屏输出
osal_memset(strTemp1,0,10);
osal_memcpy(strTemp1,“TEMP1:”,5);
osal_memcpy(&strTemp1[5],pkt->cmd.Data,pkt->cmd.DataLength);
HalLcdWriteString(strTemp1,HAL_LCD_LINE_3);
Color =BLUE;
LCD_write_CN_string(63,50,“℃”);//LCD显示
HalUARTWrite(0, “TEMP1:”, 5); //提示接收到数据
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据
HalUARTWrite(0, “\n”, 1); // 回车换行
osal_memset(strTemp2,0,10);
osal_memcpy(strTemp2,“TEMP2:”,5);
osal_memcpy(&strTemp2[5],pkt->cmd.Data,pkt->cmd.DataLength);
HalLcdWriteString(strTemp2,HAL_LCD_LINE_4);
Color =BLUE;
LCD_write_CN_string(63,65,“℃”);//LCD显示
HalUARTWrite(0, “TEMP2:”, 5); //提示接收到数据
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据
HalUARTWrite(0, “\n”, 1); // 回车换行
osal_memset(strTemp3,0,10);
osal_memcpy(strTemp3,“TEMP3:”,5);
osal_memcpy(&strTemp3[5],pkt->cmd.Data,pkt->cmd.DataLength);
HalLcdWriteString(strTemp3,HAL_LCD_LINE_5);
Color =BLUE;
LCD_write_CN_string(63,80,“℃”);//LCD显示
HalUARTWrite(0, “TEMP3:”, 5); //提示接收到数据
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据
HalUARTWrite(0, “\n”, 1); // 回车换行
break;
case SAMPLEAPP_PERIODIC_CLUSTERID:
break;

case SAMPLEAPP_FLASH_CLUSTERID:
  flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
  HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
  break;

}
}
用这个程序,终端能测温也能发送给协调器,但是协调器上显示的是同一个温度跳着显示。
后来又参考了DHT11的多终端实验的程序,加了个编号,将程序改成了
终端
void SampleApp_Send_P2P_Message( void )
{
char temp[3], strTemp[7], strBuf[20];

ReadDs18B20(); //获取温度

//将温湿度的转换成字符串,供LCD显示
temp[0] = wendu_shi+0x30;
temp[1] = wendu_ge+0x30;
temp[2] = ‘\0’;
//将数据整合后方便发给协调器显示d
sprintf(strBuf,"%s%s", DeviceId, temp);

//输出到LCD显示
if(InitFlag == 0)//不变的数据只显示一次提高效率
{
InitFlag = 1;

Color    = BLACK;
Color_BK = WHITE; //背景色  
LCD_write_CN_string(7, 30, "终端一");
LCD_write_CN_string(7, 56, "温度:");
LCD_write_CN_string(64, 56, "℃");

}
Color = RED;
HalLcdWriteEnString( 49, 56, temp );

//把温度数据无线发给协调器
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
8,
(uint8 *)strBuf,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
协调器
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint8 strBuf[20],strTemp[3];
uint16 flashTime;

switch ( pkt->clusterId )
{
case SAMPLEAPP_P2P_CLUSTERID: //协调器收到数据通过串口或屏输出
osal_memcpy(strBuf, pkt->cmd.Data, pkt->cmd.DataLength);

  Color    = BLACK; 
  LCD_write_CN_string(16, 22,"设备"); 
  LCD_write_CN_string(58, 22,"温度");
  
  Color    = BLACK; 
  LCD_write_CN_string(7, 40,"终端一");
  LCD_write_CN_string(73, 40, "℃");
  
  Color    = BLUE; 
  LCD_write_CN_string(7, 57,"终端二");
  Color    = BLACK;       
  LCD_write_CN_string(73, 57, "℃");
  
  Color    = BLACK;  
  LCD_write_CN_string(7, 74,"终端三");
  LCD_write_CN_string(73, 74, "℃");

 strTemp[0] = strBuf[3];
 strTemp[1] = strBuf[4];
 strTemp[2] = 0;
 Color    = BLUE;
 if(strBuf[0] == 'R' || strBuf[0] == 'r')
{
  //LCD_write_EN_string(57, 40, strTemp);
}
 else if(strBuf[0] == 'E' || strBuf[0] == 'e')
 {
   LCD_write_EN_string(57, 23+(strBuf[1]-0x30)*17, strTemp);
 }
HalUARTWrite(0, "C:", 2);       //提示接收到数据
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据
HalUARTWrite(0, "\n", 1);         // 回车换行
  break;
case SAMPLEAPP_PERIODIC_CLUSTERID:
  break;

case SAMPLEAPP_FLASH_CLUSTERID:
  flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
  HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
  break;

}
}
这样虽然能显示了,但温度测不出来了。这个4明显不对,也不会变化。
毕业设计 DS18B20 多终端测温实验---求大神帮助,急急急!!!