Отговори на тема  [ 7 мнения ] 
Извеждане на int32 на LCD дисплей 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение Извеждане на int32 на LCD дисплей
става въпрос за CCS
Кой начин ползвате?
Първоначално ползвах за всеки разред на числото отделна променлива, примерно за 8 цифрено число 8 променливи и си организирах вътрешно броячи за нарастване и намаляване. Така извеждането не е проблем, но не ми се струва ефективно да събирам отделните променливи за да работя с цялото число;

намерих една функция за превръщане на int в string и сега съм го направил така:

int8 value;
int32 i1;
char str[8];

itoa(i1,10,str);
lcd_gotoxy(1,1);
for(value=0;value<8;++value)
lcd_putc(str[value]);

работи добре, когато i1 е с 8 разряда, но когато стане с по-малко(примерно от 10000000 стане 9999999) нещо се бърка и на дисплея излиза маймуна на мястото на цифрата.
Може би трябва да правя проверка и да допълвам с празни позиции.

Ако някой се е борил с тези проблеми (сигурен съм, че има доста хора тук във форума, който могат да помогнат), нека сподели.
Благодаря предварително. :)


Пет Май 30, 2008 12:02 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
sprintf(...);

Освен това CCS има едно малко нестандартно пренасочване на стандартния printf

printf(lcd_putc,"%d ",i1);... или нещо подобно


Пет Май 30, 2008 1:33 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
setoy написа:
sprintf(...);

Освен това CCS има едно малко нестандартно пренасочване на стандартния printf

printf(lcd_putc,"%d ",i1);... или нещо подобно


Ей, благодаря много. Това ми пооблекчи задачата.
Сега изглежда така:

while (TRUE)
{

if(++cc>1000)
{
if(flag)
{
itoa(i1,10,str);
lcd_gotoxy(1,1);
lcd_putc(" "); //тук с 8 интервала :)
lcd_gotoxy(1,1);
printf(LCD_PUTC, str);
cc=0;
flag=false;
};
};
}

Чрез цикъла го извеждам един път на 1000 цикъла, за да не тормозя излишно процесора.
lcd_putc(" "); - с това изтривам предварително дисплея от остатъчните цифри от предното показание. Установих, че това е по-бързо от lcd_putc("\f");
А flag я клатя в прекъсването, за да не ми трепка излишно дисплея ако няма изменение на стойността. Програмката е за четене на ротационен енкодер. Мерси отново за съдействието.


Пет Май 30, 2008 2:30 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пон Фев 21, 2005 2:14 pm
Мнения: 191
Местоположение: Varna
Мнение 
Триенето на дисплея ми се струва безсмислено. По-добре напълни str с 0х20 и после конвертирай.

_________________
Шанс едно на милион, обикновено се случва девет от десет пъти.


Пет Май 30, 2008 2:59 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
Cvetanov написа:
Триенето на дисплея ми се струва безсмислено. По-добре напълни str с 0х20 и после конвертирай.


Не става. След конвертирането
itoa(i1,10,str);

str се променя изцяло в зависимост от i1.
Може би не съм те рабрал добре. Ако можеш да поясниш с пример ще е идеално :prayer:


Пет Май 30, 2008 3:14 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Можеш изцяло да си спестиш ползването на itoa (аз от теб разбрах за съществуването и :) ) и да минеш само с един printf. Това исках да кажа :) Само трябва да му зададеш нужните спецификатори ("%" ). За което е нужно малко да прочетеш, но лошо няма


Пет Май 30, 2008 4:19 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение 
setoy написа:
Можеш изцяло да си спестиш ползването на itoa (аз от теб разбрах за съществуването и :) ) и да минеш само с един printf. Това исках да кажа :) Само трябва да му зададеш нужните спецификатори ("%" ). За което е нужно малко да прочетеш, но лошо няма



Евала! Най-накрая стана както трябва с минимум изчисления.

printf(LCD_PUTC,"%9lu",i1);

Да си жив и здрав =D>


Пет Май 30, 2008 4:40 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни