Ds1307 выдает такие данные на выходе 165/165/165 45:165:85

,

ИМХО распаковка данных хромает.

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

  byte temp_sec_reg;
  
  temp_sec_reg = Wire.read(); //читаем регистр модуля 
  //распаковываем регистр
  second_ = ((temp_sec_reg & 0b01110000) >> 4) * 10 + (temp_sec_reg & 0b00001111);

Ds. Ваши проблемы связаны с тем, что Вы полностью игнорируете стадию проектирования.
Вы должны были понять, что на дисплее не хватит места, еще до того, как напишете первую строчку кода.

У него есть

byte bcdToDec(byte val) {
  return ((val / 16 * 10) + (val % 16));
}

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

Если есть готовая библиотека с примерами - что мешало ее использовать?
Думаю он просто о ней не знал))

Тоже так думаю. ТС где-то нашел код для работы с RTC, типа продвинутый, т.е. без библиотеки - типа, тут мы можем сами делать так как надо, а не полагаться на возможно криво написанную библиотеку. Но продвинутый код предполагает и продвинутый уровень юзера ))