❶ 关于C51单片机的小数点四舍五入处理
将你需保留的那一位的低一位加5之后舍掉即可
单片机内一般采用整数计算,如果要保留两位小数,需将原数据扩大100倍,小数点该向左移2位
18754/100=187·54 但单片机只能算整数,因此结果只能是187
因此计算时我们我们将被除数扩大100倍 相当于小数点向右移2位,1875400/ 100=18754
然后我们将计算结果的小数点再向左移回来2 位,即变成了 187.54 这就是定点小数的算法
如果18754/100我们只保留一位小数
我们可以这样处理 (18754*100+500)=1875900
1875900/100=18759
小数点左移2位,结果187.59 最后一位不考虑取187.5
但如果18755/100我们只保留一位小数
(18755*100+500)=1876000
1876000/100=18760
小数点左移2位,结果187.60 最后一位不考虑取187.6
看到了吧,4舍去了 5就入上去了
所以要保留三位小数,需将原来数据扩大1000倍,再除1000
所以要保留4位小数,需将原来数据扩大10000倍,再除10000
.......
扩大100倍或1000倍操作要放在除法之前,因除法才会导致小数丢失
需4舍5 入,将要保留的那一位数的低一位加5即可
当然这是低级算法,用C语言编程直接可以用浮点数,结果输出 时会自动四舍5 入
你所要做的是将浮点数转换为字符(用sprint函数)并控制输出数据的位数,格式控制类似于printf函数
❷ 51单片机上18B20如何在12864上显示两个小数点
temp <<= 8; //两个字节组合为1个字
temp = temp | a;----在1个字之中,最低四位是小数
f_temp = temp * 0.0625; --这里是除以16,就已经把小数的信息,都弄没了
temp = f_temp * 10 + 0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入
再乘以100,得出的也不是原来的、真正的小数。
❸ 51单片机如何把一个无限循环的小数保留到两位例如 1000/3209
选择菜单——选项——编辑,“自动设置小数点”。把前面的小对勾去掉即可
❹ 单片机C语言显示小数
给你个流程思路吧。ad采集电压信号,转换的数据是根据参考电压比较得到的。如果你的参考电压是5V,用的是12位AD,现在转换的结果为0x00ff,那么当前的电压就是0xo0ff*5000/4096
(mv)=311mv=0.311V,
至于怎么显示,那要看你的数码管位数以及要显示的数据范围。
可以用定小数点显示,也可以用动态小数点显示。思路都是把当前小数换成需要的整数,保留固定的有效数字。然后去显示小数点。思路就是这样。希望能帮到你。
❺ 关于单片机程序中小数点的的问题
这个要看单片机的平台以及关于舍入/进位的相关定义。
一般来说都是舍入为6。
❻ 51单片机怎么从键盘输入小数点啊
你的问题实质上是如何输入小数。将键盘上某个键定义为小数点,如果检测到这个键被按下,那么后面按的数字键都看成小数就可以了。如,定义星号是小数点,那么按下星号后,再按下2时,就乘以0.1,再按下4时,就乘以0.01,两个数加起来就是0.24了
❼ 单片机8位数码管怎么让其中一个带小数点12.345678
你这应该是一个循环程序,循环变量是 i ,来完成8位数码管显示的吧?Display_data[i+1] ,这应该是段码表数组吧?
数码管是共阳还是共阴的,加小数点的方法是不同的。
如下图是共阳的
程序
m=_crol_(m,1);
P2=m;
if(i==1)
P0=Display_data[i+1]+0x80;//加小数点
else
P0=Display_data[i+1];
delayms(2);