Dependencies:   mbed

Committer:
annodomini2
Date:
Wed Dec 09 21:32:36 2009 +0000
Revision:
0:0bbbe06425db

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
annodomini2 0:0bbbe06425db 1 /////////////////////////////////////////////////////////////////////////////
annodomini2 0:0bbbe06425db 2 // Binary Clock //
annodomini2 0:0bbbe06425db 3 // //
annodomini2 0:0bbbe06425db 4 // Author Created //
annodomini2 0:0bbbe06425db 5 // ------ ------- //
annodomini2 0:0bbbe06425db 6 // Andrew Harpin 09 December 2009 //
annodomini2 0:0bbbe06425db 7 // //
annodomini2 0:0bbbe06425db 8 // Purpose //
annodomini2 0:0bbbe06425db 9 // ------- //
annodomini2 0:0bbbe06425db 10 // Create a simple program to test the RTC and serial controls //
annodomini2 0:0bbbe06425db 11 // on the Mbed device //
annodomini2 0:0bbbe06425db 12 // //
annodomini2 0:0bbbe06425db 13 // License //
annodomini2 0:0bbbe06425db 14 // ------- //
annodomini2 0:0bbbe06425db 15 // MIT Open Source //
annodomini2 0:0bbbe06425db 16 // //
annodomini2 0:0bbbe06425db 17 // Warranty //
annodomini2 0:0bbbe06425db 18 // -------- //
annodomini2 0:0bbbe06425db 19 // None //
annodomini2 0:0bbbe06425db 20 // //
annodomini2 0:0bbbe06425db 21 /////////////////////////////////////////////////////////////////////////////
annodomini2 0:0bbbe06425db 22
annodomini2 0:0bbbe06425db 23 #include "mbed.h"
annodomini2 0:0bbbe06425db 24
annodomini2 0:0bbbe06425db 25 // Define your outputs
annodomini2 0:0bbbe06425db 26 DigitalOut Sec1(p5);
annodomini2 0:0bbbe06425db 27 DigitalOut Sec2(p7);
annodomini2 0:0bbbe06425db 28 DigitalOut Sec4(p9);
annodomini2 0:0bbbe06425db 29 DigitalOut Sec8(p11);
annodomini2 0:0bbbe06425db 30 DigitalOut Sec16(p13);
annodomini2 0:0bbbe06425db 31 DigitalOut Sec32(p15);
annodomini2 0:0bbbe06425db 32
annodomini2 0:0bbbe06425db 33 DigitalOut Min1(p30);
annodomini2 0:0bbbe06425db 34 DigitalOut Min2(p28);
annodomini2 0:0bbbe06425db 35 DigitalOut Min4(p26);
annodomini2 0:0bbbe06425db 36 DigitalOut Min8(p24);
annodomini2 0:0bbbe06425db 37 DigitalOut Min16(p22);
annodomini2 0:0bbbe06425db 38 DigitalOut Min32(p21);
annodomini2 0:0bbbe06425db 39
annodomini2 0:0bbbe06425db 40 DigitalOut Hour1(LED4);
annodomini2 0:0bbbe06425db 41 DigitalOut Hour2(LED3);
annodomini2 0:0bbbe06425db 42 DigitalOut Hour4(LED2);
annodomini2 0:0bbbe06425db 43 DigitalOut Hour8(LED1);
annodomini2 0:0bbbe06425db 44 DigitalOut Hour16(p20);
annodomini2 0:0bbbe06425db 45
annodomini2 0:0bbbe06425db 46 void setnewtime();
annodomini2 0:0bbbe06425db 47
annodomini2 0:0bbbe06425db 48 int main()
annodomini2 0:0bbbe06425db 49 {
annodomini2 0:0bbbe06425db 50 // Get the current time
annodomini2 0:0bbbe06425db 51 time_t seconds = time(NULL);
annodomini2 0:0bbbe06425db 52
annodomini2 0:0bbbe06425db 53 // Check clock is initialised
annodomini2 0:0bbbe06425db 54 if((seconds < 500) || (seconds == 0xFFFFFFF))
annodomini2 0:0bbbe06425db 55 {
annodomini2 0:0bbbe06425db 56 setnewtime();
annodomini2 0:0bbbe06425db 57 }
annodomini2 0:0bbbe06425db 58
annodomini2 0:0bbbe06425db 59 struct tm *tmr;
annodomini2 0:0bbbe06425db 60
annodomini2 0:0bbbe06425db 61 // You're doing this forever, MWWWAAHAHAHAAA!!!!
annodomini2 0:0bbbe06425db 62 while (1)
annodomini2 0:0bbbe06425db 63 {
annodomini2 0:0bbbe06425db 64 // Get latest time
annodomini2 0:0bbbe06425db 65 seconds = time(NULL);
annodomini2 0:0bbbe06425db 66
annodomini2 0:0bbbe06425db 67 // Print to serial
annodomini2 0:0bbbe06425db 68 char buffer[32];
annodomini2 0:0bbbe06425db 69 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
annodomini2 0:0bbbe06425db 70 printf("%s", buffer);
annodomini2 0:0bbbe06425db 71
annodomini2 0:0bbbe06425db 72 // Put time in accessible format
annodomini2 0:0bbbe06425db 73 tmr = localtime(&seconds);
annodomini2 0:0bbbe06425db 74
annodomini2 0:0bbbe06425db 75 // Seconds
annodomini2 0:0bbbe06425db 76 Sec1 = (bool)(((uint8_t)tmr->tm_sec) & 0x01);
annodomini2 0:0bbbe06425db 77 Sec2 = (bool)((((uint8_t)tmr->tm_sec) & 0x02) >> 1);
annodomini2 0:0bbbe06425db 78 Sec4 = (bool)((((uint8_t)tmr->tm_sec) & 0x04) >> 2);
annodomini2 0:0bbbe06425db 79 Sec8 = (bool)((((uint8_t)tmr->tm_sec) & 0x08) >> 3);
annodomini2 0:0bbbe06425db 80 Sec16 = (bool)((((uint8_t)tmr->tm_sec) & 0x10) >> 4);
annodomini2 0:0bbbe06425db 81 Sec32 = (bool)((((uint8_t)tmr->tm_sec) & 0x20) >> 5);
annodomini2 0:0bbbe06425db 82
annodomini2 0:0bbbe06425db 83 // Minutes
annodomini2 0:0bbbe06425db 84 Min1 = (bool)(((uint8_t)tmr->tm_min) & 0x01);
annodomini2 0:0bbbe06425db 85 Min2 = (bool)((((uint8_t)tmr->tm_min) & 0x02) >> 1);
annodomini2 0:0bbbe06425db 86 Min4 = (bool)((((uint8_t)tmr->tm_min) & 0x04) >> 2);
annodomini2 0:0bbbe06425db 87 Min8 = (bool)((((uint8_t)tmr->tm_min) & 0x08) >> 3);
annodomini2 0:0bbbe06425db 88 Min16 = (bool)((((uint8_t)tmr->tm_min) & 0x10) >> 4);
annodomini2 0:0bbbe06425db 89 Min32 = (bool)((((uint8_t)tmr->tm_min) & 0x20) >> 5);
annodomini2 0:0bbbe06425db 90
annodomini2 0:0bbbe06425db 91 // Hours
annodomini2 0:0bbbe06425db 92 Hour1 = (bool)(((uint8_t)tmr->tm_hour) & 0x01);
annodomini2 0:0bbbe06425db 93 Hour2 = (bool)((((uint8_t)tmr->tm_hour) & 0x02) >> 1);
annodomini2 0:0bbbe06425db 94 Hour4 = (bool)((((uint8_t)tmr->tm_hour) & 0x04) >> 2);
annodomini2 0:0bbbe06425db 95 Hour8 = (bool)((((uint8_t)tmr->tm_hour) & 0x08) >> 3);
annodomini2 0:0bbbe06425db 96 Hour16 = (bool)((((uint8_t)tmr->tm_hour) & 0x10) >> 4);
annodomini2 0:0bbbe06425db 97
annodomini2 0:0bbbe06425db 98 wait(1); // Not my favorite method, but its easy
annodomini2 0:0bbbe06425db 99 }
annodomini2 0:0bbbe06425db 100 }
annodomini2 0:0bbbe06425db 101
annodomini2 0:0bbbe06425db 102 void setnewtime()
annodomini2 0:0bbbe06425db 103 {
annodomini2 0:0bbbe06425db 104 struct tm t;
annodomini2 0:0bbbe06425db 105 uint8_t day_limit = 0;
annodomini2 0:0bbbe06425db 106
annodomini2 0:0bbbe06425db 107 printf("\n\n*******************************\n");
annodomini2 0:0bbbe06425db 108 printf("Real Time Clock setting utility\n");
annodomini2 0:0bbbe06425db 109 printf("*******************************\n\n");
annodomini2 0:0bbbe06425db 110
annodomini2 0:0bbbe06425db 111 // Years
annodomini2 0:0bbbe06425db 112 t.tm_year = -1; // Initialise
annodomini2 0:0bbbe06425db 113
annodomini2 0:0bbbe06425db 114 do
annodomini2 0:0bbbe06425db 115 {
annodomini2 0:0bbbe06425db 116 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 117 printf("\nEnter Year 1900- : ");
annodomini2 0:0bbbe06425db 118 scanf("%d",&t.tm_year);
annodomini2 0:0bbbe06425db 119
annodomini2 0:0bbbe06425db 120 // Validate entry
annodomini2 0:0bbbe06425db 121 if((t.tm_year < 1900))
annodomini2 0:0bbbe06425db 122 {
annodomini2 0:0bbbe06425db 123 t.tm_year = -1;
annodomini2 0:0bbbe06425db 124 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 125 }
annodomini2 0:0bbbe06425db 126 } while(t.tm_year < 0);
annodomini2 0:0bbbe06425db 127
annodomini2 0:0bbbe06425db 128 // Months
annodomini2 0:0bbbe06425db 129 t.tm_mon = -1; // Initialise
annodomini2 0:0bbbe06425db 130
annodomini2 0:0bbbe06425db 131 do
annodomini2 0:0bbbe06425db 132 {
annodomini2 0:0bbbe06425db 133 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 134 printf("\nEnter month 1-12 : ");
annodomini2 0:0bbbe06425db 135 scanf("%d",&t.tm_mon);
annodomini2 0:0bbbe06425db 136
annodomini2 0:0bbbe06425db 137 // Validate entry
annodomini2 0:0bbbe06425db 138 if((t.tm_mon < 1) || (t.tm_mon > 12))
annodomini2 0:0bbbe06425db 139 {
annodomini2 0:0bbbe06425db 140 t.tm_mon = -1;
annodomini2 0:0bbbe06425db 141 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 142 }
annodomini2 0:0bbbe06425db 143 } while(t.tm_mon < 0);
annodomini2 0:0bbbe06425db 144
annodomini2 0:0bbbe06425db 145 // Determine maximum number of days in the assigned month
annodomini2 0:0bbbe06425db 146 switch(t.tm_mon)
annodomini2 0:0bbbe06425db 147 {
annodomini2 0:0bbbe06425db 148 case 1:
annodomini2 0:0bbbe06425db 149 case 3:
annodomini2 0:0bbbe06425db 150 case 5:
annodomini2 0:0bbbe06425db 151 case 7:
annodomini2 0:0bbbe06425db 152 case 8:
annodomini2 0:0bbbe06425db 153 case 10:
annodomini2 0:0bbbe06425db 154 case 12:
annodomini2 0:0bbbe06425db 155 day_limit = 31;
annodomini2 0:0bbbe06425db 156 break;
annodomini2 0:0bbbe06425db 157
annodomini2 0:0bbbe06425db 158 case 2:
annodomini2 0:0bbbe06425db 159 day_limit = 28;
annodomini2 0:0bbbe06425db 160 break;
annodomini2 0:0bbbe06425db 161
annodomini2 0:0bbbe06425db 162 case 4:
annodomini2 0:0bbbe06425db 163 case 6:
annodomini2 0:0bbbe06425db 164 case 9:
annodomini2 0:0bbbe06425db 165 case 11:
annodomini2 0:0bbbe06425db 166 day_limit = 30;
annodomini2 0:0bbbe06425db 167 break;
annodomini2 0:0bbbe06425db 168 }
annodomini2 0:0bbbe06425db 169
annodomini2 0:0bbbe06425db 170 // Days
annodomini2 0:0bbbe06425db 171 t.tm_mday = -1; // Initialise
annodomini2 0:0bbbe06425db 172
annodomini2 0:0bbbe06425db 173 do
annodomini2 0:0bbbe06425db 174 {
annodomini2 0:0bbbe06425db 175 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 176 printf("\nEnter day 1-%d : ",day_limit);
annodomini2 0:0bbbe06425db 177 scanf("%d",&t.tm_mday);
annodomini2 0:0bbbe06425db 178
annodomini2 0:0bbbe06425db 179 // Validate entry
annodomini2 0:0bbbe06425db 180 if((t.tm_mday < 1) || (t.tm_mday > day_limit))
annodomini2 0:0bbbe06425db 181 {
annodomini2 0:0bbbe06425db 182 t.tm_mday = -1;
annodomini2 0:0bbbe06425db 183 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 184 }
annodomini2 0:0bbbe06425db 185 } while(t.tm_mday < 0);
annodomini2 0:0bbbe06425db 186
annodomini2 0:0bbbe06425db 187
annodomini2 0:0bbbe06425db 188 // Hours
annodomini2 0:0bbbe06425db 189 t.tm_hour = -1; // Initialise
annodomini2 0:0bbbe06425db 190
annodomini2 0:0bbbe06425db 191 do
annodomini2 0:0bbbe06425db 192 {
annodomini2 0:0bbbe06425db 193 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 194 printf("\nEnter Hours 0-23 : ");
annodomini2 0:0bbbe06425db 195 scanf("%d",&t.tm_hour);
annodomini2 0:0bbbe06425db 196
annodomini2 0:0bbbe06425db 197 // Validate entry
annodomini2 0:0bbbe06425db 198 if((t.tm_hour < 0) || (t.tm_hour > 23))
annodomini2 0:0bbbe06425db 199 {
annodomini2 0:0bbbe06425db 200 t.tm_hour = -1;
annodomini2 0:0bbbe06425db 201 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 202 }
annodomini2 0:0bbbe06425db 203 } while(t.tm_hour < 0);
annodomini2 0:0bbbe06425db 204
annodomini2 0:0bbbe06425db 205 // Minutes
annodomini2 0:0bbbe06425db 206 t.tm_min = -1; // Initialise
annodomini2 0:0bbbe06425db 207
annodomini2 0:0bbbe06425db 208 do
annodomini2 0:0bbbe06425db 209 {
annodomini2 0:0bbbe06425db 210 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 211 printf("\nEnter Minutes 0-59 : ");
annodomini2 0:0bbbe06425db 212 scanf("%d",&t.tm_min);
annodomini2 0:0bbbe06425db 213
annodomini2 0:0bbbe06425db 214 // Validate entry
annodomini2 0:0bbbe06425db 215 if((t.tm_min < 0) || (t.tm_min > 59))
annodomini2 0:0bbbe06425db 216 {
annodomini2 0:0bbbe06425db 217 t.tm_min = -1;
annodomini2 0:0bbbe06425db 218 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 219 }
annodomini2 0:0bbbe06425db 220 } while(t.tm_min < 0);
annodomini2 0:0bbbe06425db 221
annodomini2 0:0bbbe06425db 222
annodomini2 0:0bbbe06425db 223 // Seconds
annodomini2 0:0bbbe06425db 224 t.tm_sec = -1; // Initialise
annodomini2 0:0bbbe06425db 225
annodomini2 0:0bbbe06425db 226 do
annodomini2 0:0bbbe06425db 227 {
annodomini2 0:0bbbe06425db 228 // Print request and wait for user entry
annodomini2 0:0bbbe06425db 229 printf("\nEnter Seconds 0-59 : ");
annodomini2 0:0bbbe06425db 230 scanf("%d",&t.tm_sec);
annodomini2 0:0bbbe06425db 231
annodomini2 0:0bbbe06425db 232 // Validate entry
annodomini2 0:0bbbe06425db 233 if((t.tm_sec < 0) || (t.tm_sec > 59))
annodomini2 0:0bbbe06425db 234 {
annodomini2 0:0bbbe06425db 235 t.tm_sec = -1;
annodomini2 0:0bbbe06425db 236 printf("\nInvalid Value!!! ");
annodomini2 0:0bbbe06425db 237 }
annodomini2 0:0bbbe06425db 238 } while(t.tm_sec < 0);
annodomini2 0:0bbbe06425db 239
annodomini2 0:0bbbe06425db 240 // adjust for tm structure required values
annodomini2 0:0bbbe06425db 241 t.tm_year = t.tm_year - 1900;
annodomini2 0:0bbbe06425db 242 t.tm_mon = t.tm_mon - 1;
annodomini2 0:0bbbe06425db 243
annodomini2 0:0bbbe06425db 244 // set the time
annodomini2 0:0bbbe06425db 245 set_time(mktime(&t));
annodomini2 0:0bbbe06425db 246
annodomini2 0:0bbbe06425db 247 printf("\n\nAnd you're done!\n\nTime now : \n\n");
annodomini2 0:0bbbe06425db 248 }