Перейти к содержанию

Дописать до двух знаков (секунды, часы)


Рекомендуемые сообщения

Собственно вопрос в заголовке, пишу планировщик там работа с часами и минутами идет, это все сохраняется в EEPROM, от туда достаю int далее конвертирую в часы и минуты и отправляю в Serial на экран, хотелось бы представление сделать с нулями, перерыл инет ничего не нашел, помогите решить хочу отображать так: 01:06   сейчас отображается 1:6

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

29 минут назад, 3d_killer сказал:

отправляю в Serial на экран

не совсем понятно что это значит, но можно попробовать отправлять сначала 0 потом 1 и получите желаемый результат.

Ссылка на комментарий
Поделиться на другие сайты

так я не знаю же число состоит из двух знаков или одного, а это значить что я часы и минуты выставленные в настройке преобразовываю в минуты и сохраняю в eeprom, далее от туда вытаскиваю большое число и обратно его преобразовываю

Ссылка на комментарий
Поделиться на другие сайты

попробуйте так

uint8_t Display[32];        // дисплейный буфер на 32 байта

//==============================================================================
// Преобразование из BIN в BCD
//==============================================================================
uint8_t BinToBCD(uint8_t byte)
{
  return(((byte / 10) << 4) + (byte % 10));
}

//==============================================================================
// Показать время
//==============================================================================
void ShowTime(uint8_t pos, uint16_t value)
{
  uint8_t temp;
  uint8_t *disp;
  
  disp = Display + pos;
  temp = BinToBCD(value / 60);
  *disp++ = ((temp >> 4) & 0x0F) + '0';   // старшый разряд часов
  *disp++ = (temp & 0x0F) + '0';          // младшей разряд часов
  *disp++ = ':';
  temp = BinToBCD(value % 60);
  *disp++ = ((temp >> 4) & 0x0F) + '0';   // старший разряд минут
  *disp = (temp & 0x0F) + '0';            // младший разряд минут
}

//==============================================================================
// Показать время (то же самое)
//==============================================================================
void ShowTime(unsigned char pos, unsigned int value)
{
  Display[pos]=((BinToBCD(value/60) >> 4) & 0x0F)+'0';    // старшый разряд часов
  Display[pos+1]=(BinToBCD(value/60) & 0x0F)+'0';         // младшей разряд часов без точки
  Display[pos+2]=':';
  Display[pos+3]=((BinToBCD(value%60) >> 4) & 0x0F)+'0';  // старший разряд минут
  Display[pos+4]=(BinToBCD(value%60) & 0x0F)+'0';         // младший разряд минут
}

 

Изменено пользователем dm37
Ссылка на комментарий
Поделиться на другие сайты

Извините, но это - какой-то бред...
Сначала по тетрадам разбивается число, всякими сдвигами и масками :

((byte / 10) << 4) + (byte % 10)

А затем делаются обратные действия :

(temp >> 4) & 0x0F
temp & 0x0F

В чём смысл сиих лишних действий ?

Не проще сделать так :

temp = value / 60;
*disp++ = (temp/10) + '0';   // старшый разряд часов
*disp++ = (temp%10) + '0';   // младшей разряд часов

temp = value % 60;
*disp++ = (temp/10) + '0';   // старшый разряд минут
*disp++ = (temp%10) + '0';   // младшей разряд минут

 

И тут, также :

(BinToBCD(value/60) >> 4)

Вы вызываете функцию, которая двигает данные влево на 4 разряда, затем сразу же двигаете возвращенное значение вправо на 4 разряда :)

 

Ссылка на комментарий
Поделиться на другие сайты

17 часов назад, Alex сказал:

Извините, но это - какой-то бред...
Сначала по тетрадам разбивается число, всякими сдвигами и масками :

Да как угодно. Согласен, код не оптимальный с точки зрения текста, но рабочий и компилятору нравиться больше :-) , проверил в одном проекте:
- IAR (size) 9 941 байт (мой) против 9 959 байт (ваш);
- IAR (speed) 11 499 байт (мой) против 11 525 байт (ваш).

Конечно, надо проверить только код ShowTime, но пока не времени. Будет время обязательно проверю и дооптимизирую (спасибо за наводку :-) ).

Показал два примера с перспективой дальнейшей оптимизации (это видно). Просто раньше это было выдернуто из разных проектов, так и тянется... Получается что и ваш код также можно ещё оптимизировать :-)

Да, чип Mega32

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну понятно, вам так проще, да и понимание что и как будет менее абстрактным.
    • Вот здесь надеюсь поможешь. Вот из за чего и поднимался весь этот вопрос с UART что какой то приём тут не полноценный получился вначале. Это для меня очень сложно с функциями, а тем более библиотеками ещё сложней. Далеко не каждая библиотека встаёт в программу и начинаются ошибки в следствии этого. Поэтому я конечно выберу вариант с функцией и без библиотек. Весь код в одном файле. Когда несколько файлов тоже какие то ошибки часто вылетают.
    • Я нигде и не говорил о 250 ваттах.  Именно из-за никой мощности и хотел соединить мостом.
    • Подключайте. Только не забывайте что у вас получится инверсный сигнал управления.
    • Подключал сегодня к плате защиты акустику (как оно должно быть собственно). Хлопка на старте нет - реле включает АС после 3 сек и этого достаточно. Выводные провода подключил на плате в amp и gnd, акустический прикрутил к терминалам. Единственно что - есть небольшой фон при простое, но его не слышно с музыкой. Может от длинных проводов какие то наводки ловит. Не знаю. Музыку подавал с телефона через кабель. Хочу сказать спасибо всем кто помогал мне разобраться с проблемой! Второй канал к сожалению проверить пока не могу - он в ремонте.    
    • Если есть необходимость можно обрезать. Возможно даже сделать ветвление на основании префиксов. Можно сделать функцию (она же есть и библиотечная) которая будет искать подстроку в строке.  Давайте больше информации, тогда можно будет более конкретно советовать.
    • Всем привет! На машине стоят задние фонари от компании тюнавто, в них есть функция приветствия, произошло попадание воды в фонарь и часть элементов отгорело, светодиоды стояли 3528, но я не могу подобрать их по яркости. Поэтому решил перейти на 5050, но они потребляют больше тока. Сють в чем, хочу к выводам 1, 2, 3 подключить транзисторы для управления светодиодами. Думаю понятно объяснил. Спасибо.
×
×
  • Создать...