求教高手:51单片机在浮点数处理上与PC的不同之处
哪位高手能给一个解决方法!!!!!??????本人在学习单片机的过程中发现,用的单片机在浮点数处理上与PC机有很大的区别,以致于编写的一个为将浮点数的整数部分和前两位小数部分各位的数值分别存入一个unsigned char LED[8]的函数在我用的单片机上不能得出想要的结果,程序如下:
void Table(long degree,uchar LED[])
{uchar i;
ulong num;
if(degree>=0){LED[7]=0;degree=degree*100;num=degree;}
if(degree<0){LED[7]=10;degree=degree*(-100);num=degree;}
for(i=0;i<7;i++)
{LED=num%10;
num=num/10;
}
}
但在VC++中该算法可得想要的结果。
高手请联系QQ:645933858
/*************************************************************************************
// LED数码管显示所需函数
// 显示包括两位小数,有效数字位数最高可达7位,且可以显示负数
//
// 可调用的函数包括 void delay(uchar ,uchar); void Table(long num);
// void LED_Show();
// 同时定义了全局变量 : uchar Num_Modle[] //共阴极LED数字字模0~9和"-"
// 用到了138译码器(占用P2_2,P2_3,P2_4管脚)
*************************************************************************************/
#define prec 7
#define Dtime 100,95
#define uchar unsigned char
#define ulong unsigned long
uchar LED[8];
//延时函数
void delay(uchar i,uchar j)
{uchar x;
for(;i>0;i--)
for(;j>0;j--)
for(x=0;x<255;x++);
}
//共阴极LED数字字模0~9和"-"
uchar Num_Modle[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//uchar ERROR_Modle[]={0x79,0x70,0x70,0x3f,0x70,0x79,0x70,0x70,0x3f,0x70};
sbit HC138A=P2^2;
sbit HC138B=P2^3;
sbit HC138C=P2^4;
//sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3_3=P3^3;
//sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7;
//HC138译码器为LED数码管选位
void HC138_choice(uchar i)
{ switch(i)
{case 0:HC138C=1;HC138B=1;HC138A=1;break;
case 1:HC138C=1;HC138B=1;HC138A=0;break;
case 2:HC138C=1;HC138B=0;HC138A=1;break;
case 3:HC138C=1;HC138B=0;HC138A=0;break;
case 4:HC138C=0;HC138B=1;HC138A=1;break;
case 5:HC138C=0;HC138B=1;HC138A=0;break;
case 6:HC138C=0;HC138B=0;HC138A=1;break;
case 7:HC138C=0;HC138B=0;HC138A=0;break;
}
}
//8位LED数码管显示 调用时给出8位数字的UCHAR型数组
void LED_Show()
{uchar i;
uchar num;
for(i=0;i<8;i++)
{num=LED[i];
P0=Num_Modle[num];
if(i==2) P0=P0+0x80;
HC138_choice(i);
delay(4,4);
P0=0;
}
}
//生成对应的数组,以用于LED显示
void Table(long degree)
{uchar i;
ulong num;
if(degree>=0){LED[7]=0;degree=degree*100;num=degree;}
if(degree<0){LED[7]=10;degree=degree*(-100);num=degree;}
for(i=0;i<prec;i++)
{LED[i]=num%10;
num=num/10;
}
}
void main()
{Table(3.14);
do
{LED_Show();
}while(1);
}