This is for pcf8583 philips chip, pic16f877, compiler pic basic pro...
Depends of date and time software turn on and off some relay switch or similar...
You need only to change addresses of chip register
DEFINE LCD_DREG PORTB ' I/O port na kome se nalazi LCD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2 ' Register select pin
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3 ' Enable pin
DEFINE LCD_BITS 4 ' 4-bitni data bus
DEFINE LCD_LINES 2 ' LCD ima dva reda karaktera
tempo var word
tempo=0
symbol SCL = PORTC.3 ' I2C data pin
symbol SDA = PORTC.4 ' I2C clock pin
I2CWRITE SDA,SCL,%10100001,$0f,[08]
B0 var bit
b0=0
Sekunde var byte ' Sekunde
Minuti var byte ' Minuti
sati var byte ' Sati
Dani var byte ' Dan
Meseci var byte ' Mesec
Godina var byte ' Godina
paljenje_minut var byte
paljenje_sat var byte
gasenje_sat var byte
gasenje_minut var byte
paljenje_minut=0
paljenje_sat=0
gasenje_sat=0
gasenje_minut=0
read 1,b0
pause 20
portd.5=B0
Main:
gosub Procitaj_sat
pause 100
gosub provera_dana
if (minuti=paljenje_minut) and (sati=paljenje_sat) then pali
pause 100
if (Minuti=gasenje_minut) and (sati=gasenje_sat) then gasi
goto Main ' Ponovi sve
provera_dana:
select case meseci
case 1 '''''''''''''''januar''''''
select case dani
case 1
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 7
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 14
paljenje_minut=10
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
case 22
paljenje_minut=15
paljenje_sat=23
gasenje_sat=15
gasenje_minut=24
end select
case 22 '''''februar''''''
select case dani
case 1
paljenje_minut=00
paljenje_sat=17
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=00
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 16
paljenje_minut=47
paljenje_sat=15
gasenje_sat=15
gasenje_minut=48
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=7
gasenje_minut=0
end select
case 3 ''''mart'''
select case dani
case 1
paljenje_minut=0
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=20
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
case 14
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
end select
case 4 '''''april'''
select case dani
case 1
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
case 7
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 14
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 21
paljenje_minut=10
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
end select
case 5 ''''''maj'''''
select case dani
case 1
paljenje_minut=00
paljenje_sat=17
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=00
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 14
paljenje_minut=0
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=7
gasenje_minut=0
end select
case 6 '''''''jun''''''
select case dani
case 1
paljenje_minut=0
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
case 7 '''''septembar''''''
paljenje_minut=20
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
'''''oktobar'''''
case 14
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
case 21 ''''''novembar''''''
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
end select
case 7 ''''''jul'''''
'''''''decembar'''''
select case dani
case 1
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 7
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 14
paljenje_minut=10
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
case 21
paljenje_minut=15
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
end select
case 8 '''''avgust''''
select case dani
case 1
paljenje_minut=00
paljenje_sat=17
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=00
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 14
paljenje_minut=0
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=7
gasenje_minut=0
end select
case 9 '''''septembar''''''
select case dani
case 1
paljenje_minut=0
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=20
paljenje_sat=20
gasenje_sat=7
gasenje_minut=0
case 14
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
end select
case 10 '''''oktobar'''''
select case dani
case 1
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
case 7
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 14
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=19
gasenje_minut=22
end select
case 11 ''''''novembar''''''
select case dani
case 1
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 7
paljenje_minut=12
paljenje_sat=17
gasenje_sat=17
gasenje_minut=13
case 14
paljenje_minut=10
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
case 21
paljenje_minut=15
paljenje_sat=16
gasenje_sat=7
gasenje_minut=0
end select
case 12 '''''''decembar'''''
select case dani
case 1
paljenje_minut=00
paljenje_sat=17
gasenje_sat=7
gasenje_minut=0
case 7
paljenje_minut=00
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 14
paljenje_minut=0
paljenje_sat=18
gasenje_sat=7
gasenje_minut=0
case 21
paljenje_minut=20
paljenje_sat=19
gasenje_sat=7
gasenje_minut=0
end select
end select
return
'''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''' paljenje
pali:
if (Minuti=gasenje_minut) and (sati=gasenje_sat) then gasi
high portd.5
b0=portd.5
write 1, b0 ''pamti zadnje stanje
goto main
'''''''''''''''''''''''''''''''''''''''''''''''''' gasenje
gasi:
low portd.5
b0=portd.5
write 1, b0 ''pamti zadnje stanje
goto main
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
procitaj_sat:
I2CREAD SDA,SCL,%10100001,2,[Sekunde] ''number two is address of register where is pcf 8583 store the second,chenge that for Ds1307 chip
I2CREAD SDA,SCL,%10100001,3,[Minuti]
I2CREAD SDA,SCL,%10100001,4,[sati]
I2CREAD SDA,SCL,%10100001,5,[Dani]
I2CREAD SDA,SCL,%10100001,6,[Meseci]
I2CREAD SDA,SCL,%10100001,$0f,[Godina]
sati =(sati & $F )+((sati>>4)*10) '''konverzija iz hexa decimalnog u decimalni broj '''''
minuti = (minuti & $F )+((minuti>>4)*10)'''''
dani = (dani & $F )+((dani>>4)*10)
meseci =(meseci & $F )+((meseci>>4)*10)
sekunde =(sekunde & $F )+((sekunde>>4)*10)
lcdout $fe,1 ' Obrisi displej
lcdout $fe,2 ' Prvi red prvi karakter
lcdout "Vreme:",dec2(sati),":", dec2(Minuti),":",dec2(Sekunde)
lcdout $fe,$c0 ' Drugi red, prvi karakter
lcdout "Datum:",dec2(Dani),".",dec2 (Meseci),".20",dec2(Godina)
return
End ' Kraj programa