最近用单片机做了一个计算器,把float型数据从24co2里读出来了
但是不知道怎么让他在lcd上显示float型数据
加入取到小数点后3位,那么将float数据乘以1000,显示的时候在相应的位置写入一个小数点就行了。
假如取到小数点后3位,那么将float数据乘以1000,显示的时候在相应的位置写入一个小数点就行了。
浮点数用科学计数法的形式存储, 即分成符号位, 底数位和指数位
如 10.0 的二进制表示为 1010.0, 科学表示法表示为: 1.01exp110, 即 (1+0*1/2+1*1/4)*2^3. 小数点每左移一位指数要加1, 每右移一位指数要减1.
其存储格式符合IEEE标准, 即
数据格式 符号位 底数位 指数位
单精度 float 1 23 8
楼主按照这个格式写个算法就可以了吧
要转换成string,然后显示
或者转换成BCD码,然后在7-段显示屏上显示
学习,UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
谢谢大家了
我这个问题解决了
这是我写的代码
void output()
{
if(n.fdata<0)
temp=0x41;
else
temp=0x40;
write_cmd(0x80+0x40);
write_date('-');
i=fabs(n.fdata);
c=0;
write_cmd(0x02);
while(i)
{
v[c]=i%10;
i/=10;
c++;
}
bz=c;
c++;
i=fabs(n.fdata);
if(n.fdata>0)
{
n.fdata-=i;
n.fdata*=10000;
}
else
{
n.fdata+=i;
n.fdata*=(-1);
n.fdata*=10000;
}
i=fabs(n.fdata);
p=4;
while(p!=0)
{
v[c]=i%10;
i/=10;
c++;
p--;
}
for(count=0;count
{
if(count!=bz)
{
if(count
{
flag=bz-1-count;
}
else
{
flag=c-1-(count-bz-1);
}
write_cmd(0x80+temp+flag);
write_date(v[count]+48);
}
if(count==bz)
{
write_cmd(0x80+temp+bz);
write_date('.');
}
}
}