Clock Shield

Dependents:   B17_ClockGame

Files at this revision

API Documentation at this revision

Comitter:
mmoodevil
Date:
Mon Dec 07 10:45:31 2015 +0000
Commit message:
moo editing wait

Changed in this revision

Clock.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 47ccd6ffe435 Clock.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Clock.h	Mon Dec 07 10:45:31 2015 +0000
@@ -0,0 +1,148 @@
+#include "mbed.h"
+#include "DigitDisplay.h"
+#define Address 0xD0 
+class Clock{
+    public:
+        Clock(PinName,PinName);
+        void set(int sec , int min , int hour , int day , int date , int month , int year);
+        void settime2bcd(int sec , int min , int hour , int day , int date , int month , int year);
+        void get(int *second , int *minute , int *hours, int *day , int *date , int *month , int *year);
+        void displays();
+        void getAlarm(int *alarmsec , int *alarmmin  , int *alarmhours);
+    private:  
+        I2C i2c;
+        DigitDisplay display;
+        bool col;
+};
+
+Clock::Clock(PinName sda,PinName scl):i2c(sda,scl),display(PC_8, PC_6){
+    col=1;
+    display.clear();
+}
+
+void Clock::set(int sec , int min , int hour , int day , int date , int month , int year){
+    char cmd[8];
+    cmd[0] = 0x00;
+    cmd[1] = sec;
+    cmd[2] = min;
+    cmd[3] = hour;
+    cmd[4] = day;
+    cmd[5] = date;
+    cmd[6] = month;
+    cmd[7] = year;
+    i2c.write(Address, cmd, 8);
+}
+
+void Clock::settime2bcd(int sec , int min , int hour , int day , int date , int month , int year){
+    int HBit = 0;
+    int LBit = 0;
+    int Sbcd = 0,Mbcd = 0,Hbcd = 0,DYbcd = 0,DTbcd = 0,MObcd = 0,Ybcd = 0;
+    
+    HBit = sec / 10;
+    LBit = sec % 10;
+    Sbcd = (HBit * 16) + LBit;
+    
+    HBit = min / 10;
+    LBit = min % 10;
+    Mbcd = (HBit * 16) + LBit;
+    
+    HBit = hour / 10;
+    LBit = hour % 10;
+    Hbcd = (HBit * 16) + LBit;
+    
+    HBit = day / 10;
+    LBit = day % 10;
+    DYbcd = (HBit * 16) + LBit;
+    
+    HBit = date / 10;
+    LBit = date % 10;
+    DTbcd = (HBit * 16) + LBit;
+    
+    HBit = month / 10;
+    LBit = month % 10;
+    MObcd = (HBit * 16) + LBit;
+    
+    
+    HBit = year / 10;
+    LBit = year % 10;
+    Ybcd = (HBit * 16) + LBit;
+    
+    set(Sbcd,Mbcd,Hbcd,DYbcd,DTbcd,MObcd,Ybcd);
+}
+
+void Clock::get(int *second , int *minute , int *hours, int *day , int *date , int *month , int *year){
+    int HBit = 0;
+    int LBit = 0;
+    char cmd = 0;
+    char Reads[7];
+    
+    for(int i=0;i<=7;i++){
+        i2c.write(Address, &cmd, 1);
+        i2c.read(Address, &Reads[i], 1);
+        cmd++;
+    }
+    
+    HBit = Reads[0] / 16;
+    LBit = Reads[0] - (HBit * 16);
+    *second = (HBit * 10) + LBit;
+    
+    HBit = Reads[1] / 16;
+    LBit = Reads[1] - (HBit * 16);
+    *minute = (HBit * 10) + LBit;
+    
+    HBit = Reads[2] / 16;
+    LBit = Reads[2] - (HBit * 16);
+    *hours = (HBit * 10) + LBit;
+    
+    HBit = Reads[0] / 16;
+    LBit = Reads[0] - (HBit * 16);
+    *day = (HBit * 10) + LBit;
+    
+    HBit = Reads[1] / 16;
+    LBit = Reads[1] - (HBit * 16);
+    *date = (HBit * 10) + LBit;
+    
+    HBit = Reads[2] / 16;
+    LBit = Reads[2] - (HBit * 16);
+    *month = (HBit * 10) + LBit;
+    
+    HBit = Reads[0] / 16;
+    LBit = Reads[0] - (HBit * 16);
+    *year = (HBit * 10) + LBit;
+}
+
+void Clock::displays(){
+    int second,minute,hours,day,date,month,year;
+    if(col){display.setColon(1);col=0;}
+    else {display.setColon(0);col=1;}
+    get(&second , &minute , &hours, &day , &date , &month , &year);
+    display.write(0, hours / 10);
+    display.write(1, hours % 10);
+    display.write(2, minute / 10);
+    display.write(3, minute % 10);
+}
+
+void Clock::getAlarm(int *alarmsec , int *alarmmin  , int *alarmhours){
+    int HBit = 0;
+    int LBit = 0;
+    char cmd = 0;
+    char ReadAlarm[4];
+    
+    for(int j=0;j<=4;j++){
+        i2c.write(Address, &cmd, 1);
+        i2c.read(Address, &ReadAlarm[j], 1);
+        cmd++;
+    }
+    
+    HBit = ReadAlarm[0] / 16;
+    LBit = ReadAlarm[0] - (HBit * 16);
+    *alarmsec = (HBit * 10) + LBit;
+    
+    HBit = ReadAlarm[1] / 16;
+    LBit = ReadAlarm[1] - (HBit * 16);
+    *alarmmin = (HBit * 10) + LBit;
+    
+    HBit = ReadAlarm[2] / 16;
+    LBit = ReadAlarm[2] - (HBit * 16);
+    *alarmhours = (HBit * 10) + LBit;
+}
\ No newline at end of file