|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:09 am
|
Страница 1 от 1
|
[ 4 мнения ] |
|
Пак въпрос за функцията sprintf
| Автор |
Съобщение |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 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 |
|
 |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 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 |
|
 |
|
solenoid
Ранг: Минаващ
Регистриран на: Чет Ное 02, 2006 1:13 am Мнения: 88
|
Ами доколкото знам, когато няма да печатиш нищо аргумента на sprintf трябва да е указател към signed int, в който се връща бройката на отпечатаните символи.
Пробвай вместо това да ползваш "пауза" вместо /n.
|
| Чет Май 31, 2007 6:59 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 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; }
|  |  |  |  |
|
| Чет Май 31, 2007 7:41 pm |
|
|
|
Страница 1 от 1
|
[ 4 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|