| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:求教高手:51单片机在浮点数处理上与PC的不同之处
只看楼主 加入收藏
iyouju
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-11-14
收藏
 问题点数:0 回复次数:0 
求教高手: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);
}

搜索更多相关主题的帖子: 解决方法 单片机 
2011-02-25 21:05
快速回复:求教高手:51单片机在浮点数处理上与PC的不同之处
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014335 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved