刚刚进入传感器生产企业,对51单片机的认识只限于天祥老师的10天学会单片机水平,今天在论坛得到了很多朋友的帮助,解决了很多的困惑,目前我对如何通过串口通信发送带小数点的(要求精确到小数点后两位)数据有一些疑惑,希望各位朋友帮助。
1,【转换成整型,根据你要的浮点精度来处理,*10、*100,在接收端再转成小数。】这句话没看明白,请问这里的转换思路是什么,具体该用什么方法?如果目的是发送8位AD采集的数据,那如何将此8位char型数据根据此方法处理?
2,如果采用的8位以上的AD采集的数据,那应该如何处理?
由于我的水平不高,因此问题中可能会有描述不清的地方,麻烦各位朋友指出。
那么x=12.34。这是你要和结果了吧。
要是做四舍五入,就*1000,判断个位数。
类型转换 可以强制性转换
你的那个分离数么?分离就是除10的倍数,放大则反之。
感谢!你的回答我懂了,我现在理解小数部分是怎么转化的了,但是这个小数部分是怎么来的我还是比较困惑。
我学天翔老师视频的时候,学的是8位AD,就拿这个8位AD举例,采集1~5V电压有256个值,是不是我定义为char型的话,这256个值就都是整型,而我定义float型的话,这256个值就是带小数点的?
你收到的AD结果一定是整型的,你要 是为了提高精度,要强制转化成浮点的。这256个值要对应到电压上,一定有个系数吧,你的AD值要除这个系数,那么一除就会降低精度。所以要用浮点数。
char x;
float f;
f=(float)x;
我在天翔老师的书里看到一段代码
ad_vo=(float)ad_val*5.0/256;
请问/256和*5.0,分别代表什么意思?*5.0写成*5或/256写成/256.0有区别么?
5.0就是5V
严格意义上应该是写成256.0的。
数据类型还是隐性的转换。写成256应该也行。
*5.0/256.0表示每一位AD值代表的电压值。
懂了,AD采集的电压范围为0~5V,在*后面就写5.0,AD是8位的,在/后面就写256,这样得到了带小数点的值,然后我的目的是取小数点后两位,那就再将这个值乘以100,取其整数部分,通过串口发送到上位机,上位机再除以100,赋值到float变量中显示就可以了是吧?
还是在串口通信过程中,将数据/100和%100,通过串口发送数据包,在数据包中将/100和%100分别发送过去?