Например TDA7294

Форум РадиоКот • Просмотр темы - Вывод времени
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс июл 27, 2025 05:28:11

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Вывод времени
СообщениеДобавлено: Вс авг 09, 2009 14:36:56 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Здравствуйте,подскажите,пожалуйста, делаю часы на atmega8.
Нужно выводить время в формате 00:00:00. Вот сделал функцию, но чувствую, что этот код очень корявый. Проблема в выводе чисел:
Если 1..9, то дописываю статический 0 слева от них(01..09)
Если 10..59, то сдвигаю курсор и затираю статический 0
А можно ли по-другому решить, есть ли способы?

Код:

void timer(void){

 

lcd_gotoxy(10,1);
lcd_putsf(":");
lcd_gotoxy(7,1);
lcd_putsf(":");
      //вывод секунд
      if (s>=10){
     
      lcd_gotoxy(11,1); 
     
      }
      if (s>59)
      {
      ++min;
      lcd_gotoxy(11,1);
      lcd_putsf("0");
      lcd_gotoxy(12,1);
      s=0;
      }
      itoa(s,lcd_buffer);
      lcd_puts(lcd_buffer);
     
      //вывод Минут
     
      if (min>=10) {
      lcd_gotoxy(8,1);
     
      } 
      if(min>59){
      lcd_gotoxy(8,1);
      lcd_putsf("0");
      lcd_gotoxy(9,1);
      min=0;
      ++chas;
      }   
      itoa(min,lcd_buffer);
      lcd_puts(lcd_buffer);
     
      //вывод часов
      if (chas>=10) {
      lcd_gotoxy(5,1);
     
     
     
      }
      if (chas>24){
      chas=0;
      lcd_gotoxy(5,1);
      lcd_putsf("0");
      lcd_gotoxy(6,1);
     
     
      }
      itoa(chas,lcd_buffer);
      lcd_puts(lcd_buffer); 
      }




[/code]


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 14:51:31 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
почему не сделать так:
Код:
char tmp_str[10];
sprintf(tmp_str,"%02d:02d:02d",hour,min,sec);
lcd_puts(tmp_str);
???
то есть использовать форматированный вывод (может в вашем любимом CVAVR и проще можно - подозреваю, что lcd_putsf сразу может форматированный вывод делать)...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 15:01:09 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
ARV писал(а):
почему не сделать так:
Код:
char tmp_str[10];
sprintf(tmp_str,"%02d:02d:02d",hour,min,sec);
lcd_puts(tmp_str);
???
то есть использовать форматированный вывод (может в вашем любимом CVAVR и проще можно - подозреваю, что lcd_putsf сразу может форматированный вывод делать)...

Ого,спасибо,буду разбираться!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 19:49:57 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
ARV писал(а):
почему не сделать так:


И получить вместо 500 байт кода - 2500 :))

Я бы сделал в обратную сторону, выводи все, но если первым символом является ноль, то выводи пробел.

x = (hour % 100) / 10;
if (x == 0) putlcd(0x20);



---------


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 20:31:07 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
__Alexander писал(а):
ARV писал(а):
почему не сделать так:


И получить вместо 500 байт кода - 2500 :))
совсем недавно меня убеждали, что Си не предполагает жадности :) а другие предлагали отказаться от оператора деления, заменив его каскадными if-ами...
используйте ассемблер, и вместо 500 байт кода получите 200, а то и меньше. :)))

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 20:49:41 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
ARV писал(а):
используйте ассемблер, и вместо 500 байт кода получите 200, а то и меньше. :)))


Вряд-ли настолько уменьшить получиться, но согласитесь, даже 1кб ради sprintf это многовато, а если это че-то типа тини или классики... за меги и иксмеги молчу, можно не задумываясь.

Добавлю:

Давайте следовать принципам того человека, что Вам сказал, что на Си не надо жадничать, и создавать встроенные системы на core2duo с гигом памяти. Тут же думать надо, под что на этом Си писать.

А насчет ассемблера хочу сказать: Вы думаете люди, которые создают эти компиляторы, на шарика там сидят? Уже давно из Си получается такой компактный asm, что даже те, кто всю жизнь писал на асме удивляются, что у компилятора за секунды получается то, что они месяц писали... :))



----------


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 21:05:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
__Alexander писал(а):
ARV писал(а):
используйте ассемблер, и вместо 500 байт кода получите 200, а то и меньше. :)))

Вряд-ли настолько уменьшить получиться, но согласитесь, даже 1кб ради sprintf это многовато, а если это че-то типа тини или классики... за меги и иксмеги молчу, можно не задумываясь.
предположим, тини13 к ЖКИ-индикатору вряд ли получится прикрутить, а с тини2313 уже можно рискнуть и sprintf использовать :) хотя без меги и это пахнет мазохизмом....

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 21:11:07 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
__Alexander писал(а):

А насчет ассемблера хочу сказать: Вы думаете люди, которые создают эти компиляторы, на шарика там сидят? Уже давно из Си получается такой компактный asm, что даже те, кто всю жизнь писал на асме удивляются, что у компилятора за секунды получается то, что они месяц писали... :))



----------

:)) улыбнуло.

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 21:14:35 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
__Alexander писал(а):
Давайте следовать принципам того человека, что Вам сказал, что на Си не надо жадничать, и создавать встроенные системы на core2duo с гигом памяти. Тут же думать надо, под что на этом Си писать.
практика показывает, что как раз над этим думать никто не намерен - иначе откуда бы такая популярность армов?
__Alexander писал(а):
Уже давно из Си получается такой компактный asm, что даже те, кто всю жизнь писал на асме удивляются, что у компилятора за секунды получается то, что они месяц писали... :))
не знаю, не знаю. во всяком случае WinAVR без особых извращений не делает программу менее примерно 62 байт, даже если эта программа состоит только из
Код:
int main(void){}
а на ассемблере аналог этой программы, как вы понимаете, потребует ровно 2 байта.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 21:53:54 
Потрогал лапой паяльник
Аватар пользователя

Карма: -1
Рейтинг сообщений: 4
Зарегистрирован: Пт апр 17, 2009 22:45:42
Сообщений: 316
Откуда: Minsk
Рейтинг сообщения: 0
ARV писал(а):
не знаю, не знаю. во всяком случае WinAVR без особых извращений не делает программу менее примерно 62 байт, даже если эта программа состоит только из
Код:
int main(void){}
а на ассемблере аналог этой программы, как вы понимаете, потребует ровно 2 байта.

Да ладно тебе, в реальных программах картинка совсем-совсем другая. Если пишешь на 8КБ кода (мега88, тайни861) на С - получаешь при желании красивый код. На ассемблере - получится банально много букав, поддерживать сложнее, переносимость хуже и плюсов нет. Компилятор - IAR, gcc не пользую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 22:07:53 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
Больше чем два, во первых, надо обойти вектора прерываний, во вторых инициализировать стек. Но соглашусь что больше, на асме 9 байт, на Си 28. Но надо будет посмотреть в дебаге...



----------


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 22:18:09 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
__Alexander писал(а):
Больше чем два, во первых, надо обойти вектора прерываний, во вторых инициализировать стек. Но соглашусь что больше, на асме 9 байт, на Си 28. Но надо будет посмотреть в дебаге...
ничего обходить или инициализировать не надо. пустая программа есть rjmp $ - 2 байта.

а на счет "ладно тебе" - не тратьте время, я в ассемблере собаку съел, и отлично знаю все его плюсы и минусы, равно как и про Си знаю.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 22:37:20 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
ARV писал(а):
ничего обходить или инициализировать не надо. пустая программа есть rjmp $ - 2 байта..


Как это не надо? На сколько мне память не изменяет, векторам присвоен статический адрес памяти программ начиная от нулевого. И сишные компиляторы по умолчанию суют туда reti.

И че за команда rjmp $ ? Не видал такой.



----------


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 22:41:55 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
__Alexander писал(а):
ARV писал(а):
ничего обходить или инициализировать не надо. пустая программа есть rjmp $ - 2 байта..


Как это не надо? На сколько мне память не изменяет, векторам присвоен статический адрес памяти программ начиная от нулевого. И сишные компиляторы по умолчанию суют туда reti.

И че за команда rjmp $ ? Не видал такой.

Если вы имеете ввиду просто цикл, то да, два байта, но разве это можно назвать программой? Хотя можно :)) , программа ведь, как-никак. Но на этом можно заканчивать разговор :)) .



----------


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 09, 2009 22:42:34 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Вт сен 11, 2007 10:27:08
Сообщений: 335
Откуда: Киев
Рейтинг сообщения: 0
ARV писал(а):
ничего обходить или инициализировать не надо. пустая программа есть rjmp $ - 2 байта..


Как это не надо? На сколько мне память не изменяет, векторам присвоен статический адрес памяти программ начиная от нулевого. И сишные компиляторы по умолчанию суют туда reti.

И че за команда rjmp $ ? Не видал такой.

Если вы имеете ввиду просто цикл, то да, два байта, но разве это можно назвать программой? Хотя можно :)) , программа ведь, как-никак. Но на этом можно заканчивать разговор :)) .



----------


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 19:46:54 
Модератор
Аватар пользователя

Карма: 27
Рейтинг сообщений: 58
Зарегистрирован: Пн апр 03, 2006 11:43:25
Сообщений: 4517
Откуда: Санкт - Петербург
Рейтинг сообщения: 0
Медали: 3
Получил миской по аватаре (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Так, господа, темы "Си vs Asm" уже есть, так что вы сами их найдете, или нужно подсказать, куда следует идти с такими дискуссиями из темы про вывод времени? :)

_________________
Оптимизм х (Опыт + Знания) = const


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 21:19:24 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
maglev писал(а):
Если пишешь на 8КБ кода (мега88, тайни861) на С - получаешь при желании красивый код. На ассемблере - получится банально много букав, поддерживать сложнее, переносимость хуже и плюсов нет. (??????????)

Интересно из чего такие выводы следуют??? :shock:

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 21:39:15 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Переносимость конечно хуже. Вы попробуйте код на асме для авр перенести на какой-нибудь другой процессор (:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 21:47:16 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
но внутри семейства - ноу проблем
и что-то я не видел чтобы с пиков на авры так легко переносилось. :wink:

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 22:50:54 
Встал на лапы
Аватар пользователя

Зарегистрирован: Сб ноя 18, 2006 17:14:15
Сообщений: 123
Рейтинг сообщения: 0
Полазил по буржуйским сайтам - везде форматирование и вывод времени на ЖКИ со sprintf идет, думаю, что не с проста все это :)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y