上午
做了一下冲床屏幕的界面;
试验了一下浮点数的显示情况,貌似可以直接将浮点数传到屏幕显示;
下午
数据问题;
若要显示正确的浮点数,则需要传送该浮点数的十六进制表示;
但是在C语言中浮点数不支持位操作,无法通过位运算来读出其十六进制;
通过代码解决了这个问题;
注意到在keil里char类型是表示成十六进制的,而且可以用int类型表示其数值;
所以可以先按位取出0和1,再通过每8位转成int型赋值给char值;
最后四个char值即可还原浮点数的16进制;
下面是代码:
#include <stdio.h>
unsigned int ans;
unsigned int buf1[32];
unsigned char buf2[4];
void Turn_16(float h)
{
unsigned int ux, a, temp1 = 1;
int i;
ans = 0;
ux = *(unsigned int *)&h;
for (i = 31; i >= 0; i--)
{
a = (ux & (temp1 << i)) >> i;
buf1[31 - i] = a;
}
int j = 0;
ans += buf1[0];
for (i = 1; i <= 32; i++)
{
while (i % 8 == 0)
{
buf2[j] = ans;
ans = 0;
j++;
break;
}
ans *= 2;
ans += buf1[i];
}
}
int main()
{
float h = 3.6;
int i;
Turn_16(h);
char a, b, c, d;
a = buf2[0];
b = buf2[1];
c = buf2[2];
d = buf2[3];
for(i = 0; i < 32; i++) {
printf("%d ", buf1[i]);
}
printf("\n");
printf("%d %d %d %d\n", a, b, c, d);
return 0;
}
3.6 的浮点表示为:0x40666666;
代码运行结果: