所以我在一个工作正常的 AVR 微控制器上做了这个功能,但是当我打电话时
display(1)
4 位显示屏上显示的值是“1.099”而不是“1.000”。
void display(float n) {
int8_t i, digit_pos=0;
unsigned short digit;
PORTC &= ~((1<<MUX_A2) | (1<<MUX_B2) | (1<<MUX_E2));
ENABLE_DISPLAY;
for (i=3;i>=-3;i--)
{
digit = n/pow(10,i);
digit = digit%10;
if (digit==0&&i>0&&digit_pos==0)
continue;
if (digit_pos-i<3)
if (i==0)
digit += 10;
PORTD = SegCode[digit];
PORTC = ((PORTC & (~(3<<MUX_A2))) | (digit_pos<<MUX_A2)) & ~(1<<MUX_E2);
PORTC |= (1<<MUX_E2);
if (digit_pos==3)
break;
else
digit_pos++;
}
PORTD=0x00;
}
应该显示的“n”变量是一个浮点数,那么为什么精度会从第二个小数开始丢失
digit = n/pow(10,i);
digit = digit%10;
是因为类型转换吗?是因为某些 8 位 RISC 处理器的限制吗?