Read NTP time from Ethernet and drive six 7-segment LEDs using a MAX7221 to show time, date, month, week, year etc....
Dependencies: NTPClient_NetServices mbed
main.cpp@0:e083abcfe7a8, 2011-06-22 (annotated)
- Committer:
- cheungderek
- Date:
- Wed Jun 22 01:31:47 2011 +0000
- Revision:
- 0:e083abcfe7a8
First release.
Just some testing but working code to read NTP time and drive 6 LEDs to display time, date, month, year etc...
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cheungderek | 0:e083abcfe7a8 | 1 | /************************************************************* |
cheungderek | 0:e083abcfe7a8 | 2 | Author: Derek Cheung |
cheungderek | 0:e083abcfe7a8 | 3 | Email: cheungderek@hotmail.com |
cheungderek | 0:e083abcfe7a8 | 4 | Web: http://clients.teksavvy.com/~cheungderek |
cheungderek | 0:e083abcfe7a8 | 5 | Date: 21 Jun 2011 |
cheungderek | 0:e083abcfe7a8 | 6 | Note: Just some testing but working code |
cheungderek | 0:e083abcfe7a8 | 7 | Read NTP time and date to show Time, Date, Month, |
cheungderek | 0:e083abcfe7a8 | 8 | Year automatically using MAX7221 to drive 6 LEDs |
cheungderek | 0:e083abcfe7a8 | 9 | See my home page for details |
cheungderek | 0:e083abcfe7a8 | 10 | *************************************************************/ |
cheungderek | 0:e083abcfe7a8 | 11 | |
cheungderek | 0:e083abcfe7a8 | 12 | #include "mbed.h" |
cheungderek | 0:e083abcfe7a8 | 13 | #include "EthernetNetIf.h" |
cheungderek | 0:e083abcfe7a8 | 14 | #include "HTTPClient.h" |
cheungderek | 0:e083abcfe7a8 | 15 | #include "TextLCD.h" |
cheungderek | 0:e083abcfe7a8 | 16 | #include "NTPClient.h" |
cheungderek | 0:e083abcfe7a8 | 17 | #include "Max7221.h" |
cheungderek | 0:e083abcfe7a8 | 18 | |
cheungderek | 0:e083abcfe7a8 | 19 | #define BLINK_PERIOD 1.8 // LED on period (Initial data) |
cheungderek | 0:e083abcfe7a8 | 20 | #define END_PERIOD 0.0001 // Finish period |
cheungderek | 0:e083abcfe7a8 | 21 | |
cheungderek | 0:e083abcfe7a8 | 22 | DigitalOut myled1(LED1); // Assign LED output port LED1 to LED4 |
cheungderek | 0:e083abcfe7a8 | 23 | DigitalOut myled2(LED2); |
cheungderek | 0:e083abcfe7a8 | 24 | DigitalOut myled3(LED3); |
cheungderek | 0:e083abcfe7a8 | 25 | DigitalOut myled4(LED4); |
cheungderek | 0:e083abcfe7a8 | 26 | |
cheungderek | 0:e083abcfe7a8 | 27 | TextLCD lcd(p15, p16, p17, p26, p25, p24, p23, 16, 2); // rs,rw,e,d0,d1,d2,d3,16char's x 2 lines |
cheungderek | 0:e083abcfe7a8 | 28 | SPI max7221_spi(p5, p6, p7, "max7221"); // mosi, miso, sclk |
cheungderek | 0:e083abcfe7a8 | 29 | DigitalOut max7221_cs(p8); |
cheungderek | 0:e083abcfe7a8 | 30 | Serial pc(USBTX, USBRX); // tx, rx |
cheungderek | 0:e083abcfe7a8 | 31 | |
cheungderek | 0:e083abcfe7a8 | 32 | unsigned int dec2bcd(unsigned int dec); |
cheungderek | 0:e083abcfe7a8 | 33 | void max7221_control(unsigned control); |
cheungderek | 0:e083abcfe7a8 | 34 | void display_weekOfDay_month(struct tm *tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 35 | void display_day_year(struct tm *tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 36 | |
cheungderek | 0:e083abcfe7a8 | 37 | |
cheungderek | 0:e083abcfe7a8 | 38 | /* |
cheungderek | 0:e083abcfe7a8 | 39 | #include "USBHost.h" |
cheungderek | 0:e083abcfe7a8 | 40 | #include "Utils.h" |
cheungderek | 0:e083abcfe7a8 | 41 | #include "FATFileSystem.h" |
cheungderek | 0:e083abcfe7a8 | 42 | void TestShell(); |
cheungderek | 0:e083abcfe7a8 | 43 | */ |
cheungderek | 0:e083abcfe7a8 | 44 | EthernetNetIf eth; |
cheungderek | 0:e083abcfe7a8 | 45 | |
cheungderek | 0:e083abcfe7a8 | 46 | int main() { |
cheungderek | 0:e083abcfe7a8 | 47 | |
cheungderek | 0:e083abcfe7a8 | 48 | float tim; |
cheungderek | 0:e083abcfe7a8 | 49 | char buf[40]; |
cheungderek | 0:e083abcfe7a8 | 50 | struct tm *tm_ptr; |
cheungderek | 0:e083abcfe7a8 | 51 | unsigned int tmp_int; |
cheungderek | 0:e083abcfe7a8 | 52 | char *test_ptr; |
cheungderek | 0:e083abcfe7a8 | 53 | time_t ctTime; |
cheungderek | 0:e083abcfe7a8 | 54 | |
cheungderek | 0:e083abcfe7a8 | 55 | NTPClient ntp; |
cheungderek | 0:e083abcfe7a8 | 56 | |
cheungderek | 0:e083abcfe7a8 | 57 | // Setup the spi for 16 bit data, sample at falling edge clcok at 1MHz |
cheungderek | 0:e083abcfe7a8 | 58 | max7221_spi.format(16,0); |
cheungderek | 0:e083abcfe7a8 | 59 | max7221_spi.frequency(1000000); |
cheungderek | 0:e083abcfe7a8 | 60 | |
cheungderek | 0:e083abcfe7a8 | 61 | // shutdown operation |
cheungderek | 0:e083abcfe7a8 | 62 | // max7221_spi.write(0x0C00); |
cheungderek | 0:e083abcfe7a8 | 63 | |
cheungderek | 0:e083abcfe7a8 | 64 | // turn on all display |
cheungderek | 0:e083abcfe7a8 | 65 | max7221_control(0x0F01); |
cheungderek | 0:e083abcfe7a8 | 66 | |
cheungderek | 0:e083abcfe7a8 | 67 | // set normal operation |
cheungderek | 0:e083abcfe7a8 | 68 | max7221_control(0x0F00); |
cheungderek | 0:e083abcfe7a8 | 69 | |
cheungderek | 0:e083abcfe7a8 | 70 | // normal operation |
cheungderek | 0:e083abcfe7a8 | 71 | max7221_control(0x0C01); |
cheungderek | 0:e083abcfe7a8 | 72 | |
cheungderek | 0:e083abcfe7a8 | 73 | // sacn 6 LED |
cheungderek | 0:e083abcfe7a8 | 74 | max7221_control(0x0B05); |
cheungderek | 0:e083abcfe7a8 | 75 | |
cheungderek | 0:e083abcfe7a8 | 76 | // BCD mode |
cheungderek | 0:e083abcfe7a8 | 77 | max7221_control(0x09FF); |
cheungderek | 0:e083abcfe7a8 | 78 | |
cheungderek | 0:e083abcfe7a8 | 79 | // full intensity - Derek |
cheungderek | 0:e083abcfe7a8 | 80 | max7221_control(0x0A0F); |
cheungderek | 0:e083abcfe7a8 | 81 | |
cheungderek | 0:e083abcfe7a8 | 82 | // testing the char display on the LEDs |
cheungderek | 0:e083abcfe7a8 | 83 | /* |
cheungderek | 0:e083abcfe7a8 | 84 | tm_ptr = localtime(&ctTime); |
cheungderek | 0:e083abcfe7a8 | 85 | tm_ptr->tm_mon=1; |
cheungderek | 0:e083abcfe7a8 | 86 | tm_ptr->tm_mday = 0; |
cheungderek | 0:e083abcfe7a8 | 87 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 88 | tm_ptr->tm_mon=2; |
cheungderek | 0:e083abcfe7a8 | 89 | tm_ptr->tm_mday = 1; |
cheungderek | 0:e083abcfe7a8 | 90 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 91 | tm_ptr->tm_mon=3; |
cheungderek | 0:e083abcfe7a8 | 92 | tm_ptr->tm_mday = 2; |
cheungderek | 0:e083abcfe7a8 | 93 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 94 | tm_ptr->tm_mon=4; |
cheungderek | 0:e083abcfe7a8 | 95 | tm_ptr->tm_mday = 3; |
cheungderek | 0:e083abcfe7a8 | 96 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 97 | tm_ptr->tm_mon=5; |
cheungderek | 0:e083abcfe7a8 | 98 | tm_ptr->tm_mday = 4; |
cheungderek | 0:e083abcfe7a8 | 99 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 100 | tm_ptr->tm_mon=6; |
cheungderek | 0:e083abcfe7a8 | 101 | tm_ptr->tm_mday = 5; |
cheungderek | 0:e083abcfe7a8 | 102 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 103 | tm_ptr->tm_mon=7; |
cheungderek | 0:e083abcfe7a8 | 104 | tm_ptr->tm_mday = 6; |
cheungderek | 0:e083abcfe7a8 | 105 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 106 | tm_ptr->tm_mon=8; |
cheungderek | 0:e083abcfe7a8 | 107 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 108 | tm_ptr->tm_mon=9; |
cheungderek | 0:e083abcfe7a8 | 109 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 110 | tm_ptr->tm_mon=10; |
cheungderek | 0:e083abcfe7a8 | 111 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 112 | tm_ptr->tm_mon=11; |
cheungderek | 0:e083abcfe7a8 | 113 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 114 | tm_ptr->tm_mon=12; |
cheungderek | 0:e083abcfe7a8 | 115 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 116 | */ |
cheungderek | 0:e083abcfe7a8 | 117 | |
cheungderek | 0:e083abcfe7a8 | 118 | // BCD mode |
cheungderek | 0:e083abcfe7a8 | 119 | // max7221_control(0x09FF); |
cheungderek | 0:e083abcfe7a8 | 120 | |
cheungderek | 0:e083abcfe7a8 | 121 | tim = BLINK_PERIOD; |
cheungderek | 0:e083abcfe7a8 | 122 | lcd.cls(); |
cheungderek | 0:e083abcfe7a8 | 123 | lcd.locate(0, 0); |
cheungderek | 0:e083abcfe7a8 | 124 | |
cheungderek | 0:e083abcfe7a8 | 125 | // 0 1 |
cheungderek | 0:e083abcfe7a8 | 126 | // lcd.printf("1234567890123456"); |
cheungderek | 0:e083abcfe7a8 | 127 | // lcd.locate(0, 1); |
cheungderek | 0:e083abcfe7a8 | 128 | // lcd.printf("Derek Cheung v2"); |
cheungderek | 0:e083abcfe7a8 | 129 | |
cheungderek | 0:e083abcfe7a8 | 130 | // If you have implemented the "Windows USB Serial Port Driver", you can use follows. |
cheungderek | 0:e083abcfe7a8 | 131 | // http://mbed.org/projects/handbook/wiki/WindowsSerialConfiguration |
cheungderek | 0:e083abcfe7a8 | 132 | // printf("\r\n Derek Cheung Twitter Device Control - Setting up...\r\n"); |
cheungderek | 0:e083abcfe7a8 | 133 | EthernetErr ethErr = eth.setup(); |
cheungderek | 0:e083abcfe7a8 | 134 | if (ethErr) { |
cheungderek | 0:e083abcfe7a8 | 135 | printf("Error %d in setup.\n", ethErr); |
cheungderek | 0:e083abcfe7a8 | 136 | lcd.locate(0, 1); |
cheungderek | 0:e083abcfe7a8 | 137 | lcd.printf("Network Failed "); |
cheungderek | 0:e083abcfe7a8 | 138 | } |
cheungderek | 0:e083abcfe7a8 | 139 | printf("\r\n Network Connection Setup OK\r\n"); |
cheungderek | 0:e083abcfe7a8 | 140 | |
cheungderek | 0:e083abcfe7a8 | 141 | HTTPClient twitter; |
cheungderek | 0:e083abcfe7a8 | 142 | |
cheungderek | 0:e083abcfe7a8 | 143 | HTTPMap msg; |
cheungderek | 0:e083abcfe7a8 | 144 | msg["status"] = "Twitter Control logon successfully"; //A good example of Key/Value pair use with Web APIs |
cheungderek | 0:e083abcfe7a8 | 145 | |
cheungderek | 0:e083abcfe7a8 | 146 | twitter.basicAuth("cheungderek", "34563456"); //We use basic authentication, replace with you account's parameters |
cheungderek | 0:e083abcfe7a8 | 147 | |
cheungderek | 0:e083abcfe7a8 | 148 | //No need to retieve data sent back by the server |
cheungderek | 0:e083abcfe7a8 | 149 | HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); |
cheungderek | 0:e083abcfe7a8 | 150 | if ( r == HTTP_OK ) { |
cheungderek | 0:e083abcfe7a8 | 151 | printf("Tweet sent with success!\n"); |
cheungderek | 0:e083abcfe7a8 | 152 | } else { |
cheungderek | 0:e083abcfe7a8 | 153 | printf("Problem during tweeting, return code %d\n", r); |
cheungderek | 0:e083abcfe7a8 | 154 | } |
cheungderek | 0:e083abcfe7a8 | 155 | |
cheungderek | 0:e083abcfe7a8 | 156 | lcd.cls(); |
cheungderek | 0:e083abcfe7a8 | 157 | |
cheungderek | 0:e083abcfe7a8 | 158 | |
cheungderek | 0:e083abcfe7a8 | 159 | unsigned short tmp_left_led_digit, tmp_right_led_digit; |
cheungderek | 0:e083abcfe7a8 | 160 | int blink_value = 3; |
cheungderek | 0:e083abcfe7a8 | 161 | Host server(IpAddr(), 123, "0.uk.pool.ntp.org"); |
cheungderek | 0:e083abcfe7a8 | 162 | ntp.setTime(server); |
cheungderek | 0:e083abcfe7a8 | 163 | int resyncNtpServerTimer = 0; |
cheungderek | 0:e083abcfe7a8 | 164 | int mDayDisplayTimer = 0; |
cheungderek | 0:e083abcfe7a8 | 165 | int monthDisplayTimer = 0; |
cheungderek | 0:e083abcfe7a8 | 166 | HTTPText txt; |
cheungderek | 0:e083abcfe7a8 | 167 | |
cheungderek | 0:e083abcfe7a8 | 168 | while (1) { |
cheungderek | 0:e083abcfe7a8 | 169 | /* for (tim =BLINK_PERIOD; tim >= END_PERIOD; tim /= 3) { |
cheungderek | 0:e083abcfe7a8 | 170 | myled1 = 1; |
cheungderek | 0:e083abcfe7a8 | 171 | wait(tim); |
cheungderek | 0:e083abcfe7a8 | 172 | myled1 = 0; |
cheungderek | 0:e083abcfe7a8 | 173 | myled2 = 1; |
cheungderek | 0:e083abcfe7a8 | 174 | wait(tim); |
cheungderek | 0:e083abcfe7a8 | 175 | myled2 = 0; |
cheungderek | 0:e083abcfe7a8 | 176 | myled3 = 1; |
cheungderek | 0:e083abcfe7a8 | 177 | wait(tim); |
cheungderek | 0:e083abcfe7a8 | 178 | myled3 = 0; |
cheungderek | 0:e083abcfe7a8 | 179 | myled4 = 1; |
cheungderek | 0:e083abcfe7a8 | 180 | wait(tim); |
cheungderek | 0:e083abcfe7a8 | 181 | myled4 = 0; |
cheungderek | 0:e083abcfe7a8 | 182 | } |
cheungderek | 0:e083abcfe7a8 | 183 | */ |
cheungderek | 0:e083abcfe7a8 | 184 | |
cheungderek | 0:e083abcfe7a8 | 185 | /* |
cheungderek | 0:e083abcfe7a8 | 186 | printf("\r\n trying to get a tweet \r\n"); |
cheungderek | 0:e083abcfe7a8 | 187 | twitter.get("http://api.supertweet.net/1/statuses/update.xml", &txt); //Blocking |
cheungderek | 0:e083abcfe7a8 | 188 | printf("\r\n HTTP data %s \r\n", txt); |
cheungderek | 0:e083abcfe7a8 | 189 | */ |
cheungderek | 0:e083abcfe7a8 | 190 | |
cheungderek | 0:e083abcfe7a8 | 191 | tmp_left_led_digit = 0; |
cheungderek | 0:e083abcfe7a8 | 192 | tmp_right_led_digit = 0; |
cheungderek | 0:e083abcfe7a8 | 193 | |
cheungderek | 0:e083abcfe7a8 | 194 | // sprintf(buf,"loop # = %d", count); |
cheungderek | 0:e083abcfe7a8 | 195 | ctTime = time(NULL) - 14400; // EST is 4 hours behind UTC |
cheungderek | 0:e083abcfe7a8 | 196 | // set_time(ctTime); // set the RTC clock) |
cheungderek | 0:e083abcfe7a8 | 197 | // printf("%d - RTC time is (UTC): %s \r \n", n++, ctime(&ctTime)); |
cheungderek | 0:e083abcfe7a8 | 198 | tm_ptr = localtime(&ctTime); |
cheungderek | 0:e083abcfe7a8 | 199 | |
cheungderek | 0:e083abcfe7a8 | 200 | strftime(buf, 32, "%a %b %d %Y ", localtime(&ctTime)); |
cheungderek | 0:e083abcfe7a8 | 201 | lcd.locate(0,0); // 1st line |
cheungderek | 0:e083abcfe7a8 | 202 | lcd.printf(buf); |
cheungderek | 0:e083abcfe7a8 | 203 | |
cheungderek | 0:e083abcfe7a8 | 204 | blink_value++; |
cheungderek | 0:e083abcfe7a8 | 205 | |
cheungderek | 0:e083abcfe7a8 | 206 | // Display Seconds on the LED1 and LED2 |
cheungderek | 0:e083abcfe7a8 | 207 | tmp_int = dec2bcd(tm_ptr->tm_sec); |
cheungderek | 0:e083abcfe7a8 | 208 | // re-sync the NTP clock to RTC every 2 minutes / hours |
cheungderek | 0:e083abcfe7a8 | 209 | resyncNtpServerTimer++; |
cheungderek | 0:e083abcfe7a8 | 210 | if (resyncNtpServerTimer == 100000) { |
cheungderek | 0:e083abcfe7a8 | 211 | lcd.locate(0, 1); |
cheungderek | 0:e083abcfe7a8 | 212 | lcd.printf("NTP Server Sync "); |
cheungderek | 0:e083abcfe7a8 | 213 | wait(1); |
cheungderek | 0:e083abcfe7a8 | 214 | // ethErr = eth.setup(); |
cheungderek | 0:e083abcfe7a8 | 215 | if (ethErr) { |
cheungderek | 0:e083abcfe7a8 | 216 | printf("Error %d in setup.\n", ethErr); |
cheungderek | 0:e083abcfe7a8 | 217 | lcd.locate(0, 1); |
cheungderek | 0:e083abcfe7a8 | 218 | lcd.printf("Network Failed "); |
cheungderek | 0:e083abcfe7a8 | 219 | } else { |
cheungderek | 0:e083abcfe7a8 | 220 | printf("\r\nNetwork Connection Setup OK\r\n"); |
cheungderek | 0:e083abcfe7a8 | 221 | // backup the time in case ntp server fails |
cheungderek | 0:e083abcfe7a8 | 222 | ctTime = time(NULL); |
cheungderek | 0:e083abcfe7a8 | 223 | if (ntp.setTime(server) != 0) { |
cheungderek | 0:e083abcfe7a8 | 224 | lcd.locate(0,1); |
cheungderek | 0:e083abcfe7a8 | 225 | lcd.printf("NTP Sync Failed "); |
cheungderek | 0:e083abcfe7a8 | 226 | set_time(ctTime); |
cheungderek | 0:e083abcfe7a8 | 227 | } |
cheungderek | 0:e083abcfe7a8 | 228 | } |
cheungderek | 0:e083abcfe7a8 | 229 | wait(1); |
cheungderek | 0:e083abcfe7a8 | 230 | resyncNtpServerTimer = 0; |
cheungderek | 0:e083abcfe7a8 | 231 | } |
cheungderek | 0:e083abcfe7a8 | 232 | // lcd.locate(0,1); |
cheungderek | 0:e083abcfe7a8 | 233 | // lcd.printf(" "); |
cheungderek | 0:e083abcfe7a8 | 234 | |
cheungderek | 0:e083abcfe7a8 | 235 | mDayDisplayTimer++; |
cheungderek | 0:e083abcfe7a8 | 236 | if (mDayDisplayTimer == 1200) { |
cheungderek | 0:e083abcfe7a8 | 237 | display_day_year(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 238 | display_weekOfDay_month(tm_ptr); |
cheungderek | 0:e083abcfe7a8 | 239 | mDayDisplayTimer = 0; |
cheungderek | 0:e083abcfe7a8 | 240 | } |
cheungderek | 0:e083abcfe7a8 | 241 | |
cheungderek | 0:e083abcfe7a8 | 242 | tmp_left_led_digit = (unsigned short) tmp_int >> 4; |
cheungderek | 0:e083abcfe7a8 | 243 | tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; |
cheungderek | 0:e083abcfe7a8 | 244 | max7221_control(LED_DIGIT1 | tmp_right_led_digit); |
cheungderek | 0:e083abcfe7a8 | 245 | max7221_control(LED_DIGIT2 | tmp_left_led_digit); |
cheungderek | 0:e083abcfe7a8 | 246 | |
cheungderek | 0:e083abcfe7a8 | 247 | |
cheungderek | 0:e083abcfe7a8 | 248 | |
cheungderek | 0:e083abcfe7a8 | 249 | // Display Minutes on the LED3 and LED4 |
cheungderek | 0:e083abcfe7a8 | 250 | tmp_int = dec2bcd(tm_ptr->tm_min); |
cheungderek | 0:e083abcfe7a8 | 251 | tmp_left_led_digit = (unsigned short) tmp_int >> 4; |
cheungderek | 0:e083abcfe7a8 | 252 | tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; |
cheungderek | 0:e083abcfe7a8 | 253 | max7221_control(LED_DIGIT3 | tmp_right_led_digit | 0x0080); |
cheungderek | 0:e083abcfe7a8 | 254 | |
cheungderek | 0:e083abcfe7a8 | 255 | |
cheungderek | 0:e083abcfe7a8 | 256 | /* |
cheungderek | 0:e083abcfe7a8 | 257 | if ((blink_value % 4) == 0) |
cheungderek | 0:e083abcfe7a8 | 258 | max7221_control(LED_DIGIT3 | tmp_right_led_digit | 0x0080); |
cheungderek | 0:e083abcfe7a8 | 259 | else |
cheungderek | 0:e083abcfe7a8 | 260 | max7221_control(LED_DIGIT3 | tmp_right_led_digit & 0xFF7F); |
cheungderek | 0:e083abcfe7a8 | 261 | */ |
cheungderek | 0:e083abcfe7a8 | 262 | max7221_control(LED_DIGIT4 | tmp_left_led_digit); |
cheungderek | 0:e083abcfe7a8 | 263 | |
cheungderek | 0:e083abcfe7a8 | 264 | // Display Hours on the LED5 and LED6 |
cheungderek | 0:e083abcfe7a8 | 265 | tmp_int = dec2bcd(tm_ptr->tm_hour); |
cheungderek | 0:e083abcfe7a8 | 266 | tmp_left_led_digit = (unsigned short) tmp_int >> 4; |
cheungderek | 0:e083abcfe7a8 | 267 | tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; |
cheungderek | 0:e083abcfe7a8 | 268 | max7221_control(LED_DIGIT5 | tmp_right_led_digit | 0x0080); |
cheungderek | 0:e083abcfe7a8 | 269 | |
cheungderek | 0:e083abcfe7a8 | 270 | |
cheungderek | 0:e083abcfe7a8 | 271 | |
cheungderek | 0:e083abcfe7a8 | 272 | /* |
cheungderek | 0:e083abcfe7a8 | 273 | if ((blink_value % 4) == 0) |
cheungderek | 0:e083abcfe7a8 | 274 | max7221_control(LED_DIGIT5 | tmp_right_led_digit | 0x0080); |
cheungderek | 0:e083abcfe7a8 | 275 | else |
cheungderek | 0:e083abcfe7a8 | 276 | max7221_control(LED_DIGIT5 | tmp_right_led_digit & 0xFF7F); |
cheungderek | 0:e083abcfe7a8 | 277 | */ |
cheungderek | 0:e083abcfe7a8 | 278 | max7221_control(LED_DIGIT6 | tmp_left_led_digit); |
cheungderek | 0:e083abcfe7a8 | 279 | |
cheungderek | 0:e083abcfe7a8 | 280 | /* Ethernet read Twitter message */ |
cheungderek | 0:e083abcfe7a8 | 281 | |
cheungderek | 0:e083abcfe7a8 | 282 | |
cheungderek | 0:e083abcfe7a8 | 283 | /* |
cheungderek | 0:e083abcfe7a8 | 284 | tmp_left_led_digit = (unsigned short) tmp_int >> 4; |
cheungderek | 0:e083abcfe7a8 | 285 | tmp_right_led_digit = (unsigned short) tmp_int & 0x000F; |
cheungderek | 0:e083abcfe7a8 | 286 | |
cheungderek | 0:e083abcfe7a8 | 287 | // printf("\r\n unsigned in %d, unsigned short int %d, char %d - ", sizeof(unsigned int), sizeof(unsigned short int), sizeof(char)); |
cheungderek | 0:e083abcfe7a8 | 288 | |
cheungderek | 0:e083abcfe7a8 | 289 | |
cheungderek | 0:e083abcfe7a8 | 290 | printf("\r\n tmp_left_led_digit %X \r\n", tmp_left_led_digit | 0x0100); |
cheungderek | 0:e083abcfe7a8 | 291 | max7221_cs = 0; |
cheungderek | 0:e083abcfe7a8 | 292 | max7221_spi.write(tmp_left_led_digit | 0x0200); |
cheungderek | 0:e083abcfe7a8 | 293 | max7221_cs = 1; |
cheungderek | 0:e083abcfe7a8 | 294 | wait(0.01); |
cheungderek | 0:e083abcfe7a8 | 295 | |
cheungderek | 0:e083abcfe7a8 | 296 | max7221_cs = 0; |
cheungderek | 0:e083abcfe7a8 | 297 | max7221_spi.write(tmp_right_led_digit | 0x0100); |
cheungderek | 0:e083abcfe7a8 | 298 | max7221_cs = 1; |
cheungderek | 0:e083abcfe7a8 | 299 | |
cheungderek | 0:e083abcfe7a8 | 300 | tmp_int = dec2bcd(tm_ptr->tm_sec); |
cheungderek | 0:e083abcfe7a8 | 301 | max7221_cs = 0; |
cheungderek | 0:e083abcfe7a8 | 302 | max7221_spi.write(0x0100 || (tmp_int & 0x0F)); |
cheungderek | 0:e083abcfe7a8 | 303 | max7221_cs = 1; |
cheungderek | 0:e083abcfe7a8 | 304 | */ |
cheungderek | 0:e083abcfe7a8 | 305 | |
cheungderek | 0:e083abcfe7a8 | 306 | } |
cheungderek | 0:e083abcfe7a8 | 307 | return 0; |
cheungderek | 0:e083abcfe7a8 | 308 | }; |
cheungderek | 0:e083abcfe7a8 | 309 | |
cheungderek | 0:e083abcfe7a8 | 310 | /* |
cheungderek | 0:e083abcfe7a8 | 311 | // strftime(buf, 16, "%X", localtime(&ctTime)); |
cheungderek | 0:e083abcfe7a8 | 312 | // lcd.locate(0, 1); // 2nd line |
cheungderek | 0:e083abcfe7a8 | 313 | // lcd.printf(buf); |
cheungderek | 0:e083abcfe7a8 | 314 | //sprintf(buf, ctime(&ctTime)); |
cheungderek | 0:e083abcfe7a8 | 315 | |
cheungderek | 0:e083abcfe7a8 | 316 | // lcd.printf(buf); |
cheungderek | 0:e083abcfe7a8 | 317 | // printf(" Current loop count number = %d \r\n", count); |
cheungderek | 0:e083abcfe7a8 | 318 | // count++; |
cheungderek | 0:e083abcfe7a8 | 319 | |
cheungderek | 0:e083abcfe7a8 | 320 | |
cheungderek | 0:e083abcfe7a8 | 321 | pc.baud(460800); |
cheungderek | 0:e083abcfe7a8 | 322 | printf("BlueUSB\nNow get a bunch of usb or bluetooth things and plug them in\n"); |
cheungderek | 0:e083abcfe7a8 | 323 | TestShell(); |
cheungderek | 0:e083abcfe7a8 | 324 | */ |
cheungderek | 0:e083abcfe7a8 | 325 | |
cheungderek | 0:e083abcfe7a8 | 326 | unsigned int dec2bcd(unsigned int dec) { |
cheungderek | 0:e083abcfe7a8 | 327 | unsigned int bits, bcd = 0; |
cheungderek | 0:e083abcfe7a8 | 328 | for ( bits = 0; dec; bits += 4, dec /= 10 ) { |
cheungderek | 0:e083abcfe7a8 | 329 | bcd |= dec % 10 << bits; |
cheungderek | 0:e083abcfe7a8 | 330 | } |
cheungderek | 0:e083abcfe7a8 | 331 | return bcd; |
cheungderek | 0:e083abcfe7a8 | 332 | } |
cheungderek | 0:e083abcfe7a8 | 333 | |
cheungderek | 0:e083abcfe7a8 | 334 | |
cheungderek | 0:e083abcfe7a8 | 335 | void max7221_control(unsigned control) { |
cheungderek | 0:e083abcfe7a8 | 336 | max7221_cs = 0; |
cheungderek | 0:e083abcfe7a8 | 337 | max7221_spi.write(control); |
cheungderek | 0:e083abcfe7a8 | 338 | max7221_cs = 1; |
cheungderek | 0:e083abcfe7a8 | 339 | wait(0.001); |
cheungderek | 0:e083abcfe7a8 | 340 | } |
cheungderek | 0:e083abcfe7a8 | 341 | |
cheungderek | 0:e083abcfe7a8 | 342 | void display_weekOfDay_month(struct tm *tm_ptr) { |
cheungderek | 0:e083abcfe7a8 | 343 | |
cheungderek | 0:e083abcfe7a8 | 344 | // no decode |
cheungderek | 0:e083abcfe7a8 | 345 | max7221_control(0x0900); |
cheungderek | 0:e083abcfe7a8 | 346 | |
cheungderek | 0:e083abcfe7a8 | 347 | max7221_control(LED_DIGIT6 | LED__); |
cheungderek | 0:e083abcfe7a8 | 348 | max7221_control(LED_DIGIT5 | LED__); |
cheungderek | 0:e083abcfe7a8 | 349 | max7221_control(LED_DIGIT4 | LED__); |
cheungderek | 0:e083abcfe7a8 | 350 | |
cheungderek | 0:e083abcfe7a8 | 351 | switch(tm_ptr->tm_mon + 1) { |
cheungderek | 0:e083abcfe7a8 | 352 | case 1 : |
cheungderek | 0:e083abcfe7a8 | 353 | max7221_control(LED_DIGIT6 | LED_J); |
cheungderek | 0:e083abcfe7a8 | 354 | max7221_control(LED_DIGIT5 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 355 | max7221_control(LED_DIGIT4 | LED_N); |
cheungderek | 0:e083abcfe7a8 | 356 | max7221_control(LED_DIGIT3 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 357 | max7221_control(LED_DIGIT2 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 358 | max7221_control(LED_DIGIT1 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 359 | break; |
cheungderek | 0:e083abcfe7a8 | 360 | case 2 : |
cheungderek | 0:e083abcfe7a8 | 361 | max7221_control(LED_DIGIT6 | LED_F); |
cheungderek | 0:e083abcfe7a8 | 362 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 363 | max7221_control(LED_DIGIT4 | LED_b); |
cheungderek | 0:e083abcfe7a8 | 364 | max7221_control(LED_DIGIT3 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 365 | max7221_control(LED_DIGIT2 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 366 | max7221_control(LED_DIGIT1 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 367 | break; |
cheungderek | 0:e083abcfe7a8 | 368 | case 3 : |
cheungderek | 0:e083abcfe7a8 | 369 | max7221_control(LED_DIGIT5 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 370 | max7221_control(LED_DIGIT4 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 371 | max7221_control(LED_DIGIT3 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 372 | max7221_control(LED_DIGIT2 | LED_C); |
cheungderek | 0:e083abcfe7a8 | 373 | max7221_control(LED_DIGIT1 | LED_H); |
cheungderek | 0:e083abcfe7a8 | 374 | break; |
cheungderek | 0:e083abcfe7a8 | 375 | case 4 : |
cheungderek | 0:e083abcfe7a8 | 376 | max7221_control(LED_DIGIT5 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 377 | max7221_control(LED_DIGIT4 | LED_P); |
cheungderek | 0:e083abcfe7a8 | 378 | max7221_control(LED_DIGIT3 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 379 | max7221_control(LED_DIGIT2 | LED_i); |
cheungderek | 0:e083abcfe7a8 | 380 | max7221_control(LED_DIGIT1 | LED_I); |
cheungderek | 0:e083abcfe7a8 | 381 | break; |
cheungderek | 0:e083abcfe7a8 | 382 | case 5 : |
cheungderek | 0:e083abcfe7a8 | 383 | max7221_control(LED_DIGIT3 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 384 | max7221_control(LED_DIGIT2 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 385 | max7221_control(LED_DIGIT1 | LED_y); |
cheungderek | 0:e083abcfe7a8 | 386 | break; |
cheungderek | 0:e083abcfe7a8 | 387 | case 6 : |
cheungderek | 0:e083abcfe7a8 | 388 | max7221_control(LED_DIGIT4 | LED_J); |
cheungderek | 0:e083abcfe7a8 | 389 | max7221_control(LED_DIGIT3 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 390 | max7221_control(LED_DIGIT2 | LED_N); |
cheungderek | 0:e083abcfe7a8 | 391 | max7221_control(LED_DIGIT1 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 392 | break; |
cheungderek | 0:e083abcfe7a8 | 393 | case 7 : |
cheungderek | 0:e083abcfe7a8 | 394 | max7221_control(LED_DIGIT4 | LED_J); |
cheungderek | 0:e083abcfe7a8 | 395 | max7221_control(LED_DIGIT3 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 396 | max7221_control(LED_DIGIT2 | LED_L); |
cheungderek | 0:e083abcfe7a8 | 397 | max7221_control(LED_DIGIT1 | LED_y); |
cheungderek | 0:e083abcfe7a8 | 398 | break; |
cheungderek | 0:e083abcfe7a8 | 399 | case 8 : |
cheungderek | 0:e083abcfe7a8 | 400 | max7221_control(LED_DIGIT6 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 401 | max7221_control(LED_DIGIT5 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 402 | max7221_control(LED_DIGIT4 | LED_g); |
cheungderek | 0:e083abcfe7a8 | 403 | max7221_control(LED_DIGIT3 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 404 | max7221_control(LED_DIGIT2 | LED_S); |
cheungderek | 0:e083abcfe7a8 | 405 | max7221_control(LED_DIGIT1 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 406 | break; |
cheungderek | 0:e083abcfe7a8 | 407 | case 9 : |
cheungderek | 0:e083abcfe7a8 | 408 | max7221_control(LED_DIGIT6 | LED_S); |
cheungderek | 0:e083abcfe7a8 | 409 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 410 | max7221_control(LED_DIGIT4 | LED_P); |
cheungderek | 0:e083abcfe7a8 | 411 | max7221_control(LED_DIGIT3 | LED_t); |
cheungderek | 0:e083abcfe7a8 | 412 | max7221_control(LED_DIGIT2 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 413 | max7221_control(LED_DIGIT1 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 414 | break; |
cheungderek | 0:e083abcfe7a8 | 415 | case 10 : |
cheungderek | 0:e083abcfe7a8 | 416 | max7221_control(LED_DIGIT6 | LED_O); |
cheungderek | 0:e083abcfe7a8 | 417 | max7221_control(LED_DIGIT5 | LED_C); |
cheungderek | 0:e083abcfe7a8 | 418 | max7221_control(LED_DIGIT4 | LED_t); |
cheungderek | 0:e083abcfe7a8 | 419 | max7221_control(LED_DIGIT3 | LED_O); |
cheungderek | 0:e083abcfe7a8 | 420 | max7221_control(LED_DIGIT2 | LED_b); |
cheungderek | 0:e083abcfe7a8 | 421 | max7221_control(LED_DIGIT1 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 422 | break; |
cheungderek | 0:e083abcfe7a8 | 423 | case 11 : |
cheungderek | 0:e083abcfe7a8 | 424 | max7221_control(LED_DIGIT6 | LED_N); |
cheungderek | 0:e083abcfe7a8 | 425 | max7221_control(LED_DIGIT5 | LED_O); |
cheungderek | 0:e083abcfe7a8 | 426 | max7221_control(LED_DIGIT4 | LED_V); |
cheungderek | 0:e083abcfe7a8 | 427 | max7221_control(LED_DIGIT3 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 428 | max7221_control(LED_DIGIT2 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 429 | max7221_control(LED_DIGIT1 | LED_b); |
cheungderek | 0:e083abcfe7a8 | 430 | break; |
cheungderek | 0:e083abcfe7a8 | 431 | case 12 : |
cheungderek | 0:e083abcfe7a8 | 432 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 433 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 434 | max7221_control(LED_DIGIT4 | LED_C); |
cheungderek | 0:e083abcfe7a8 | 435 | max7221_control(LED_DIGIT3 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 436 | max7221_control(LED_DIGIT2 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 437 | max7221_control(LED_DIGIT1 | LED_b); |
cheungderek | 0:e083abcfe7a8 | 438 | break; |
cheungderek | 0:e083abcfe7a8 | 439 | default : |
cheungderek | 0:e083abcfe7a8 | 440 | max7221_control(LED_DIGIT5 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 441 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 442 | max7221_control(LED_DIGIT4 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 443 | max7221_control(LED_DIGIT3 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 444 | max7221_control(LED_DIGIT2 | LED_o); |
cheungderek | 0:e083abcfe7a8 | 445 | max7221_control(LED_DIGIT1 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 446 | } |
cheungderek | 0:e083abcfe7a8 | 447 | |
cheungderek | 0:e083abcfe7a8 | 448 | wait(1.5); |
cheungderek | 0:e083abcfe7a8 | 449 | |
cheungderek | 0:e083abcfe7a8 | 450 | // printf("tm_ptr->tm_year %d \r\n", tm_ptr->tm_year); |
cheungderek | 0:e083abcfe7a8 | 451 | max7221_control(LED_DIGIT6 | LED__); |
cheungderek | 0:e083abcfe7a8 | 452 | max7221_control(LED_DIGIT5 | LED__); |
cheungderek | 0:e083abcfe7a8 | 453 | |
cheungderek | 0:e083abcfe7a8 | 454 | switch(tm_ptr->tm_year - 100) { |
cheungderek | 0:e083abcfe7a8 | 455 | case 11 : |
cheungderek | 0:e083abcfe7a8 | 456 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 457 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 458 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 459 | max7221_control(LED_DIGIT1 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 460 | break; |
cheungderek | 0:e083abcfe7a8 | 461 | case 12 : |
cheungderek | 0:e083abcfe7a8 | 462 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 463 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 464 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 465 | max7221_control(LED_DIGIT1 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 466 | break; |
cheungderek | 0:e083abcfe7a8 | 467 | case 13 : |
cheungderek | 0:e083abcfe7a8 | 468 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 469 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 470 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 471 | max7221_control(LED_DIGIT1 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 472 | break; |
cheungderek | 0:e083abcfe7a8 | 473 | case 14 : |
cheungderek | 0:e083abcfe7a8 | 474 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 475 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 476 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 477 | max7221_control(LED_DIGIT1 | LED_4); |
cheungderek | 0:e083abcfe7a8 | 478 | break; |
cheungderek | 0:e083abcfe7a8 | 479 | case 15 : |
cheungderek | 0:e083abcfe7a8 | 480 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 481 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 482 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 483 | max7221_control(LED_DIGIT1 | LED_5); |
cheungderek | 0:e083abcfe7a8 | 484 | break; |
cheungderek | 0:e083abcfe7a8 | 485 | case 16 : |
cheungderek | 0:e083abcfe7a8 | 486 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 487 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 488 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 489 | max7221_control(LED_DIGIT1 | LED_6); |
cheungderek | 0:e083abcfe7a8 | 490 | break; |
cheungderek | 0:e083abcfe7a8 | 491 | case 17 : |
cheungderek | 0:e083abcfe7a8 | 492 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 493 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 494 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 495 | max7221_control(LED_DIGIT1 | LED_7); |
cheungderek | 0:e083abcfe7a8 | 496 | break; |
cheungderek | 0:e083abcfe7a8 | 497 | case 18 : |
cheungderek | 0:e083abcfe7a8 | 498 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 499 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 500 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 501 | max7221_control(LED_DIGIT1 | LED_8); |
cheungderek | 0:e083abcfe7a8 | 502 | break; |
cheungderek | 0:e083abcfe7a8 | 503 | case 19 : |
cheungderek | 0:e083abcfe7a8 | 504 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 505 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 506 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 507 | max7221_control(LED_DIGIT1 | LED_9); |
cheungderek | 0:e083abcfe7a8 | 508 | break; |
cheungderek | 0:e083abcfe7a8 | 509 | case 20 : |
cheungderek | 0:e083abcfe7a8 | 510 | max7221_control(LED_DIGIT4 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 511 | max7221_control(LED_DIGIT3 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 512 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 513 | max7221_control(LED_DIGIT1 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 514 | break; |
cheungderek | 0:e083abcfe7a8 | 515 | default : |
cheungderek | 0:e083abcfe7a8 | 516 | max7221_control(LED_DIGIT5 | LED_y); |
cheungderek | 0:e083abcfe7a8 | 517 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 518 | max7221_control(LED_DIGIT4 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 519 | max7221_control(LED_DIGIT3 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 520 | max7221_control(LED_DIGIT2 | LED_o); |
cheungderek | 0:e083abcfe7a8 | 521 | max7221_control(LED_DIGIT1 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 522 | } |
cheungderek | 0:e083abcfe7a8 | 523 | |
cheungderek | 0:e083abcfe7a8 | 524 | wait(1.5); |
cheungderek | 0:e083abcfe7a8 | 525 | // BCD mode |
cheungderek | 0:e083abcfe7a8 | 526 | max7221_control(0x09FF); |
cheungderek | 0:e083abcfe7a8 | 527 | } |
cheungderek | 0:e083abcfe7a8 | 528 | |
cheungderek | 0:e083abcfe7a8 | 529 | void display_day_year(struct tm *tm_ptr) { |
cheungderek | 0:e083abcfe7a8 | 530 | // no decode |
cheungderek | 0:e083abcfe7a8 | 531 | max7221_control(0x0900); |
cheungderek | 0:e083abcfe7a8 | 532 | |
cheungderek | 0:e083abcfe7a8 | 533 | printf("tm_ptr->tm_wday %d \r\n", tm_ptr->tm_wday); |
cheungderek | 0:e083abcfe7a8 | 534 | switch(tm_ptr->tm_wday) { |
cheungderek | 0:e083abcfe7a8 | 535 | case 0 : |
cheungderek | 0:e083abcfe7a8 | 536 | max7221_control(LED_DIGIT6 | LED_S); |
cheungderek | 0:e083abcfe7a8 | 537 | max7221_control(LED_DIGIT5 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 538 | max7221_control(LED_DIGIT4 | LED_N); |
cheungderek | 0:e083abcfe7a8 | 539 | break; |
cheungderek | 0:e083abcfe7a8 | 540 | case 1 : |
cheungderek | 0:e083abcfe7a8 | 541 | max7221_control(LED_DIGIT6 | LED_M); |
cheungderek | 0:e083abcfe7a8 | 542 | max7221_control(LED_DIGIT5 | LED_O); |
cheungderek | 0:e083abcfe7a8 | 543 | max7221_control(LED_DIGIT4 | LED_N); |
cheungderek | 0:e083abcfe7a8 | 544 | break; |
cheungderek | 0:e083abcfe7a8 | 545 | case 2 : |
cheungderek | 0:e083abcfe7a8 | 546 | max7221_control(LED_DIGIT6 | LED_t); |
cheungderek | 0:e083abcfe7a8 | 547 | max7221_control(LED_DIGIT5 | LED_U); |
cheungderek | 0:e083abcfe7a8 | 548 | max7221_control(LED_DIGIT4 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 549 | break; |
cheungderek | 0:e083abcfe7a8 | 550 | case 3 : |
cheungderek | 0:e083abcfe7a8 | 551 | max7221_control(LED_DIGIT6 | LED_W); |
cheungderek | 0:e083abcfe7a8 | 552 | max7221_control(LED_DIGIT5 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 553 | max7221_control(LED_DIGIT4 | LED_d); |
cheungderek | 0:e083abcfe7a8 | 554 | break; |
cheungderek | 0:e083abcfe7a8 | 555 | case 4 : |
cheungderek | 0:e083abcfe7a8 | 556 | max7221_control(LED_DIGIT6 | LED_t); |
cheungderek | 0:e083abcfe7a8 | 557 | max7221_control(LED_DIGIT5 | LED_h); |
cheungderek | 0:e083abcfe7a8 | 558 | max7221_control(LED_DIGIT4 | LED_u); |
cheungderek | 0:e083abcfe7a8 | 559 | break; |
cheungderek | 0:e083abcfe7a8 | 560 | case 5 : |
cheungderek | 0:e083abcfe7a8 | 561 | max7221_control(LED_DIGIT6 | LED_F); |
cheungderek | 0:e083abcfe7a8 | 562 | max7221_control(LED_DIGIT5 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 563 | max7221_control(LED_DIGIT4 | LED_i); |
cheungderek | 0:e083abcfe7a8 | 564 | break; |
cheungderek | 0:e083abcfe7a8 | 565 | case 6 : |
cheungderek | 0:e083abcfe7a8 | 566 | max7221_control(LED_DIGIT6 | LED_S); |
cheungderek | 0:e083abcfe7a8 | 567 | max7221_control(LED_DIGIT5 | LED_A); |
cheungderek | 0:e083abcfe7a8 | 568 | max7221_control(LED_DIGIT4 | LED_t); |
cheungderek | 0:e083abcfe7a8 | 569 | break; |
cheungderek | 0:e083abcfe7a8 | 570 | default : |
cheungderek | 0:e083abcfe7a8 | 571 | max7221_control(LED_DIGIT6 | LED_E); |
cheungderek | 0:e083abcfe7a8 | 572 | max7221_control(LED_DIGIT5 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 573 | max7221_control(LED_DIGIT4 | LED_r); |
cheungderek | 0:e083abcfe7a8 | 574 | } |
cheungderek | 0:e083abcfe7a8 | 575 | |
cheungderek | 0:e083abcfe7a8 | 576 | max7221_control(LED_DIGIT3 | LED__); |
cheungderek | 0:e083abcfe7a8 | 577 | max7221_control(LED_DIGIT2 | LED__); |
cheungderek | 0:e083abcfe7a8 | 578 | switch(tm_ptr->tm_mday) { |
cheungderek | 0:e083abcfe7a8 | 579 | case 1 : |
cheungderek | 0:e083abcfe7a8 | 580 | max7221_control(LED_DIGIT1 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 581 | break; |
cheungderek | 0:e083abcfe7a8 | 582 | case 2 : |
cheungderek | 0:e083abcfe7a8 | 583 | max7221_control(LED_DIGIT1 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 584 | break; |
cheungderek | 0:e083abcfe7a8 | 585 | case 3 : |
cheungderek | 0:e083abcfe7a8 | 586 | max7221_control(LED_DIGIT1 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 587 | break; |
cheungderek | 0:e083abcfe7a8 | 588 | case 4 : |
cheungderek | 0:e083abcfe7a8 | 589 | max7221_control(LED_DIGIT1 | LED_4); |
cheungderek | 0:e083abcfe7a8 | 590 | break; |
cheungderek | 0:e083abcfe7a8 | 591 | case 5 : |
cheungderek | 0:e083abcfe7a8 | 592 | max7221_control(LED_DIGIT1 | LED_5); |
cheungderek | 0:e083abcfe7a8 | 593 | break; |
cheungderek | 0:e083abcfe7a8 | 594 | case 6 : |
cheungderek | 0:e083abcfe7a8 | 595 | max7221_control(LED_DIGIT1 | LED_6); |
cheungderek | 0:e083abcfe7a8 | 596 | break; |
cheungderek | 0:e083abcfe7a8 | 597 | case 7 : |
cheungderek | 0:e083abcfe7a8 | 598 | max7221_control(LED_DIGIT1 | LED_7); |
cheungderek | 0:e083abcfe7a8 | 599 | break; |
cheungderek | 0:e083abcfe7a8 | 600 | case 8 : |
cheungderek | 0:e083abcfe7a8 | 601 | max7221_control(LED_DIGIT1 | LED_8); |
cheungderek | 0:e083abcfe7a8 | 602 | break; |
cheungderek | 0:e083abcfe7a8 | 603 | case 9 : |
cheungderek | 0:e083abcfe7a8 | 604 | max7221_control(LED_DIGIT1 | LED_9); |
cheungderek | 0:e083abcfe7a8 | 605 | break; |
cheungderek | 0:e083abcfe7a8 | 606 | case 11 : |
cheungderek | 0:e083abcfe7a8 | 607 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 608 | max7221_control(LED_DIGIT1 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 609 | break; |
cheungderek | 0:e083abcfe7a8 | 610 | case 12 : |
cheungderek | 0:e083abcfe7a8 | 611 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 612 | max7221_control(LED_DIGIT1 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 613 | break; |
cheungderek | 0:e083abcfe7a8 | 614 | case 13 : |
cheungderek | 0:e083abcfe7a8 | 615 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 616 | max7221_control(LED_DIGIT1 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 617 | break; |
cheungderek | 0:e083abcfe7a8 | 618 | case 14 : |
cheungderek | 0:e083abcfe7a8 | 619 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 620 | max7221_control(LED_DIGIT1 | LED_4); |
cheungderek | 0:e083abcfe7a8 | 621 | break; |
cheungderek | 0:e083abcfe7a8 | 622 | case 15 : |
cheungderek | 0:e083abcfe7a8 | 623 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 624 | max7221_control(LED_DIGIT1 | LED_5); |
cheungderek | 0:e083abcfe7a8 | 625 | break; |
cheungderek | 0:e083abcfe7a8 | 626 | case 16 : |
cheungderek | 0:e083abcfe7a8 | 627 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 628 | max7221_control(LED_DIGIT1 | LED_6); |
cheungderek | 0:e083abcfe7a8 | 629 | break; |
cheungderek | 0:e083abcfe7a8 | 630 | case 17 : |
cheungderek | 0:e083abcfe7a8 | 631 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 632 | max7221_control(LED_DIGIT1 | LED_7); |
cheungderek | 0:e083abcfe7a8 | 633 | break; |
cheungderek | 0:e083abcfe7a8 | 634 | case 18 : |
cheungderek | 0:e083abcfe7a8 | 635 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 636 | max7221_control(LED_DIGIT1 | LED_8); |
cheungderek | 0:e083abcfe7a8 | 637 | break; |
cheungderek | 0:e083abcfe7a8 | 638 | case 19 : |
cheungderek | 0:e083abcfe7a8 | 639 | max7221_control(LED_DIGIT2 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 640 | max7221_control(LED_DIGIT1 | LED_9); |
cheungderek | 0:e083abcfe7a8 | 641 | break; |
cheungderek | 0:e083abcfe7a8 | 642 | case 20 : |
cheungderek | 0:e083abcfe7a8 | 643 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 644 | max7221_control(LED_DIGIT1 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 645 | break; |
cheungderek | 0:e083abcfe7a8 | 646 | case 21 : |
cheungderek | 0:e083abcfe7a8 | 647 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 648 | max7221_control(LED_DIGIT1 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 649 | break; |
cheungderek | 0:e083abcfe7a8 | 650 | case 22 : |
cheungderek | 0:e083abcfe7a8 | 651 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 652 | max7221_control(LED_DIGIT1 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 653 | break; |
cheungderek | 0:e083abcfe7a8 | 654 | case 23 : |
cheungderek | 0:e083abcfe7a8 | 655 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 656 | max7221_control(LED_DIGIT1 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 657 | break; |
cheungderek | 0:e083abcfe7a8 | 658 | case 24 : |
cheungderek | 0:e083abcfe7a8 | 659 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 660 | max7221_control(LED_DIGIT1 | LED_4); |
cheungderek | 0:e083abcfe7a8 | 661 | break; |
cheungderek | 0:e083abcfe7a8 | 662 | case 25 : |
cheungderek | 0:e083abcfe7a8 | 663 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 664 | max7221_control(LED_DIGIT1 | LED_5); |
cheungderek | 0:e083abcfe7a8 | 665 | break; |
cheungderek | 0:e083abcfe7a8 | 666 | case 26 : |
cheungderek | 0:e083abcfe7a8 | 667 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 668 | max7221_control(LED_DIGIT1 | LED_6); |
cheungderek | 0:e083abcfe7a8 | 669 | break; |
cheungderek | 0:e083abcfe7a8 | 670 | case 27 : |
cheungderek | 0:e083abcfe7a8 | 671 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 672 | max7221_control(LED_DIGIT1 | LED_7); |
cheungderek | 0:e083abcfe7a8 | 673 | break; |
cheungderek | 0:e083abcfe7a8 | 674 | case 28 : |
cheungderek | 0:e083abcfe7a8 | 675 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 676 | max7221_control(LED_DIGIT1 | LED_8); |
cheungderek | 0:e083abcfe7a8 | 677 | break; |
cheungderek | 0:e083abcfe7a8 | 678 | case 29 : |
cheungderek | 0:e083abcfe7a8 | 679 | max7221_control(LED_DIGIT2 | LED_2); |
cheungderek | 0:e083abcfe7a8 | 680 | max7221_control(LED_DIGIT1 | LED_9); |
cheungderek | 0:e083abcfe7a8 | 681 | break; |
cheungderek | 0:e083abcfe7a8 | 682 | case 30 : |
cheungderek | 0:e083abcfe7a8 | 683 | max7221_control(LED_DIGIT2 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 684 | max7221_control(LED_DIGIT1 | LED_0); |
cheungderek | 0:e083abcfe7a8 | 685 | break; |
cheungderek | 0:e083abcfe7a8 | 686 | case 31 : |
cheungderek | 0:e083abcfe7a8 | 687 | max7221_control(LED_DIGIT2 | LED_3); |
cheungderek | 0:e083abcfe7a8 | 688 | max7221_control(LED_DIGIT1 | LED_1); |
cheungderek | 0:e083abcfe7a8 | 689 | break; |
cheungderek | 0:e083abcfe7a8 | 690 | } |
cheungderek | 0:e083abcfe7a8 | 691 | wait(1.5); |
cheungderek | 0:e083abcfe7a8 | 692 | // BCD mode |
cheungderek | 0:e083abcfe7a8 | 693 | max7221_control(0x09FF); |
cheungderek | 0:e083abcfe7a8 | 694 | } |
cheungderek | 0:e083abcfe7a8 | 695 | |
cheungderek | 0:e083abcfe7a8 | 696 | /* |
cheungderek | 0:e083abcfe7a8 | 697 | DigitalOut myled(LED1); |
cheungderek | 0:e083abcfe7a8 | 698 | |
cheungderek | 0:e083abcfe7a8 | 699 | int main() { |
cheungderek | 0:e083abcfe7a8 | 700 | while(1) { |
cheungderek | 0:e083abcfe7a8 | 701 | myled = 1; |
cheungderek | 0:e083abcfe7a8 | 702 | wait(0.2); |
cheungderek | 0:e083abcfe7a8 | 703 | myled = 0; |
cheungderek | 0:e083abcfe7a8 | 704 | wait(0.2); |
cheungderek | 0:e083abcfe7a8 | 705 | } |
cheungderek | 0:e083abcfe7a8 | 706 | } |
cheungderek | 0:e083abcfe7a8 | 707 | */ |