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

 
 
> Как вывести на LCD большое число, Не могу вывести число, большее 32767
Tomade
сообщение Aug 20 2008, 11:53
Сообщение #1


Участник
*

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



Подскажите чайнику, как переехать такую проблему.
Микроконтроллер серии ATMega, нужно выводить на ЖКИ типа РС1602F (c контроллером) инкрементируемую переменную, которая может принимать значения, к примеру, от 0 до 1 000 000. Работу программы (см. вложение) симулирую на VMLAB3.12.
Что получается? До значания переменной, равного 32767, всё идёт нормально. А вот следующее индицируемое число равняется -32768 (со знаком минус), и все последующие начинают декрементироваться, то есть -32767, -32766, -32765 и т.д. Почему?

Сообщение отредактировал Tomade - Aug 20 2008, 11:55
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Maik-vs
сообщение Aug 20 2008, 12:04
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Tomade @ Aug 20 2008, 15:53) *
Подскажите чайнику, как переехать такую проблему.
Микроконтроллер серии ATMega, нужно выводить на ЖКИ типа РС1602F (c контроллером) инкрементируемую переменную, которая может принимать значения, к примеру, от 0 до 1 000 000. Работу программы (см. вложение) симулирую на VMLAB3.12.
Что получается? До значания переменной, равного 32767, всё идёт нормально. А вот следующее индицируемое число равняется -32768 (со знаком минус), и все последующие начинают декрементироваться, то есть -32767, -32766, -32765 и т.д. Почему?


Потому что объявлено как int, старший бит трактуется как знак. Объявите unsigned int - получите 0 .. 65535. Читайте про представление чисел в Си.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 20 2008, 12:10
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Maik-vs @ Aug 20 2008, 11:04) *
Потому что объявлено как int, старший бит трактуется как знак. Объявите unsigned int - получите 0 .. 65535

Всё равно не хватит до миллиона, надо объявить переменную как LONG.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Tomade
сообщение Aug 20 2008, 12:18
Сообщение #4


Участник
*

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



Цитата(=GM= @ Aug 20 2008, 16:10) *
Всё равно не хватит до миллиона, надо объявить переменную как LONG.

Так и делал:

char lcd_buffer[33];
unsigned long int x = 32760;
void main(void)
{
lcd_init(16);
while(1){
sprintf(lcd_buffer,"%i",x);
lcd_clear();
lcd_puts(lcd_buffer);
x++;
delay_ms(20);}}

- эффекта никакого.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 20 2008, 13:08
Сообщение #5


Знающий
****

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



Цитата(Tomade @ Aug 20 2008, 18:18) *
Так и делал:

char lcd_buffer[33];
unsigned long int x = 32760;
void main(void)
{
lcd_init(16);
while(1){
sprintf(lcd_buffer,"%i",x);
lcd_clear();
lcd_puts(lcd_buffer);
x++;
delay_ms(20);}}

- эффекта никакого.


Обратите внимание на указанную функцию. В CodeVision в настройках надо указывать какую библиотеу вы будете тиспользовать:

- Меню Project \ Confugire
- В окне настроек вкладка C Compiler
- На вкладке внизу слева настройки (s)printf Features


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tomade   Как вывести на LCD большое число   Aug 20 2008, 11:53
- - zhevak   Для ответа на Ваш вопрос, Вы указали мало данных. ...   Aug 20 2008, 12:04
|- - AHTOXA   "%i" - это int, надо - "%l" ил...   Aug 20 2008, 12:22
- - Genadi Zawidowski   Странно... есть же на данном форуме тема с чужим г...   Aug 20 2008, 12:36
- - GDI   Цитатаsprintf(lcd_buffer,"%i",x); Цитата...   Aug 20 2008, 12:41
|- - bloodden   Цитата(GDI @ Aug 20 2008, 15:41) Еще от к...   Aug 21 2008, 06:52
- - Tomade   Спасибо всем откликнувшимся. Вот что получилось (к...   Aug 21 2008, 05:49
|- - AHTOXA   Цитата(Tomade @ Aug 21 2008, 11:49) Если ...   Aug 21 2008, 06:05
|- - zhevak   Цитата(Tomade @ Aug 21 2008, 11:49) Спаси...   Aug 21 2008, 06:36
- - sergeeff   А через функцию char *ltoa(long value, char *strin...   Aug 21 2008, 06:27
- - Tomade   АНТОХА: Надо не I, а L! (от long) В вашем пре...   Aug 21 2008, 09:59
|- - zhevak   Цитата(Tomade @ Aug 21 2008, 15:59) Короч...   Aug 21 2008, 10:15
|- - AHTOXA   Цитата(Tomade @ Aug 21 2008, 15:59) АНТОХ...   Aug 21 2008, 10:47
- - Tomade   Антоха: Клевета! Было маленькое L - l. Прошу ...   Aug 21 2008, 11:08
- - sss992   можно так сделать: ... unsigned long int x = 1000...   Aug 21 2008, 11:16
- - Tomade   Ну вот, проблема решилась. Сделал следующее. 1.Сге...   Aug 22 2008, 07:25
- - Goodefine   Можно сделать несколько иначе - не используя громо...   Aug 25 2008, 07:32


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 05:48
Рейтинг@Mail.ru


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