No to rzeczywiście miałeś coś źle połączone ale PIC16F84 działa i wykonuje program, bo teraz dane na wyświetlaczu mają sens. Dwa puste miejsca i dwa zera wskazują na to, że program znajduje się na początku odczytu danych z odbiornika DCF77 i niestety nic nie odbiera. Jak napisano pod filmikiem:
Clock not locked:
- In this state, the clock can't display time because it has never received a complete DCF77 time frame. The clock is in this state at start time.
- The first two digits of the digits are blanked, and the two last digits show the current bit number of the frame in progress.
czyli (tłumaczenie moje):
Zegar nie zsynchronizowany:
- W tym stanie zegar nie może wyświetlać czasu ponieważ nigdy nie odebrał pełnej ramki DCF77. Zegar jest w tym stanie zaraz po włączeniu.
- Dwie pierwsze cyfry są wygaszone, a dwie ostatnie pokazują numer bieżącego bitu ramki podczas odbioru.
Wygląda więc na to, że wyświetlanie działa dobrze ale masz problem albo z samym odbiornikiem DCF77 albo z jego połączeniem z PIC16F84.
Program napisany jest tak, że nie przejdzie do wyświetlania czasu dopóki nie odbierze kompletnej ramki. Możesz to oszukać zmieniając na próbę definicję z początku programu:
unsigned char locked = 0 ; // set to 1 when clock has been adjusted
na:
unsigned char locked = 1 ;
Wówczas program natychmiast zacznie wyświetlać czas tak jakby ramka DCF77 została już odebrana. Zliczanie czasu rozpocznie się od 12:34:56, gdyż takimi wartościami autor zainicjował sobie zmienne:
unsigned char rhh = 12, rmn = 34, rss = 56 ; // RTC clock : hours, minutes, seconds
Przypuszczalnie zostało tak zrobione tylko do celów testowych, gdyż, o ile zdołałem się zorientować, w normalnej pracy zegara wartości te nie są nigdy wykorzystywane.
Do kompletu powinieneś jeszcze oszukać odczyt stanu przycisku S1, najlepiej tak, żeby wyświetlane były minuty i sekundy dla lepszego uwidocznienia zliczania, czyli zamiast:
kp = PORTB.F7 ; // read key
wstaw:
kp = 1;
Oczywiście te wszystkie zmiany, które opisałem powyżej, mają charakter wyłącznie tymczasowy do przeprowadzenia próby wyświetlacza.
A co do ostaniego pytania to nie jestem pewien, czy wpisywanie czegokolwiek do PORTB w tym miejscu programu ma w obecnej sytuacji sens. Z punktu widzenia wyświetlacza na pewno nie, bo po instrukcji PORTA=0x0F wszystkie anody są wyłączone, więc wszystkie cyfry są wygaszone. Być może autorowi chodziło o to, żeby jakieś upływności LED-ów poszczególnych segmentów wyświetlacza nie zakłócały współpracy przycisku S1 z pulldownem R13. Jeżeli w tej chwili nie masz w ogóle przycisku, to myślę, że na razie nie musisz się tym przejmować.
Gdybyś w przyszłości chciał dodać przycisk S1, to wydaje mi się, że po zanegowaniu wyświetlacza powinien on zwierać nie do plusa a do masy, opornik R13 powinien być dołączony do plusa, i wówczas:
zamiast PORTB = 0; powinno być PORTB = 0xFF;
a zamiast kp = PORTB.F7; powinno być kp= ~PORTB.F7;
Ale to na przyszłość, na razie głównym problemem jest brak współpracy z odbiornikiem DCF77 i skoro odbiornik robiłeś samemu to w tym już raczej nie będę w stanie pomóc w ramach tego tematu.