Я получаю переменную с плавающей запятой от чтения и преобразования АЦП, мне нужно отображать цифры отдельно на 7-сегментном дисплее, поэтому мне нужны цифры отдельно.
переменная плавания = 12,34; // мне нужен способ конвертировать это
int rb [1,2,3,4]; // в это
Если бы это был int, было бы очень легко использовать подразделения и мод, но я думаю, что это должен быть более элегантный способ сделать это. не так ли?
Любая помощь приветствуется.
Спасибо за просмотр
Сначала вам нужно преобразовать число с плавающей точкой в строку, так как вы не сказали нам, какой компилятор используется, я полагаю, C30, Вот у вас есть код для ftoa (конвертировать float в строку). Если вы используете другой компилятор, например C18, посмотрите на их форумах, существует множество реализаций (или просто конвертируйте тот, что для C30).
unsigned char floatAsString[32];
ftoa(var, floatAsString);
Затем вам нужно создать свой массив, вам нужно проверить, есть ли у числа с плавающей точкой десятичные дроби или нет, чтобы пропустить точку для десятичных знаков:
int len;
if((int)var == var)
len = strlen(floatAsString);
else
len = strlen(floatAsString) - 1;
Затем, наконец, вы можете заполнить массив int;
int theArray[len];
unsigned char tmpBuffer[2];
tmpBuffer[1] = '\0';
int j;
int i;
unsigned char foundDot;
for(j = 0; j < len; j++)
{
if(foundDot)
i = j - 1;
else
i = j;
unsigned char theChar = floatAsString[j];
if(theChar == '.')
{
foundDot = 1;
continue;
}
tmpBuffer[0] = theChar;
theArray[i] = atoi(tmpBuffer);
}
Других решений пока нет …