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

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?

UserRevisionLine numberNew 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 */