Augur rain MASTER

Dependencies:   mbed

Fork of 1A_PROJECT_DIGITAL by Jakkapan Keawsalak

Revision:
0:ede9cc7e508b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DS1307.cpp	Tue Dec 08 19:25:47 2015 +0000
@@ -0,0 +1,78 @@
+
+#define DS1307_ADDR 0xD0 
+#include "DS1307.h"
+
+DS1307::DS1307(PinName sda,PinName scl):rtc(sda,scl),display(D7, D8){
+    col=1;
+    display.clear();
+}
+void DS1307::displays(){
+    
+    if(col){display.setColon(1);col=0;}
+    else {display.setColon(0);col=1;}
+    int sec,mins,hour,day,date,month,year;
+    
+    gettime(&sec,&mins,&hour,&day,&date,&month,&year);
+    
+    display.write(0, hour / 10);
+    display.write(1, hour % 10);
+    display.write(2, mins / 10);
+    display.write(3, mins % 10);
+    wait(1);
+}
+void DS1307::settime(int sec,int mins,int hour,int day,int date,int month,int year){
+    char cmd[2];
+    cmd[0] = 0x00;
+    cmd[1] = dectobcd(sec);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x01;
+    cmd[1] = dectobcd(mins);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x02;
+    cmd[1] = dectobcd(hour);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x03;
+    cmd[1] = dectobcd(day);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x04;
+    cmd[1] = dectobcd(date);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x05;
+    cmd[1] = dectobcd(month);
+    rtc.write(DS1307_ADDR, cmd, 2);
+    cmd[0] = 0x06;
+    cmd[1] = dectobcd(year);
+    rtc.write(DS1307_ADDR, cmd, 2);
+}
+void DS1307::gettime(int *sec,int *mins,int *hour,int *day,int *date,int *month,int *year){
+    char cmd = 0;
+    char v[7];
+    for(int x=0;x<=6;x++){
+        rtc.write(DS1307_ADDR, &cmd, 1);
+        rtc.read(DS1307_ADDR, &v[x], 1);
+        cmd++;
+    }
+     *sec=bcdtodec(v[0]);
+     *mins=bcdtodec(v[1]);
+     *hour=bcdtodec(v[2]);
+     *day=bcdtodec(v[3]);
+     *date=bcdtodec(v[4]);
+     *month=bcdtodec(v[5]);
+     *year=bcdtodec(v[6]);
+}
+int DS1307::bcdtodec( int bcd) {
+    int low = 0;
+    int high = 0;
+
+    high = bcd / 16;
+    low = bcd - (high * 16);
+    return ((high * 10) + low);
+}
+int DS1307::dectobcd( int dec) {
+    int low = 0;
+    int high = 0;
+
+    high = dec / 10;                // this gives the high nibble value
+    low = dec - (high * 10);        // this gives the lower nibble value
+    return ((high *16) + low);      // this is the final bcd value but in interger format
+}
\ No newline at end of file