Например TDA7294

Форум РадиоКот • Просмотр темы - Деление с остатком. CodeVision AVR с выводом на ЖКИ дробного
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 23:45:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Деление с остатком. CodeVision AVR с выводом на ЖКИ дробного
СообщениеДобавлено: Чт июл 19, 2012 14:10:19 
Потрогал лапой паяльник
Аватар пользователя

Карма: -19
Рейтинг сообщений: 2
Зарегистрирован: Пн сен 12, 2011 12:13:46
Сообщений: 351
Рейтинг сообщения: 0
Доброго времени суток!
Помогите правильно сделать функцию деления с остатком в CodeVision AVR, и чтобы результат вывести на ЖКИ функцией lcd_putchar
Моя задача, числа 1200 : 47 = 25.531 , с целым числом проблем нет , а вот остаток никак "не соответствует" математике.
Проект с протеусом приложил в архиве...
Вот моя попытка сделать вычисление таким способом
Код:
                       Numeric=((1200/47)*1000)+(1200%47);    //    1200 / 47 должно= 25.531 
                       
                          NumericA=1200/47;      //Получение целого
                          NumericB=1200%47;  // остаток   


Изображение

остаток определяю неправильно, прошу подсказать, как это нужно сделать....//radiokot


Вложения:
Комментарий к файлу: Архив
numeric.rar [40.96 KiB]
Скачиваний: 443
34.jpg [24.5 KiB]
Скачиваний: 5187


Последний раз редактировалось Garin Чт июл 19, 2012 17:25:38, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 14:19:54 
Мудрый кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 93
Зарегистрирован: Ср сен 07, 2011 21:40:30
Сообщений: 1798
Рейтинг сообщения: 0
остаток равен 25
Дробная часть частного 0, 531...........
Надо определиться что надо и подковать свои знания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 14:51:44 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Numeric=((1200/47)*1000)+(1200%47);

а это еще че такое? оО

Вам нужно выводить именно это число? Почему бы просто его не выводить?
Или вместо 1200 и 47 будут переменные? Предполагаю что под "остатком" вы имели ввиду дробную часть...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 14:58:34 
Потрогал лапой паяльник
Аватар пользователя

Карма: -19
Рейтинг сообщений: 2
Зарегистрирован: Пн сен 12, 2011 12:13:46
Сообщений: 351
Рейтинг сообщения: 0
BCluster писал(а):
Вам нужно выводить именно это число? Почему бы просто его не выводить?
Или вместо 1200 и 47 будут переменные? Предполагаю что под "остатком" вы имели ввиду дробную часть...

Это я для простоты обьяснения. Да вместо 1200 и 47 будут переменные.

Возможно словами мои пояснения не очень, а мой вариант кода вообще ни в красную армию.... :)))
и всё же , на калькуляторе 1200 : 47 это = 25.531.
А в моем коде это 1200 : 47 = 25.025 ????


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 15:31:42 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23911
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
А с чего Вы взяли, что остаток - это и есть дробная часть??? :shock:
Остаток еще и поделить нужно, что бы получить дробную часть.
25/47=0,5319...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 15:43:46 
Вымогатель припоя

Карма: 22
Рейтинг сообщений: 114
Зарегистрирован: Пн июн 14, 2010 13:07:29
Сообщений: 630
Откуда: Жуковский
Рейтинг сообщения: 0
1200 / 47 = 25.5319

long a = 1200 / 47; // целая часть = 25
long b = 1200 % 47; // остаток = 25
long c = b*1000 / 47; // дробная часть*1000 = 531

prinf("1200/47 = %d.%d", a, c); // "1200/47 = 25.531" конечно, с отбрасываем остальных знаков, а не с правильным округлением


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 16:04:24 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Эмс...
Код:
char string[20];
float a = 1200;
float b = 47;
float c = a / b;
sprintf( string, "a/b=%.3f", c );
lcd_puts ( string );


-- подправил в связи с реалиями кодвижна

оффтоп: почему в lcd_puts не сделали 2 аргумента, один из которых длина мне не ведомо... было бы удобнее


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 16:12:58 
Потрогал лапой паяльник
Аватар пользователя

Карма: -19
Рейтинг сообщений: 2
Зарегистрирован: Пн сен 12, 2011 12:13:46
Сообщений: 351
Рейтинг сообщения: 0
Огромное спасибо, с вашей помощью решено, освежил что дробная что остаток.
a_skr ваш конкретный пример , это то что я и спрашивал, спасибо.
Теперь мой код в любом виде отображает то что мне и требуется.
Код:
#include <mega8.h>
 #asm
   .equ __lcd_port=0x12 ;PORTD
 #endasm
 #include <lcd.h>
 unsigned long int  Numeric, NumericA, NumericB, a=1200, b=47;
 void main(void)
{
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
while (1)
      {       
                         Numeric=((a/b)*1000)+(((a%b)*1000)/b);    //    1200 / 47 = 25.531 

                          NumericA=a/b;                    //целая часть
                          NumericB=((a%b)*1000)/b;  // дробная часть

                               lcd_gotoxy(0,0); 
                                      lcd_putchar((Numeric/10000000)%10+0x30);     
                                      lcd_putchar((Numeric/1000000)%10+0x30);     
                                      lcd_putchar((Numeric/100000)%10+0x30);
                                      lcd_putchar((Numeric/10000)%10+0x30); 
                                      lcd_putchar((Numeric/1000)%10+0x30); 
                                       lcd_putsf(".");   
                                      lcd_putchar((Numeric/100)%10+0x30);
                                      lcd_putchar((Numeric/10)%10+0x30); 
                                      lcd_putchar(Numeric%10+0x30);   
                             lcd_gotoxy(0,1); 
                                            lcd_putsf(" celoe=");   
                                      lcd_putchar((NumericA/10000)%10+0x30); 
                                      lcd_putchar((NumericA/1000)%10+0x30); 
                                      lcd_putchar((NumericA/100)%10+0x30);
                                      lcd_putchar((NumericA/10)%10+0x30); 
                                      lcd_putchar(NumericA%10+0x30);
                               lcd_gotoxy(0,2);
                                      lcd_putsf("drobnaja =");   
                                      lcd_putchar((NumericB/10000)%10+0x30); 
                                      lcd_putchar((NumericB/1000)%10+0x30); 
                                      lcd_putchar((NumericB/100)%10+0x30);
                                      lcd_putchar((NumericB/10)%10+0x30); 
                                      lcd_putchar(NumericB%10+0x30);
                               lcd_gotoxy(0,3);
                                      lcd_putsf("1200/47=25.531");     
   

      };
}


Изображение


Вложения:
34.jpg [24.06 KiB]
Скачиваний: 5296
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 16:18:33 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я рад конечно что получилось )) На sprintf памяти не хватает?) Получше бы выглядело )
Либо сделайте какой-то свой аналог и вынесите в отдельную функцию в которую будете передавать указатель на строку и ваше число, а потом выводить lcd_puts()


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ.
СообщениеДобавлено: Чт июл 19, 2012 17:23:54 
Потрогал лапой паяльник
Аватар пользователя

Карма: -19
Рейтинг сообщений: 2
Зарегистрирован: Пн сен 12, 2011 12:13:46
Сообщений: 351
Рейтинг сообщения: 0
BCluster для моей задумки этого пока хватает (день умножения и деления, не прошел зря :twisted: )
спасибо :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ дроб
СообщениеДобавлено: Пт июл 20, 2012 07:51:56 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Дело хозяйское - но я бы рекомендовал сразу приучаться делать правильно))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Деление с остатком. CodeVision AVR с выводом на ЖКИ дроб
СообщениеДобавлено: Пт июл 20, 2012 09:47:11 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
А если для printf-овской компании мало места, то я бы порекомендовал взять за основу itoa, только заполнял бы буфер заведомо достаточного размера с конца и не ставил бы reverse в конце подпрограммы.
Перед преобразованием заполнить буфер пробелами, функция преобразования остановится, когда будет 0 и начало останется пробелами. Эта функция может возвращать индеск буфера, который она заполнила последним, это будет первый знак числа. Если нужно выводить без фиксированной ширині поля, то начинать с этого индекса.
После чего при выводе целого числа уже всё в порядке, а при выводе числа с фикс. точкой нужно отсчитать от конца буфера заданное число символов (три для данного примера) и в предыдущий символ вставить точку, а все перед ним сдвинуть ближе к началу буфера.
Получится довольно компактно и универсально.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y