Here is sample code of time display on 7 seg
we try on pic16f877a ,DS1307


Code:
Define LOADER_USED 1
define OSC 4
include"modedefs.bas"
Digits VAR PORTD
SEGMENTS VAR PORTC
SO var portc.6 ' tx
DPIN var PORTd.5 'I2C DATA PIN ds1307,with 4K7 pull up
CPIN var PORTd.6 'I2C CLOCK PIN with pulled up resister 4K7

B1 var byte
B2 var byte
B3 var byte
I VAR BYTE
N VAR BYTE
VALUE VAR WORD

BB var byte
B_H var byte
B_L var byte
B_W VAR WORD
SEC VAR BYTE
M VAR BYTE
HR VAR BYTE
TIMES VAR WORD

TRISB = $00
Portb = $00
TRISc = $00 ' Set segment pins to output
'portc = $00
TRISd = $00 ' Set digit pins to output
'portd = $ff

' Setting time & date to 21:58:00
I2CWRITE DPIN,CPIN,$D0,$00,[$00,$26,$11] ' Write to DS1307

pause 10

loop:
i2cread dpin,cpin,$d0,$00,[b1,b2,b3]
pause 10

BB=B1
gosub conv
SEC = ((B_H*10)+B_L)
'serout SO,t9600,["sec ",#SEC,10]
BB=B2
gosub conv
M=(B_H*10)+ B_L
'serout SO,t9600,["Min ",#M,10]
BB=B3
gosub conv
hR=(B_H*10)+ B_L
'serout SO,t9600,["Hour ",#HR,":",#M,":",#SEC,10]
VALUE = ((HR*100) + M)
'serout SO,t9600,["TIMES ",#TIMES,10]
gosub display_time
pause 1
goto loop
conv:
B_L=BB&%00001111
B_H=BB&%11110000
B_H=B_H>>4

return

display_TIME:
dot var byte

For i = 0 To 4 ' Loop through 4 digits

n = Value Dig i ' Get digit to display

' Gosub display1 ' Display the value
Digits = $ff

Lookup n, [$3F, $06, $5B, $4F, $66, $6D, $7D, $07, $7F, $6F,_
$77, $7C, $39, $5E, $79, $71, $0FF], Segments

if dot < 100 then ' Flishing dot precess
If i = 2 then segments = segments + 128 'Digit 2 show dot
Digits = ~Dcd i
dot = dot+1
else
dot = dot+1
If dot < 254 then
Digits = ~Dcd i
else
dot = 0
digits = ~dcd i
endif
endif

PAUSE 1 'INCREASE BRITE OF LED

NEXT i

RETURN

End