字符串显示问题(方便初学者串口调试代码)

来源:互联网 发布:2016志鸿优化设计答案 编辑:程序博客网 时间:2024/06/13 02:27

void GenericApp_Send_wendu_Message(void)
{ byte str[10];

//char strTemp[10];
byte temp;

temp = ReadDs18B20(); //读取温度数据

str[0] = ‘1’; //这里是,节点模块编号,想必这里也就是徐老师跟我讲的数据包的格式了吧。这里就是Ascii码值了吧

str[1] = temp/10+48;//把温度数据转换成字符
str[2] = temp%10+48;
str[3] = ’ ‘;

先贴上以上代码,如上为什么需要加上48呢???(这应该属于C语言基础里面的东西,那么重新温习一遍吧!)
int型和char型通用的,但是int型转char型需要加上48。原因是因为‘0’的ASCII值为48,那么对他进行偏移之后自然就是相对应的字符类型的数据。
所以数组里面存放的是ASCII码值,即是51或者是’3’,而Haluartwrite函数只对字符串输出有效,所以自然要加上48了,这就是原因。

case: 该终端发过来的簇浩互相匹配的话:
if(1==pkt->cmd.Data[0]-48)
//HalUARTWrite(0,&pkt->cmd.Data[0],1);
//HalUARTWrite(0, “hello node 2\n”,sizeof(“hello node 1”)+1);
HalUARTWrite(0, &pkt->cmd.Data[1], pkt->cmd.DataLength-1); //输出接收到的数据
// HalUARTWrite(0, &pkt->cmd.Data[1], 1);
//HalUARTWrite(0, “\n”, 1); // 回车换行
//HalUARTWrite(0, &pkt->cmd.Data[2], 2);
HalUARTWrite(0, “hello”, 5);
uint8 wendu=(pkt->cmd.Data[1]-48)*10+pkt->cmd.Data[2]-48;
// HalUARTWrite(0, &wendu, 2);
if(wendu>fazhi)
P1_3=1;
else
P1_3=0;

}
}

也是同样的道理啊,之前加了48,现在如果要还原回去int的话,那么需要相应的减去48.但是还原完了之后,如果想要打印出48的话,那么还是得加上48,存放到一个字符串数组中,便于打印函数打印。节点匹配 if(1==pkt->cmd.Data[0]-48)也需要减去48,也是同样道理。

PS:之前对以上的概念不太清晰,导致老是调试出错。这样就实现了一个小小的智能控制(加上相应的驱动电路的话)。

原创粉丝点击