Отговори на тема  [ 4 мнения ] 
Пак въпрос за функцията sprintf 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Пак въпрос за функцията 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);

}

}


Чет Май 31, 2007 11:20 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Извинявам се това трябва да е така
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"};


Чет Май 31, 2007 11:31 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Ное 02, 2006 1:13 am
Мнения: 88
Мнение 
Ами доколкото знам, когато няма да печатиш нищо аргумента на sprintf трябва да е указател към signed int, в който се връща бройката на отпечатаните символи.
Пробвай вместо това да ползваш "пауза" вместо /n.


Чет Май 31, 2007 6:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Пак въпрос за функцията sprintf
Ugeen написа:
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;
}




Код:
sprintf (lcd_buffer,"%.2uh:%.2um:%.2us"};
if(Set_counter && !i)
{
  lcd_buffer[(Set_counter-1)<<2] = '\n';
  lcd_buffer[(Set_counter-1)<<2 +1] = ' ';
}


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

Кой е на линия

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


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

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