Clock Shield
Clock.h
- Committer:
- mmoodevil
- Date:
- 2015-12-07
- Revision:
- 0:47ccd6ffe435
File content as of revision 0:47ccd6ffe435:
#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; }