Proponuję 2 sposoby.
Pierwszy:
Pobierz czas z RTC tylko raz podczas startu programu. Przerwanie, które albo wyliczysz i ustawisz co 1s, lub wyliczysz ile razy musi wystąpić przerwanie by minęła 1s i inkrementowanie zmiennej do tej wartości. Gdy minie ta sekunda ustaw flagę. W głównej pętli programu, gdy wykryjesz flagę, zmieniasz ją na false i inkrementujesz sekundy, teraz if:
jeżeli zmienna dla brzeczyka > 0 to
port dla brzeczyka ustaw w stan wysoki
ustaw zmienna dla brzeczyka na zmienna dla brzeczyka-1
jeżeli nie to port dla brzeczyka ustaw w stan niski
Potem 3 if'y:
jeśli sekundy > 59 to
ustaw sekundy na 0
ustaw minuty na minuty + 1
jeśli minuty > 59 to
ustaw minuty na 0
zmienna dla brzeczyka = 10
ustaw godziny na godziny + 1
jeśli godziny > 23 to
ustaw godziny na 0
Niestety, w zależności od taktowania może po czasie się spieszyć, lub późnić.
Drugi:
Pobierasz ciągle czas z RTC i go wyświetlasz. Głośnik podobnie jak do góry. Ten sposób jest bez sensu, ponieważ tracisz potrzebny czas na odczyt, konwersje itp.