| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Пак въпрос за функцията sprintf http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4269 |
Страница 1 от 1 |
| Автор: | Ugeen [ Чет Май 31, 2007 11:20 am ] |
| Заглавие: | Пак въпрос за функцията sprintf |
Колеги идеята е следната.Искам да анимирам часове,минути и секунди при сверяването на часовник.Ползвам LCD .Идеята е следната.Имам брояч за сверяването Set_counter.Когато е 1 се сверяват часове,когато е 2 се сверяват минути iи когато е 3 се сверяват секунди.Искам това което се сверява да мига с честота 2Hz.Да предположим че това го правя с таймера и на всяко прекъсване ако Set_counter !=0 се изпълнява i^=1,t.e.i се променя се с честота 2Hz от 0 в 1 и обратно.Идеята ми е да ползвам предварително записани във флаша форматиращи стрингове,които да се определят с индекса i.Така в единия стринг параметъра който ще се сверява го няма,а в другия го има.На практика се получи така, че както съм написал стринговете имам проблеми със сверяването на часовете и минутите.Когато започне да мига часа, аргумента Hour се таксува като втори и часа се изписва в полето на минутите,а те отиват на мястото на секундите. Има ли начин да направя така ,че да се извършва преобразуването което е указано след знака%,ползвайки съответния аргумент,но да не се изписва на екрана.Пробвах какви ли не варианти и не успях.Разчитам на компетентното ви мнение.Предварително благодаря. Примерно кода е следният: Работя с CodevisionAVRи Atmega8 unsigned char Hour,Min,Sec,Set_counter,i; char lcd_buffer[20]; char *Hour_animation[2]={"%\n h:%.2um:%.2us","%.2uh:%.2um:%.2us"}; char *Hour_animation[2]={"%.2uh:%\n m:%.2us","%.2uh:%.2um:%.2us"}; char *Hour_animation[2]={"%.2uh:%.2um:%\n s","%.2uh:%.2um:%.2us"}; void main(void) { i=0; .......................................... .......................................... .......................................... Пропускам инициализаците на портовете ,LCD-то и прекъсванията while(1) { switch (Set_counter) { case 0: sprintf (lcd_buffer,"%.2uh:%.2um:%.2us"}; ,Hour,Min,Sec);break; case 1: sprintf(lcd_buffer,Hour_animation[i],Hour,Min,Sec);break; case 2: sprintf(lcd_buffer,Min_animation[i],Hour,Min,Sec);break; case 3: sprintf(lcd_buffer,Sec_animation[i],Hour,Min,Sec);break; } lcd_gotoxy(0,0); lcd_puts(lcd_buffer); } } |
|
| Автор: | Ugeen [ Чет Май 31, 2007 11:31 am ] |
| Заглавие: | |
Извинявам се това трябва да е така char *Hour_animation[2]={"%\n h:%.2um:%.2us","%.2uh:%.2um:%.2us"}; char *Min_animation[2]={"%.2uh:%\n m:%.2us","%.2uh:%.2um:%.2us"}; char *Sec_animation[2]={"%.2uh:%.2um:%\n s","%.2uh:%.2um:%.2us"}; |
|
| Автор: | solenoid [ Чет Май 31, 2007 6:59 pm ] |
| Заглавие: | |
Ами доколкото знам, когато няма да печатиш нищо аргумента на sprintf трябва да е указател към signed int, в който се връща бройката на отпечатаните символи. Пробвай вместо това да ползваш "пауза" вместо /n. |
|
| Автор: | miro_atc [ Чет Май 31, 2007 7:41 pm ] | ||||||||||||||||||
| Заглавие: | Re: Пак въпрос за функцията sprintf | ||||||||||||||||||
|
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|