Augur rain MASTER

Dependencies:   mbed

Fork of 1A_PROJECT_DIGITAL by Jakkapan Keawsalak

DS1307.cpp

Committer:
gamezajad
Date:
2015-12-08
Revision:
0:ede9cc7e508b

File content as of revision 0:ede9cc7e508b:


#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
}