C51单片机浮点数运算

两个计数器得来的数值a,b
想将两个数做一个除法运算,浮点数保留三位,然后数码管输出显示
请问具体思路和需要注意哪些方面,能附上程序,将万分感激!!

因为没有电路,所以程序我就没法给你写,给你个思路.
第一,不知道你的a和b是什么类型的,如果是定义成浮点型,那么,可以这样写:
float f_Div = a/b;
如果两个有一个是整形的,那么,把整型强制转换成浮点型:
float f_Div = (float)a/(float)b;
注意,那个f_Div变量必须是float型,才能有小数产生

第二,你要进行显示,肯定要把各个位都取出来,这里面肯定有一个取模运算,就是"%",
对于浮点型,不运行取模运算的,所以,你必须把浮点型转换成整型,但是,不能强制转换,
比如: unsigned int I_Div = (unsigned int)f_Div;这是不可以的,你的小数部分就没有了.
所以,你必须要放大一定的倍数,根据你的要求,你是要保留三位,那么,这里还有个问题,你的
小数点之前有几位,决定了你小数点后面保留几位.
比如,你得到的结果是 1.2345,那么,你就保留1.23
如果你得到的结果是 12.345,那么,就保留12.3
如果你得到的结果是 123.45,你就只能保留123了
如果得到的结果是 0.123,你就只能保留 0.12

所以可以看出,你的浮点型结果整数部分有多少位,决定了你的小数能保留多少位,所以还要进行如下运算:

unsigned int i_Div = unsigned int)f_Div;;
unsigned char Dot_Bit = 0; //---这个变量用来表示在第几位上显示小数点,因为
//---通过下面的操作,已经把小数变成整数了
if(I_Div >= 100) //---表示前面有3个整数部分位
{
; //---那就没什么可操作的,unsigned int i_Div = unsigned int)f_Div;;就符合要求
}
else if (I_DIV >= 10) //---表示整数部分有2位
{
I_DIV = f_Div *10;
Dot_Bit = 1; //---在右数第2个地方显示小数点,也就是十位后显示小数点
}
else
{
I_DIV = f_Div *10;
Dot_Bit = 2; //---在右数第2个地方显示小数点,也就是最前面那位后面显示
}
void Display(void)
{

unsigned char Hundred = I_Div/100;
unsigned char TenBit = (I_Div/%00)/10;
unsigned char TenBit = I_Div%10;
....... //然后就开始显示了

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-02
浮点数本身就存在精度问题的
C51的float浮点类型只有七个重要的数字,在符合标准
IEEE-754浮点运算相比,整数运算是非常昂贵的CPU BR />长也并不适合大量的字符的计算方法,但很多的麻烦
第2个回答  2013-02-01
程序就没有了
比如算10/3 = 3.333
直接算肯定没小数的

这样就可以了
10*1000/3 = 3333 你吧每一位都取出来 3 3 3 3
然后你再显示的时候就显示3 . 3 3 3 就可以了

C51单片机浮点数运算
如果两个有一个是整形的,那么,把整型强制转换成浮点型:float f_Div = (float)a\/(float)b;注意,那个f_Div变量必须是float型,才能有小数产生 第二,你要进行显示,肯定要把各个位都取出来,这里面肯定有一个取模运算,就是"%",对于浮点型,不运行取模运算的,所以,你必须把浮点型转换成整型,但是,...

51单片机计算器(浮点数加减,数码管)
在这款51单片机计算器中,它专为实现浮点数加减运算而设计。基于最小系统,用户可以使用键盘输入1至5位的数字,包括小数,通过UP键(加)和DOWN键(减)进行运算。按下ENTER键则执行计算,BACK键用于清除显示并重新开始。显示结果通过两片74HC573驱动数码管显示。设计中,单片机的P2.0至P2.7连接到CON1...

51单片机通常如何输入浮点数?
一般是浮点数乘以10的n次方变成整数进行计算等处理,在输出的时候再次处理小数点。比如,输入的是1234.567,1234保存到2个unsigned char型变量里面,567保存到2个unsigned char型变量里面,如果是有符号浮点数,可以把符号单独保存到一个unsigned char里面,计算的时候所有的数都乘以1000,输出的时候单独输出...

51单片机 单精度浮点数 float 怎样输出
s3=b%10; \/\/小数

51单片机能不能计算浮点数,支不支持浮点运算?有人说能,有人说不能...
不能直接硬件计算浮点(就是所谓的FPU),只能通过程序库(调用函数)模拟完成,非常耗时!

51单片机用汇编语言怎么处理浮点数?比如做除法之后的得数,这个得数之后...
把小数乘以一定的值转换为整数,完成运算后再除以那个值还原原来的数,就是这样。直接用汇编写浮点数的运算,难度太大了,这样的话用C语言写好一些。

在51单片机的汇编环境里能处理浮点数吗?
51处理浮点数是非常慢的,建议轻易不要用,非要用小数的话,那可以用整数替代啊,可以标记为小数就行了。c可以做到汇编也可以。你可以到网上查一下有没有相应的例子。

51单片机汇编语言,两个整型数相除得浮点数算法
980*1000\/1200=896,896 mod 10=89余6,这样不就行了

51单片机处理浮点数乘除法
不慢不慢。你只要用C语言写程序,什么都不用管了。选个频率高的晶振就行了。11.0592M可以了。1000条指令不算多。一条指令平均占1.6字节。一般51单片机内部有4K的ROM,可以装下的。算一下大概需要2毫秒的样子。

51单片机C程序为什么不能声明浮点数?
因为51单片机不支持浮点运算

相似回答