Перевод двоичного числа в текс, для индикации на LCD

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Яrik
Родился
Сообщения: 5
Зарегистрирован: Пн янв 01, 2007 15:06:37
Откуда: Украина

Перевод двоичного числа в текс, для индикации на LCD

Сообщение Яrik »

С Новым Годом! :))

Люди, помогите пожалуйста с кодом, желательно на СИ(пользуюсь CodeVisionAVR). Сам недавно начал работаь с МК ATmega8. Нужно чтобы измеряное напряжения встроеным АЦП выводилось на дисплей LCD(HD44780).
Измерение я организовал, но проблема с выводом переменной, значение которой равно результату преобразования.

Зарание благодарен всем кто откликнется!!!
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

Всё очень просто в Си есть такая функция. которая преобразует число типа int со знаком в стороку.
void itoa (char *buf, int value, int base)
здесь *buf строка в которую выводится результат
value число которое нада преооброзовать
base это база т.е. может тебе в 2-й форме надо прога же не знает пишешь 10, для 1010101 пишешь 2 и т.д.

а на будущее найди справочник по Си в современных компиляторах по AVR большинство этих функций поддерживается. У меня есть Хэлп в пдф-формате на русском только он под ICCAVR, но основные функцие везде одинаковые.
Настоящий кот всегда либо голоден,
либо невыспался ...
Яrik
Родился
Сообщения: 5
Зарегистрирован: Пн янв 01, 2007 15:06:37
Откуда: Украина

Сообщение Яrik »

Спасибо moLCHec!!!

Сейчас буду пробывать.
А на счет Хэлпа, скинь пожалуйста на мыло.

P. S.
Неподскажеш как округлять значение полученные в результате вычислений.
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

если уже у готовой строки. то просто отображаешь на один символ меньше, чтоб учесть >5 то можно условие есче задать
например
if(buf[0]-0x30>=5)
{
if(buf[1]==0x39)
{
buf[2]++;
buf[1]=0x30;
}
else
{
buf[1]++;
}
}
Настоящий кот всегда либо голоден,
либо невыспался ...
Яrik
Родился
Сообщения: 5
Зарегистрирован: Пн янв 01, 2007 15:06:37
Откуда: Украина

Сообщение Яrik »

Еще раз благодарю за помощь.

Есть вопрос.
Почему проводя симуляцию в VMlab, у меня на дисплеи LCD невыводится дробная чать числа, только челая. Хотя использую
для перевода следущий код:
ftoa(v, 3, lcd_buffer).
Насколько я понял 3 - количество знаков после запитой.
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

char *ftoa(float f,int *status)
см. хэлп который я те скинул. функция возврыщает сроку, а status нужен для обработки ошибок.
Настоящий кот всегда либо голоден,
либо невыспался ...
Гость

Сообщение Гость »

Тут (http://www.atmel.ru/Articles/Atmel13.htm) нашел программу на ассемблере,наз. bcdfp, которая преобразует двоичные числа с плавающей точкой, в последовательность (строку) из 8 ASCII-символов, которая включает в себя ASCII-символ знака, шесть ASCII-символов значащих десятичных цифр и ASCII-символ точки. Но у меня его неполучается использоватьэтот код в CodeVisionAVR.
Выдает какието ошибки при компелировании.

Может, ктото растолкует, что и как.
Аватара пользователя
vladimir-19
Родился
Сообщения: 4
Зарегистрирован: Вс фев 04, 2007 06:46:49

Сообщение vladimir-19 »

Привет котятам и котам.
Собираю аналогичное устройство.
Столкнулся с похожей проблемой
Попытался решить следующим образом:

Код: Выделить всё

unsigned int volt; 
...
...
sprintf(lcd_buffer,"%2i.%iV   ",volt/100,volt%100);

но при выводе значения volt 1203 (предположим)
выводится 12.3 (выбрасывается нуль).
Как исправить?
_____
P.S. А мне можно хелп забросить
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

результат 1230%100 получается ведь 3 он 3 и пишет. ты бы сам стал писать 03???
Настоящий кот всегда либо голоден,
либо невыспался ...
Аватара пользователя
vladimir-19
Родился
Сообщения: 4
Зарегистрирован: Вс фев 04, 2007 06:46:49

Сообщение vladimir-19 »

Я понимаю что таким способом вывожу остаток деления на 100 после точки.
Если выводить %10 будет проще но мне нужна сотая часть. Если нет то каким способом лучше.

Заранее благодарен! :roll:
Аватара пользователя
moLCHec
Мявтор!
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.
Контактная информация:

Сообщение moLCHec »

Abakt я опечатался но сути это не меняет,
можно так
int a;
char str[16],str1[16];
.....
sprintf(str,"%i.",a/100);
if(a%100>9)
{
sprintf(str1,"%i",a%100); или utoa(str1,a%100,10);
}
else
{
sprintf(str1,"0%i",a%100);
}
strcat(str,str1);
Настоящий кот всегда либо голоден,
либо невыспался ...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»