📄 app.i
字号:
} __ds18b20_scratch_pad;
unsigned char ds18b20_select(unsigned char *addr);
unsigned char ds18b20_read_spd(unsigned char *addr);
float ds18b20_temperature(unsigned char *addr);
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,
unsigned char resolution);
#pragma used-
#pragma library ds18b20.lib
unsigned char app_TxBuffer[20];
unsigned char app_RxBuffer[20];
unsigned char app_FCF;
unsigned char app_RequestOrAck;
unsigned char wendu[9];
unsigned char app_ReceiveTemperature=0x00;
unsigned char Temperature[10]={"115.00125"};
/***********************************************************************
* 应用层系统初始化函数
************************************************************************/
void app_SysInit(void)
{
if( 0x03 == 0x01 )
{
nwk_CreatNetwork();
app_PermitJoinIn();
}
if( 0x03 == 0x03 )
{
nwk_JoinInNetwork();
DS18B20_Init();
ds18b20_temperature(0);
}
}
/***********************************************************************
* 清空应用层发送缓冲区
************************************************************************/
void app_TxBuffer_Clear(void)
{
memset(app_TxBuffer,'',20);
}
/***********************************************************************
* 清空应用层接收缓冲区
************************************************************************/
void app_RxBuffer_Clear(void)
{
memset(app_RxBuffer,'',20);
}
/***********************************************************************
* 应用层允许接收 (只对协调器有效)
************************************************************************/
void app_PermitJoinIn(void)
{
nwk_PermitJoinIn();
}
/***********************************************************************
* 应用层退出网络 (只对终端节点有效)
************************************************************************/
void app_LeaveNetwork(void)
{
nwk_LeaveNetwork();
}
/***********************************************************************
* 请求终端节点发送温度数据 (只对协调器有效)
************************************************************************/
void app_RequestTemperature(void)
{
unsigned char i;
app_FCF = 0x01;
app_RequestOrAck = 0x01;
app_TxBuffer[0] = app_FCF;
app_TxBuffer[1] = app_RequestOrAck;
for(i=0;i<20 ;i++)
{
if(neighbor[i].Avail)
{
PORTE |= (1<<2 );
rfTxInfo.destAddr = neighbor[i].ShortAddr;// 发送的目的地址
nwk_PackData(app_TxBuffer,2);
delay_ms(1000);
if(app_ReceiveTemperature) //成功接受节点温度信息
{
app_ReceiveTemperature = 0x00;
app_Send_Temperature_to_PC(wendu,i);
}
else //认为终端节点丢失,从邻居表中删除其信息,回收分配给它的 16 bit 地址
{
nwk_DeleteNeighborTable( neighbor[i].ShortAddr );
PORTE ^= (1<<3 );
}
PORTE &= ~(1<<2 );
delay_ms(200);
}
}
app_TxBuffer_Clear();
}
/***********************************************************************
* 请求终端节点发送温度数据的响应 (只对终端节点有效)
************************************************************************/
void app_RequestTemperature_ACK(void)
{
unsigned char i;
float temp;
app_FCF = 0x01;
app_RequestOrAck = 0x02;
app_TxBuffer[0] = app_FCF;
app_TxBuffer[1] = app_RequestOrAck;
temp=ds18b20_temperature(0);
ftoa(temp,5,Temperature); //转换浮点数temp为字符串temp_char,其中第二位参数指定四舍五入保留小数位(最多五位)。
for(i=0;i<10;i++)
{
app_TxBuffer[i+2] = Temperature[i];
}
rfTxInfo.destAddr = rfSettings.pRxInfo->srcAddr;
nwk_PackData(app_TxBuffer,11);
}
void app_DriveNoteOut(void)
{
unsigned char i;
for(i=0;i<20 ;i++)
{
if(neighbor[i].Avail)
{
nwk_DriveNoteOut(neighbor[i].ShortAddr);
}
}
}
void app_SendData(void)
{
}
void app_PackData(void)
{
}
/***********************************************************************
* 应用层解包函数
************************************************************************/
void app_UnPackData(unsigned char *pPayload, unsigned char length)
{
unsigned char temp0,temp1,j;
temp0 = *pPayload++;
switch (temp0)
{
case 0x02:
{
break;
}
case 0x01: // 网络层命令
{
temp1 = *pPayload++;
switch (temp1)
{
case 0x01: // 请求命令
{
PORTD |= (1<<7 );
//发送温度信息给协调器
app_RequestTemperature_ACK();
PORTD &= ~(1<<7 );
Sleep();//休眠模式:掉电模式
break;
}
case 0x02: // 命令响应
{
for(j=0;j<9;j++)
{
wendu[j] = *pPayload++;
}
//接收温度信息成功标志位置1
app_ReceiveTemperature = 0x01;
break;
}
default:
break;
}
}
default:
break;
}
}
void app_Send_Temperature_to_PC(unsigned char *temp,unsigned char id)
{
unsigned char str_USART[34];
unsigned char *str_USART_temp="";
unsigned char length=0;
unsigned char i;
//str_USART[0]='C';
str_USART[0]=0x43;
for(i=0;i<8;i++)
{
sprintf(str_USART_temp, "%x",neighbor[id].IEEEAddr[i]);
//sprintf(str_USART_temp, "%x",rfSettings.pRxInfo->srcIEEE[i]);
length = strlen(str_USART_temp);
if(length==2)
{
str_USART[3*i+1] = *str_USART_temp++;
str_USART[3*i+2] = *str_USART_temp;
str_USART[3*i+3] = ' ';
}
else if(length==1)
{
str_USART[3*i+1] = '0';
str_USART[3*i+2] = *str_USART_temp;
str_USART[3*i+3] = ' ';
}
else if(length==0)
{
str_USART[3*i+1] = '0';
str_USART[3*i+2] = '0';
str_USART[3*i+3] = ' ';
}
}
//length = strlen(temp);
length = 9;
for(i=0;i<length;i++)
{
str_USART[i+24] = *temp++;
}
USART0_Send_Str(str_USART);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -