Svaki put kada sat dostigne vrijednost 23:59:59 i predje u vrijednost 00:00:00 u ispisu datuma se za jedan poveca vrijednost dana i godine dok mjesec ostaje nepromjenjen
recimo datum je 01:01:2000 i kada dođe pola noci datum se promjeni u ovaj oblik 02:01:2001 ,znaci dan i godina se uvecaju za jedan.
negdje ocito grijesim ali mi nije jasnoi gdje.
kod za taj chip je preradjeni kod za DS1337
Code: Select all
'Sat sa RTC pcf8583 kolom
Include "Modedefs.Bas"
DEFINE OSC 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_BITS 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
Symbol Taster0 = PORTA.0
Symbol Taster1 = PORTA.1
Symbol Taster2 = PORTA.2
Symbol Taster3 = PORTA.3
Symbol SCL = PORTC.3 ' I2C clock pin
Symbol SDA = PORTC.4 ' I2C data pin
I CON 254 'Kontrolni bajt LCD-a
Clr CON 1 'Brisi displej
Line1 CON 128 'Pocetak prve linije LCD-a
Line2 CON 192 'Pocetak druge linije LCD-a
'Promenljive za citanje i upisivanje u pcf8583
B0 var byte
sat var byte
min1 var byte
dan var byte
mje var byte
god var byte
cif1 var byte
cif2 var byte
broj var byte
br var byte
S VAR BYTE
M VAR BYTE
H VAR BYTE
D var byte
Mn var byte
Y var byte
'----Inicijalne vrenosti-----------------
TRISA =%111111
TRISB =%00000000
TRISC = %1111111
TRISD =%00000000
TRISE= %000
ADCON1 =7
Lcdout $fe, 1 ' Izbrisi ceo LCD displej
Lcdout $fe, 2 ' Pozicioniraj se na prvi red prvi karakter
Lcdout "PROBA" 'Ispisi "PROBA" u prvom redu
Lcdout $fe, $C0 ' Podesi kursor na pocetak drugog reda
Lcdout "PCF8583" 'Ispisi "DS1337" u drugom redu
Pause 1000 ' Pauza 1 sec
I2CWrite SDA,SCL, $A1,$00,[ $09 ]
Ciklus:
'- - - Pritisnut B0 ulaz u glavni meni- - - - - -
B0 = 0
button Taster0, 0, 100, 10, B0, 1, meni0
I2CREAD SDA,SCL,%10100001,2,[S]
I2CREAD SDA,SCL,%10100001,3,[M]
I2CREAD SDA,SCL,%10100001,4,[H]
I2CREAD SDA,SCL,%10100001,5,[D]
I2CREAD SDA,SCL,%10100001,6,[MN]
I2CREAD SDA,SCL,%10100001,7,[Y]
lcdout $fe,1
lcdout $fe,2
lcdout "VREME:", hex(H),":", hex2(M),":", hex2(S)
lcdout $fe,$c0
lcdout "DATUM:", hex2(D),".", hex2(Mn),".20",hex2(Y)
Pause 500
GoTo Ciklus
'- - - - Meni izbora - - - - - - - - - - - - - - - -
meni0:
LCdout i,Clr
LCDout i, Line1," Vreme: "
LCDout i, Line2," "
Pause 200
button Taster0, 0, 100, 10, B0, 1, meni1
button Taster1, 0, 100, 10, B0, 1, menisat0
Goto Meni0
meni1:
LCdout i,Clr
LCDout i, Line1," Datum: "
LCDout i, Line2," "
Pause 200
button Taster1, 0, 100, 10, B0, 1, menidatum0
Goto Meni1
'--------meni namestanja sata-----------------------------
menisat0:
sat=0
min1=0
menisat:
button Taster0, 0, 100, 10, B0, 1, upisivreme
button Taster1, 0, 100, 10, B0, 1, menisat1
button Taster2, 0, 100, 10, B0, 1, menimin
goto menisat:
menisat1:
sat=sat+1
If sat > 23 Then sat=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menisat
menimin:
min1=min1+1
If min1 > 59 Then min1=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menisat
upisivreme:
br=sat
Call Pretvori
sat=Broj
br=min1
Call pretvori
min1=Broj
I2cwrite SDA,SCL,%10100001,2,[0]
I2Cwrite SDA,SCL,%10100001,3,[min1]
I2Cwrite SDA,SCL,%10100001,4,[sat]
pause 500
Goto Ciklus
'--------meni namestanja datum--------------------------
menidatum0:
dan=1
mje=1
god=7
menidatum:
button Taster0, 0, 100, 10, B0, 1, upisidatum
button Taster1, 0, 100, 10, B0, 1, menidan
button Taster2, 0, 100, 10, B0, 1, menimje
button Taster3, 0, 100, 10, B0, 1, menigod
goto menidatum:
menidan:
dan=dan+1
If dan > 31 Then dan=1
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
menimje:
mje=mje+1
If mje > 12 Then mje=1
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
menigod:
god=god+1
If god > 99 Then god=0
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
upisidatum:
br=dan
Call Pretvori
dan=broj
br=mje
Call Pretvori
mje=broj
br=god
Call Pretvori
god=broj
I2CWRITE SDA,SCL,%10100001,5,[dan]
I2CWRITE SDA,SCL,%10100001,6,[mje]
I2CWRITE SDA,SCL,%10100001,7,[god]
pause 500
Goto Ciklus
'-----pretvori iz dec u BCD kod-----------
Pretvori:
cif1=br / 10
cif2=br // 10
broj=cif1 * 16 + cif2
Return
End