FRDM-KL46Z board sLCD demo code using RTC clock.

Dependencies:   SLCD mbed-src

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SLCD.h"
00003 
00004 time_t seconds = time(NULL); // needed to start rtc on reset to maintain reasonable time if hard reset
00005 
00006 SLCD slcd;
00007 Timer scroll;
00008 DigitalOut  led1(LED1);
00009 DigitalOut  led2(LED2);
00010 InterruptIn setmin (SW1);
00011 InterruptIn sethour (SW3);
00012 
00013 struct tm t;
00014 
00015 int i,j,k,lastscroll,display_timer,minute,hour,colon,dp;
00016 char message[60];
00017 void scroll_message();
00018 char buffer[32];
00019 
00020 void setminIRQ();
00021 void sethourIRQ();
00022 
00023 
00024 main()
00025 {
00026     slcd.All_Segments(1);
00027     wait(2);
00028     slcd.All_Segments(0);
00029     wait(1);    
00030     
00031     led1 = 1;led2 = 1;
00032     
00033     sprintf(message, "    rtc clock    s3 sets the hours    s1 sets the minutes");
00034     
00035 // scrolling message    
00036     scroll.start();
00037     while (i<58) {
00038 
00039         while (i<58) {
00040             scroll_message();
00041          }
00042     }
00043     wait(1);
00044     
00045     setmin.rise(setminIRQ);     // start set Minutes IRQ
00046     sethour.rise(sethourIRQ);   // start set Hours IRQ
00047     
00048 // rtc clock function    
00049     while(1) {
00050 
00051         time_t seconds = time(NULL);
00052 
00053         if(display_timer>6) {
00054             strftime(buffer, 4, "%H%M", localtime(&seconds));// display Hours,Minutes for 2 seconds
00055             slcd.Colon(1);led2=0;
00056             slcd.DP2(0);led1=1;
00057         } else {
00058             strftime(buffer, 4, "%M%S", localtime(&seconds));// display Minutes,Seconds for 8 seconds            
00059             slcd.Colon(0);led2=1;
00060             slcd.DP2(1);led1=0;
00061         }
00062         slcd.printf(buffer);
00063         wait(.5);
00064         slcd.DP2(0);led1=1;
00065         display_timer++;
00066         if (display_timer>9)display_timer=0;
00067         wait(.5);
00068     }
00069 }
00070 
00071 void scroll_message()
00072 {
00073     if (scroll.read_ms() > lastscroll + 350) {
00074         scroll.reset();
00075         if (i > 58) {
00076             i=0;
00077         }
00078         int j, k = i;
00079         for (j = 0; j < 4; j++) {
00080             if (message[k+j]) {
00081                 slcd.putc(message[k+j]);
00082             } else {
00083                 slcd.putc(' ');
00084                 k--;
00085             }
00086         }
00087         i++;
00088         lastscroll=scroll.read_ms();
00089     }
00090 }
00091 
00092 void setminIRQ(void) // set Minutes ISR
00093 {
00094     display_timer=7;
00095     time_t seconds = time(NULL);
00096     char buffer[2];
00097     strftime(buffer, 2,"%H", localtime(&seconds));
00098     hour = atoi(buffer);    // get Hour integer
00099     strftime(buffer, 2,"%M", localtime(&seconds));
00100     minute = atoi(buffer);  // get Minutes integer
00101     minute++;
00102     if(minute>59) minute=0;
00103     t.tm_sec = 0;   // Seconds reset to zero
00104     t.tm_min = minute;
00105     t.tm_hour = hour;
00106     t.tm_mday = 1;
00107     t.tm_mon = 2;
00108     t.tm_year = 114;
00109     set_time (mktime(&t));
00110 
00111 }
00112 
00113 void sethourIRQ(void) // set Hours ISR
00114 {
00115     display_timer=7;
00116     time_t seconds = time(NULL);
00117     char buffer[2];
00118     strftime(buffer, 2,"%H", localtime(&seconds));
00119     hour = atoi(buffer);    // get Hour integer
00120     strftime(buffer, 2,"%M", localtime(&seconds));
00121     minute = atoi(buffer);  // get Minutes integer
00122     hour++;
00123     if(hour>23) hour=0;
00124     t.tm_sec = 0;   // Seconds reset to zero
00125     t.tm_min = minute;
00126     t.tm_hour = hour;
00127     t.tm_mday = 1;
00128     t.tm_mon = 2;
00129     t.tm_year = 114;
00130     set_time (mktime(&t));
00131 
00132 }
00133 
00134 
00135 
00136