Страница 1 из 1
Перевод двоичного числа в текс, для индикации на LCD
Добавлено: Пн янв 01, 2007 15:24:25
Яrik
С Новым Годом!
Люди, помогите пожалуйста с кодом, желательно на СИ(пользуюсь CodeVisionAVR). Сам недавно начал работаь с МК ATmega8. Нужно чтобы измеряное напряжения встроеным АЦП выводилось на дисплей LCD(HD44780).
Измерение я организовал, но проблема с выводом переменной, значение которой равно результату преобразования.
Зарание благодарен всем кто откликнется!!!
Добавлено: Вт янв 02, 2007 10:46:07
moLCHec
Всё очень просто в Си есть такая функция. которая преобразует число типа int со знаком в стороку.
void itoa (char *buf, int value, int base)
здесь *buf строка в которую выводится результат
value число которое нада преооброзовать
base это база т.е. может тебе в 2-й форме надо прога же не знает пишешь 10, для 1010101 пишешь 2 и т.д.
а на будущее найди справочник по Си в современных компиляторах по AVR большинство этих функций поддерживается. У меня есть Хэлп в пдф-формате на русском только он под ICCAVR, но основные функцие везде одинаковые.
Добавлено: Вт янв 02, 2007 13:38:43
Яrik
Спасибо moLCHec!!!
Сейчас буду пробывать.
А на счет Хэлпа, скинь пожалуйста на мыло.
P. S.
Неподскажеш как округлять значение полученные в результате вычислений.
Добавлено: Вт янв 02, 2007 16:32:29
moLCHec
если уже у готовой строки. то просто отображаешь на один символ меньше, чтоб учесть >5 то можно условие есче задать
например
if(buf[0]-0x30>=5)
{
if(buf[1]==0x39)
{
buf[2]++;
buf[1]=0x30;
}
else
{
buf[1]++;
}
}
Добавлено: Чт янв 04, 2007 13:54:48
Яrik
Еще раз благодарю за помощь.
Есть вопрос.
Почему проводя симуляцию в VMlab, у меня на дисплеи LCD невыводится дробная чать числа, только челая. Хотя использую
для перевода следущий код:
ftoa(v, 3, lcd_buffer).
Насколько я понял 3 - количество знаков после запитой.
Добавлено: Пт янв 05, 2007 13:35:08
moLCHec
char *ftoa(float f,int *status)
см. хэлп который я те скинул. функция возврыщает сроку, а status нужен для обработки ошибок.
Добавлено: Сб янв 06, 2007 02:25:05
Гость
Тут (
http://www.atmel.ru/Articles/Atmel13.htm) нашел программу на ассемблере,наз.
bcdfp, которая преобразует двоичные числа с плавающей точкой, в последовательность (строку) из 8 ASCII-символов, которая включает в себя ASCII-символ знака, шесть ASCII-символов значащих десятичных цифр и ASCII-символ точки. Но у меня его неполучается использоватьэтот код в CodeVisionAVR.
Выдает какието ошибки при компелировании.
Может, ктото растолкует, что и как.
Добавлено: Вс фев 04, 2007 07:23:20
vladimir-19
Привет котятам и котам.
Собираю аналогичное устройство.
Столкнулся с похожей проблемой
Попытался решить следующим образом:
Код: Выделить всё
unsigned int volt;
...
...
sprintf(lcd_buffer,"%2i.%iV ",volt/100,volt%100);
но при выводе значения volt 12
03 (предположим)
выводится 12.3 (выбрасывается нуль).
Как исправить?
_____
P.S. А мне можно хелп забросить
Добавлено: Вс фев 04, 2007 09:44:35
moLCHec
результат 1230%100 получается ведь 3 он 3 и пишет. ты бы сам стал писать 03???
Добавлено: Вс фев 04, 2007 13:45:07
vladimir-19
Я понимаю что таким способом вывожу остаток деления на 100 после точки.
Если выводить %10 будет проще но мне нужна сотая часть. Если нет то каким способом лучше.
Заранее благодарен!

Добавлено: Вс фев 04, 2007 17:16:17
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);