FRDM-KL46Z board sLCD demo code using RTC clock.
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Sat Jul 16 2022 04:29:26 by 1.7.2