Хотел бы поделиться некоторыми мыслями с "согражданами KAZUS.RU".
1. Не в моих правилах кого-нибудь обижать, но наш форум начинает превращаться в "Дом-2", где на конкретно заданные вопросы отвечают те, кому просто хочется "поболтать". Давайте решим так: если я могу опомочь, то отвечаю, если нет, то просто молчу.
2. Прошу отвечать конкретно на заданный вопрос. Не будьте Архангельским (автор книг по Delphi и C++Builder, умудряющемся описать 1+2 на 200 страницах).
3. Хотелось бы на форуме видеть не только ответы на вопросы, но и какие-то предложения, например, "вот у меня была такая задача, я сталкнулся с проблемами и так их решил".
4. К большому сожалению, на русском языке пока ещё нет литературы по STM32 (лично я кое-какие наработки отправил П.П.Редькину - автору очень хороших книг по ARM-контроллерам в надежде, что он напишет книгу по STM32), поэтому давайте будем опублиуовывать, хотя-бы на нашем форуме, всё, что может кому-нибудб потребоваться.
Пожалуй я покажу пример первым.
Программа расчитывает данные в формате float, их необходимо вывести на WH1602A.. Вот примерно так я решил эту задачу:
---------------------------------------------------------------------------------------------------------------------------
void SprintfFloat(float x, char n, char k) // Перевод float в строку char.
{
// n - кол-во знаков (в т.ч. десятичная точка и минус для
// отрицательного числа), k - разряд массива, куда выво-
// дится первая цифра (счёт начинается с "0"). Следует
// иметь ввиду, что разряды массива ниже k и выше k+n-1
// не затрагиваются, а так же целая часть числа float не
// не может быть длиннее 8 разрядов. Результат записывается в LCD2[].
unsigned char firstplace = false;
unsigned char negative;
unsigned char i, digit;
float place = 1.0;
double f0,f1;
negative = (x‹0); // Сохранить знак числа.
if(negative) // Запись знака числа.
{
LCD2[(int)k]='-';
n--;
k=k+1;
}
x = (x›0)?(x)
-x); // Преобразовать к абсолютному значению.
for(i=0; i‹15; i++) // Порядок числа.
{
if((x/place) ‹ 10.0) break;
else place *= 10.0;
}
for(i=0; i‹n; i++) // Записать число.
{
modf(x/place, &f0);
f1=f0;
for(digit=0; digit‹10; digit++)
{
if(f1==0) break;
else f1=f1-1;
}
if(digit | firstplace | (place == 1.0))
{
firstplace = TRUE;
LCD2[k+i]=(digit+0x30);
}
else LCD2[k+i]=' ';
if(place == 1.0)
{
k=k+1;
n--;
if(i‹n) LCD2[k+i]=',';
}
x -= (f0*place);
place /= 10.0;
}
if(LCD2[k+i-1]==',') LCD2[k+i-1]=32; // Чтобы число не оканчивалось точкой.
}
---------------------------------------------------------------------------------------------------------------------------
Переменные, которые не объявлены в данной ф-ции являются глобальными.
LCDx[x] - это массивы char, которые заполняются , а затем переносятся в индикатор.
Смысл данной ф-ции - это преобразовать машинное представление "float" в "человеческую" строку.
И ущё, я использую среду KeiluVision-4, но эта ф-ция будет работать во всех средах.