Перейти к содержанию
    

Как вывести на LCD большое число

Короче, пойду покупать пистолет. :help:

 

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

 

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

 

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

 

ЗЫ

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АНТОХА: Надо не I, а L! (от long)

В вашем предыдущем письме было I. Впрочем, ставил и I, и l, и L - не помогает. В этих случаях совсем ничего не высвечивается.

 

Клевета! :) Было маленькое L - l.

Почему не работает - не знаю, я не использую CVAVR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Антоха: Клевета! Было маленькое L - l.

Прошу прощения. Был сбой при передаче данных. :)

zhevak: Читайте книжки, посещайте форумы и уточняйте, что Вам не ясно.

Потому и обратился сюда. В моём окружении программистов МК нет.

Изменено пользователем Tomade

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

...

unsigned long int x = 1000000;

...

sprintf(lcd_buffer,"%.0f",(float)x);

...

 

в С30 работает. а вообще почитайте описание sprintf и разберитесь с типами в Вашем компиляторе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот, проблема решилась. Сделал следующее.

1.Сгенерировал начальные коды под микроконтроллер ATMega64L (было ATMega16).

2.В строке sprintf(lcd_buffer,"%u",x); вместо u поставил lu (как ранее советовал АНТОХА.

Всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно сделать несколько иначе - не используя громоздкую 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%...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...