#c #embedded #fixed #point
#c #встроенный #исправлено #точка
Вопрос:
На моем TM4C123 работает мой ЖК-дисплей, и у меня работает printf.
Я пытаюсь сделать так, чтобы входные данные из левого столбца выглядели как выходные данные из правого столбца.
Я пытался извлечь каждую цифру из целого числа, а затем распечатать каждую из них, а затем поместить десятичную дробь где-нибудь там. Когда я извлекаю цифры, знак, похоже, совпадает с цифрой, и я просто не могу правильно отформатировать его.
outTestCaseType1 outTests1[13]={
{ 0, " = 0.000?r" }, // 0/1000 = 0.000
{ 4, " = 0.004?r" }, // 4/1000 = 0.004
{ -5, " = -0.005?r" }, // -5/1000 = -0.005
{ 78, " = 0.078?r" }, // 78/1000 = 0.078
{ -254, " = -0.254?r" }, // -254/1000 = -0.254
{ 999, " = 0.999?r" }, // 999/1000 = 0.999
{ -1000, " = -1.000?r" }, // -1000/1000 = -1.000
{ 1234, " = 1.234?r" }, // 1234/1000 = 1.234
{ -5678, " = -5.678?r" }, // -5678/1000 = -5.678
{ -9999, " = -9.999?r" }, // -9999/1000 = -9.999
{ 9999, " = 9.999?r" }, // 9999/1000 = 9.999
{ 10000, " = *.***?r" }, // error
{-10000, " = *.***?r" } // error
};
Мой код выглядит следующим образом:
void ST7735_sDecOut3(int32_t n) {
int32_t msd,nsd, lsd;
int32_t value;
value=n;
if (value > 999)
{
value = 999;
}
msd = value / 100;
value -= msd * 100;
nsd = value / 10;
value -= nsd * 10;
lsd = value;
printf("%d%d%d", msd, nsd, lsd);
}
Вывод на ЖК-дисплее выглядит следующим образом:
Я выбираю это столько, сколько могу, и это так близко, как я получил до сих пор. Может быть более простой способ, который я не вижу из-за своей неопытности, но я буду продолжать пытаться, потому что это все, что я могу сделать.
Любые подсказки или помощь будут оценены.
Ответ №1:
Это не использует вашу структуру данных или типы, но может быть легко адаптировано для соответствия.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int values[] = { 0, 4, -5, 78, -254, 999, -1000, 1234, -5678, -9999, 9999, 10000, -10000 };
enum { NUM_VALUES = sizeof(values) / sizeof(values[0]) };
for (int i = 0; i < NUM_VALUES; i )
{
int32_t value = values[i];
char integer[2];
char fraction[4];
int f_part = abs(value) % 1000;
int i_part = abs(value) / 1000;
char sign = ' ';
if (abs(value) > 9999)
{
strcpy(integer, "*");
strcpy(fraction, "***");
}
else
{
if (value < 0)
sign = '-';
sprintf(integer, "%d", i_part);
sprintf(fraction, "%.3d", f_part);
}
printf("m: = %c%s.%s?\rn", value, sign, integer, fraction);
}
return 0;
}
Пример вывода:
0: = 0.000?r
4: = 0.004?r
-5: = -0.005?r
78: = 0.078?r
-254: = -0.254?r
999: = 0.999?r
-1000: = -1.000?r
1234: = 1.234?r
-5678: = -5.678?r
-9999: = -9.999?r
9999: = 9.999?r
10000: = *.***?r
-10000: = *.***?r