| Микроконтролери и електроника 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 ] | |||||||||
| Заглавие: | ||||||||||
Ей, благодаря много. Това ми пооблекчи задачата. Сега изглежда така: 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 ] | |||||||||
| Заглавие: | ||||||||||
Не става. След конвертирането itoa(i1,10,str); str се променя изцяло в зависимост от i1. Може би не съм те рабрал добре. Ако можеш да поясниш с пример ще е идеално |
||||||||||
| Автор: | setoy [ Пет Май 30, 2008 4:19 pm ] |
| Заглавие: | |
Можеш изцяло да си спестиш ползването на itoa (аз от теб разбрах за съществуването и |
|
| Автор: | Zeus [ Пет Май 30, 2008 4:40 pm ] | |||||||||
| Заглавие: | ||||||||||
Евала! Най-накрая стана както трябва с минимум изчисления. printf(LCD_PUTC,"%9lu",i1); Да си жив и здрав
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|