|
楼主 |
发表于 2013-10-15 20:21:32
|
显示全部楼层
因为8位机一般不支持long long 但是都支持float 把数据转换成浮点,用浮点运算就可以了。再用浮点判断数据范围,之后把显示数据缩短到显示范围,点亮K/M,
void DisplayPrimartEnergy(void)
{
uint8_t dot, lit = INDICATE_OFF;
uint32_t value;
char string[9];
primartPosEpt = 999999900;
primartPosEpt *= scaleVoltage;
primartPosEpt *= scaleCurrent;
if (primartPosEpt < 1000000000)
{
lit |= KILO_INDICATE;
value = primartPosEpt / 10;
}
else
{
lit |= MILLION_INDICATE;
primartPosEpt /= 10000;
if (primartPosEpt < 100000000)
{
dot = 2;
value = primartPosEpt;
}
else if (primartPosEpt < 1000000000)
{
dot = 1;
value = primartPosEpt / 10;
}
else
{
dot = 0;
value = primartPosEpt / 100;
}
}
LED_NegativeSign(INDICATE_OFF);
LED_IndicatorLamp(lit);
sprintf(g_charBuffer, "%09.*lf", dot, value);
sprintf(string, "%.4s", g_charBuffer);
LED_DisplayString(g_displayBuffer[1], "%s", (void *) string);
sprintf(string, "%.5s", &g_charBuffer[4]);
LED_DisplayString(g_displayBuffer[2], "%s", (void *) string);
} |
|