Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of RTC8564NB_Clock by
RTC.h
00001 #ifndef RTC_H 00002 #define RTC_H 00003 00004 #include "mbed.h" 00005 #include "GLCD_spi.h" 00006 #include "TouchMenu.h" 00007 00008 #define RTC8563 0xA2 00009 00010 #define CONTROL1 0x00 00011 #define CONTROL2 0x01 00012 #define SECONDS 0x02 00013 #define MINUTES 0x03 00014 #define HOURS 0x04 00015 #define DAYS 0x05 00016 #define WEEKDAYS 0x06 00017 #define MONTHS 0x07 00018 #define YEARS 0x08 00019 #define MINUTE_ALARM 0x09 00020 #define HOUR_ALARM 0x0A 00021 #define DAY_ALARM 0x0B 00022 #define WEEKDAY_ALARM 0x0C 00023 #define CLOCKOUT_FREQ 0x0D 00024 #define TIMER_CINTROL 0x0E 00025 #define TIMER 0x0F 00026 #define _READ 0x01 00027 00028 I2C i2c(PTE0, PTE1); //SDA, SCL 00029 TouchRun TchR2; 00030 DigitalOut K_LED(LED1), P_LED(LED3), Z_LED(LED2); 00031 00032 00033 char year, month, day, week, hour, minute, sec; 00034 int iyear, imonth, iday, iweek, ihour, iminute, isec; 00035 char ntp_year[3], ntp_month[3], ntp_day[3], ntp_week[4]; 00036 char ntp_hour[3], ntp_minute[3], ntp_sec[3]; 00037 char week_val; 00038 00039 char week_chr[7][4] = {"Vas","Het","Ked","Sze","Csu","Pen","Szo"}; 00040 //------------------------------------------------------------------- 00041 void rtc_write(char address, char value){ 00042 i2c.start(); 00043 i2c.write(RTC8563); 00044 i2c.write(address); 00045 i2c.write(value); 00046 i2c.stop(); 00047 } 00048 //------------------------------------------------------------------- 00049 char rtc_read(char address){ 00050 char value; 00051 i2c.start(); 00052 i2c.write(RTC8563); 00053 i2c.write(address); 00054 i2c.start(); 00055 i2c.write(RTC8563 | _READ); 00056 value = i2c.read(0); 00057 i2c.stop(); 00058 00059 return value; 00060 } 00061 //------------------------------------------------------------------- 00062 void time_just(){ 00063 char _min, _hour; 00064 //test_led = !test_led; 00065 _min = rtc_read(MINUTES); 00066 if (_min >= 0x30) { 00067 _hour = rtc_read(HOURS); 00068 if (_hour == 0x23) 00069 _hour = 0x00; 00070 else if ((_hour & 0x0F) == 0x09) 00071 _hour = (_hour & 0xF0) + 0x10; 00072 else 00073 _hour = _hour + 0x01; 00074 rtc_write(HOURS, _hour); 00075 } 00076 rtc_write(MINUTES, 0x00); 00077 rtc_write(SECONDS, 0x00); 00078 } 00079 //------------------------------------------------------------------ 00080 void rtc_reset(){ 00081 //just_button.rise(&time_just); 00082 00083 lcd_cls(); 00084 lcd_string(2,1,"RTC8563 CLOCK RESET" ); 00085 wait(1); 00086 00087 rtc_write(CONTROL1, 0x20); //stop 00088 rtc_write(CONTROL2, 0x00); 00089 rtc_write(YEARS, 0x36); //((ntp_year[0]-0x30)<<4)+(ntp_year[1]-0x30)); 00090 rtc_write(MONTHS,0x02); //((ntp_month[0]-0x30)<<4)+(ntp_month[1]-0x30)); 00091 rtc_write(DAYS, 0x03); //((ntp_day[0]-0x30)<<4)+(ntp_day[1]-0x30)); 00092 rtc_write(HOURS, 0x04); //((ntp_hour[0]-0x30)<<4)+(ntp_hour[1]-0x30)); 00093 rtc_write(MINUTES,0x05); //((ntp_minute[0]-0x30)<<4)+(ntp_minute[1]-0x30)); 00094 rtc_write(SECONDS,0x00); //((ntp_sec[0]-0x30)<<4)+(ntp_sec[1]-0x30)); 00095 rtc_write(WEEKDAYS, week_val); 00096 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz 00097 rtc_write(TIMER_CINTROL, 0x00); 00098 rtc_write(CONTROL1, 0x00); //start 00099 } 00100 //------------------------------------------------------------------ 00101 void rtc_data_read(){ 00102 i2c.start(); 00103 i2c.write(0xA2); 00104 i2c.write(0x02); 00105 i2c.stop(); 00106 i2c.start(); 00107 i2c.write(0xA3); 00108 sec = i2c.read(SECONDS) & 0x7F; 00109 minute = i2c.read(MINUTES) & 0x7F; 00110 hour = i2c.read(HOURS) & 0x3F; 00111 day = i2c.read(DAYS) & 0x3F; 00112 week = i2c.read(WEEKDAYS) & 0x07; 00113 month = i2c.read(MONTHS) & 0x1F; 00114 year = i2c.read(YEARS); 00115 i2c.stop(); 00116 00117 00118 //lcd.locate(0,0); 00119 sprintf(buffer,"%c%c/%c%c/%c%c %s", 00120 ((year >> 4) & 0x0F) + 0x30, (year & 0x0F) + 0x30, //int((year >> 4)& 0x0F)*10 + int(year & 0x0F), 00121 ((month >> 4) & 0x01) + 0x30, (month & 0x0F) + 0x30, 00122 ((day >> 4) & 0x03)+ 0x30, (day & 0x0F) + 0x30, 00123 week_chr[week & 0x07]); 00124 lcd_string(0,0,buffer); 00125 //lcd.locate(0,1); 00126 sprintf(buffer,"%c%c:%c%c:%c%c", 00127 ((hour >> 4) & 0x03) + 0x30, (hour & 0x0F) + 0x30, 00128 (minute >> 4) + 0x30, (minute & 0x0F) + 0x30, 00129 (sec >> 4) + 0x30, (sec & 0x0F) + 0x30 ); 00130 lcd_string(0,13,buffer); 00131 } 00132 //-------------------------------------------------------------- 00133 void rtc_data_set(){ 00134 00135 rtc_data_read(); 00136 //-------------------------------------------------- 00137 year = (int)((((year >> 4)& 0x0F)*10) + (year & 0x0F)); 00138 00139 sprintf(buffer,"Year: "); 00140 year = SetBox(year, 0, 99); 00141 Bip(1,1); 00142 00143 sprintf(buffer,"%d",year); 00144 if(year > 9){ // két helyiértékesetén 00145 year = buffer[0] & 0x0F; 00146 year = (year<<4) + (buffer[1] & 0x0F); 00147 }else{ // egy helyiérték esetén 00148 year = buffer[0] & 0x0F; 00149 } 00150 // a visszaalakítás azonos mint a beolvasásnál 00151 //sprintf(buffer,"Year:%c%c", ((year >> 4) & 0x0F) + 0x30, (year & 0x0F) + 0x30); 00152 //lcd_string(5,0,buffer); 00153 //-------------------------------------------------- 00154 month = (int)((((month >> 4)& 0x01)*10) + (month & 0x0F)); 00155 00156 sprintf(buffer,"Month: "); 00157 month = SetBox(month, 1, 12); 00158 Bip(1,1); 00159 00160 sprintf(buffer,"%d",month); 00161 if(month > 9){ // két helyiértékesetén 00162 month = buffer[0] & 0x0F; 00163 month = (month<<4) + (buffer[1] & 0x0F); 00164 }else{ // egy helyiérték esetén 00165 month = buffer[0] & 0x0F; 00166 } 00167 //-------------------------------------------------- 00168 day = (int)((((day >> 4)& 0x03)*10) + (day & 0x0F)); 00169 00170 sprintf(buffer,"Day: "); 00171 day = SetBox(day, 1, 31); 00172 Bip(1,1); 00173 00174 sprintf(buffer,"%d",day); 00175 if(day > 9){ // két helyiértékesetén 00176 day = buffer[0] & 0x0F; 00177 day = (day<<4) + (buffer[1] & 0x0F); 00178 }else{ // egy helyiérték esetén 00179 day = buffer[0] & 0x0F; 00180 } 00181 00182 //-------------------------------------------------- 00183 week = (int)((((week >> 4)& 0x03)*10) + (week & 0x0F)); 00184 00185 sprintf(buffer,"Week: "); 00186 week = SetBox(week + 1, 1, 7); 00187 Bip(1,1); 00188 00189 sprintf(buffer,"%d",week - 1); 00190 if(week > 9){ // két helyiértékesetén 00191 week = buffer[0] & 0x0F; 00192 week = (week<<4) + (buffer[1] & 0x0F); 00193 }else{ // egy helyiérték esetén 00194 week = buffer[0] & 0x0F; 00195 } 00196 00197 //-------------------------------------------------- 00198 hour = (int)((((hour >> 4)& 0x03)*10) + (hour & 0x0F)); 00199 00200 sprintf(buffer,"Hour: "); 00201 hour = SetBox(hour, 0, 23); 00202 Bip(1,1); 00203 00204 sprintf(buffer,"%d",hour); 00205 if(hour > 9){ // két helyiértékesetén 00206 hour = buffer[0] & 0x0F; 00207 hour = (hour<<4) + (buffer[1] & 0x0F); 00208 }else{ // egy helyiérték esetén 00209 hour = buffer[0] & 0x0F; 00210 } 00211 00212 //-------------------------------------------------- 00213 minute = (int)((((minute >> 4)& 0x07)*10) + (minute & 0x0F)); 00214 00215 sprintf(buffer,"Minute: "); 00216 minute = SetBox(minute, 0, 23); 00217 Bip(1,1); 00218 00219 sprintf(buffer,"%d",minute); 00220 if(minute > 9){ // két helyiértékesetén 00221 minute = buffer[0] & 0x0F; 00222 minute = (minute<<4) + (buffer[1] & 0x0F); 00223 }else{ // egy helyiérték esetén 00224 minute = buffer[0] & 0x0F; 00225 } 00226 //------------------------------------------------- 00227 00228 rtc_write(CONTROL1, 0x20); //stop 00229 rtc_write(CONTROL2, 0x00); 00230 rtc_write(YEARS, year); //((ntp_year[0]-0x30)<<4)+(ntp_year[1]-0x30)); 00231 rtc_write(MONTHS,month); 00232 rtc_write(DAYS, day); 00233 rtc_write(WEEKDAYS,week); 00234 rtc_write(HOURS, hour); 00235 rtc_write(MINUTES, minute); 00236 rtc_write(SECONDS,0x00); 00237 rtc_write(CONTROL1, 0x00); //start 00238 } 00239 00240 00241 00242 00243 00244 00245 00246 #endif
Generated on Mon Jul 18 2022 01:34:26 by
1.7.2
