Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Извеждане на int32 на LCD дисплей
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5822
Страница 1 от 1

Автор:  Zeus [ Пет Май 30, 2008 12:02 pm ]
Заглавие:  Извеждане на 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) нещо се бърка и на дисплея излиза маймуна на мястото на цифрата.
Може би трябва да правя проверка и да допълвам с празни позиции.

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

Автор:  setoy [ Пет Май 30, 2008 1:33 pm ]
Заглавие: 

sprintf(...);

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

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

Автор:  Zeus [ Пет Май 30, 2008 2:30 pm ]
Заглавие: 

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 я клатя в прекъсването, за да не ми трепка излишно дисплея ако няма изменение на стойността. Програмката е за четене на ротационен енкодер. Мерси отново за съдействието.

Автор:  Cvetanov [ Пет Май 30, 2008 2:59 pm ]
Заглавие: 

Триенето на дисплея ми се струва безсмислено. По-добре напълни str с 0х20 и после конвертирай.

Автор:  Zeus [ Пет Май 30, 2008 3:14 pm ]
Заглавие: 

Cvetanov написа:
Триенето на дисплея ми се струва безсмислено. По-добре напълни str с 0х20 и после конвертирай.


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

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

Автор:  setoy [ Пет Май 30, 2008 4:19 pm ]
Заглавие: 

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

Автор:  Zeus [ Пет Май 30, 2008 4:40 pm ]
Заглавие: 

setoy написа:
Можеш изцяло да си спестиш ползването на itoa (аз от теб разбрах за съществуването и :) ) и да минеш само с един printf. Това исках да кажа :) Само трябва да му зададеш нужните спецификатори ("%" ). За което е нужно малко да прочетеш, но лошо няма



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

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

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/