реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как вывести на LCD большое число, Не могу вывести число, большее 32767
zhevak
сообщение Aug 21 2008, 10:15
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(Tomade @ Aug 21 2008, 15:59) *
Короче, пойду покупать пистолет. help.gif


1. Сказку о двух лягушках расказать или знаете?

2. Решать задчи, которые уже знаешь как решать, -- не интересно. Намного интереснее решать те задачи, к которым даже не знаешь как подступится. Только такие задачи способствуют росту.

3. А судьи кто? Обычные люди (usual people) о конкретном человеке судят по тому, чего он достиг на данный момент. Продвинутые люди (advanced people) смотрят на то, какие задачи он себе ставит и как быстро он растет. Не обращайте внимание на то, что говорят первые. Идите своей дорогой. И будет Вам счастье!

ЗЫ
Здесь много грамотных людей, и они способны достаточно квалифицированно ответить на Ваши вопросы. Читайте книжки, посещайте форумы и уточняйте, что Вам не ясно.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 21 2008, 10:47
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Tomade @ Aug 21 2008, 15:59) *
АНТОХА: Надо не I, а L! (от long)
В вашем предыдущем письме было I. Впрочем, ставил и I, и l, и L - не помогает. В этих случаях совсем ничего не высвечивается.


Клевета! smile.gif Было маленькое L - l.
Почему не работает - не знаю, я не использую CVAVR.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Tomade
сообщение Aug 21 2008, 11:08
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 26-05-08
Пользователь №: 37 817



Антоха: Клевета! Было маленькое L - l.
Прошу прощения. Был сбой при передаче данных. smile.gif
zhevak: Читайте книжки, посещайте форумы и уточняйте, что Вам не ясно.
Потому и обратился сюда. В моём окружении программистов МК нет.

Сообщение отредактировал Tomade - Aug 21 2008, 11:09
Go to the top of the page
 
+Quote Post
sss992
сообщение Aug 21 2008, 11:16
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 8-02-06
Пользователь №: 14 125



можно так сделать:

...
unsigned long int x = 1000000;
...
sprintf(lcd_buffer,"%.0f",(float)x);
...

в С30 работает. а вообще почитайте описание sprintf и разберитесь с типами в Вашем компиляторе
Go to the top of the page
 
+Quote Post
Tomade
сообщение Aug 22 2008, 07:25
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 26-05-08
Пользователь №: 37 817



Ну вот, проблема решилась. Сделал следующее.
1.Сгенерировал начальные коды под микроконтроллер ATMega64L (было ATMega16).
2.В строке sprintf(lcd_buffer,"%u",x); вместо u поставил lu (как ранее советовал АНТОХА.
Всем спасибо.
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Aug 25 2008, 07:32
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Можно сделать несколько иначе - не используя громоздкую sprintf (на мелких МК не всегда работает, плюс памяти отжирает много) для трехзначной переменной (наращивается аналогично), например:
Код
//объявляем переменные
char j=1;
char buffer [4];
char S =0; //сотни
char D =0; //десяки
char E =0; //единицы
//функция преобразования
void decbin (unsigned int x) {
            
unsigned int i;
            
// Place your code here
for (i=x; i>=100; i=i-100) {S++;};
for (i=x-100*S; i>=10; i=i-10) {D++;};
for (i=x-100*S-10*D; i>=1; i=i-1) {E++;};
}

main {
....
while (1)
      {
      // Place your code here
   j++;
  
   decbin(j);
  
   if (S==0){                     //условия для того, чтобы отображалось не "005 "  а "5" - нолики убирают...
                buffer[0]=1;
            }
               else {
              buffer[0]=48+S;
                    };
  
    if ((D==0)&&(S==0)){  
                buffer[1]=1;
            }
               else {
              buffer[1]=48+D;
                    };                
      buffer[2]=48+E;

lcd_gotoxy(7,1);
lcd_puts(buffer);

if (j==150) {j=0;}; //считаем до 150

S=0;
D=0;
E=0;

delay_ms(100);
};

....
}

Для attiny2313 размер кода со sprintf около 92%, а таким способом - около 45%...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.0218 секунд с 7
ELECTRONIX ©2004-2016