FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp
- Committer:
- salemtang
- Date:
- 2014-09-27
- Revision:
- 2:678c0be8c23d
- Parent:
- 1:34f0bfc62803
- Child:
- 3:fb38dbc95b12
File content as of revision 2:678c0be8c23d:
//_____________________________________________________________// //======== INCLUDES ===========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// #include "mbed.h" #include "SLCD.h" //_____________________________________________________________// //======== DEFINES ============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //_____________________________________________________________// //======== PROTOTYPES =========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// void scroll_message (void); void setMinuteIRQ (void); void setHourIRQ (void); //_____________________________________________________________// //======== VARIABLES ==========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// DigitalOut led1_DO(LED1); DigitalOut led2_DO(LED2); InterruptIn setMinute(SW1); InterruptIn setHour(SW3); time_t seconds = time(NULL); // needed to start rtc on reset to maintain reasonable time if hard reset SLCD slcd; Timer scroll; struct tm t; int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; char message[60]; char buffer[32]; //_____________________________________________________________// //======== MAIN() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// int main () { slcd.All_Segments(1); wait(2); slcd.All_Segments(0); wait(1); led1_DO = 1; led2_DO = 1; sprintf(message, " rtc clock s3 sets the hours s1 sets the minutes"); // scrolling message scroll.start(); while (i < 58) { while (i < 58) { scroll_message(); } } wait(1); setMinute.rise(setMinuteIRQ); // start set Minutes IRQ setHour.rise(setHourIRQ); // start set Hours IRQ // rtc clock function while (1) { time_t seconds = time(NULL); if (display_timer > 6) { strftime(buffer, 4, "%H%M", localtime(&seconds)); // display Hours,Minutes for 2 seconds slcd.Colon(1); led2_DO = 0; slcd.DP2(0); led1_DO = 1; } else { strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds slcd.Colon(0); led2_DO = 1; slcd.DP2(1); led1_DO = 0; } slcd.printf(buffer); wait(0.5); slcd.DP2(0); led1_DO = 1; display_timer++; if (display_timer > 9) display_timer = 0; wait(0.5); } } //_____________________________________________________________// //======== FUNC() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// // message control void scroll_message (void) { if (scroll.read_ms() > lastscroll + 350) { scroll.reset(); if (i > 58) { i=0; } int j, k = i; for (j = 0; j < 4; j++) { if (message[k+j]) { slcd.putc(message[k+j]); } else { slcd.putc(' '); k--; } } i++; lastscroll = scroll.read_ms(); } } // set Minutes ISR void setMinuteIRQ (void) { display_timer = 7; time_t seconds = time(NULL); char buffer[2]; strftime(buffer, 2,"%H", localtime(&seconds)); hour = atoi(buffer); // get Hour integer strftime(buffer, 2,"%M", localtime(&seconds)); minute = atoi(buffer); // get Minutes integer minute++; if (minute > 59) minute = 0; t.tm_sec = 0; // Seconds reset to zero t.tm_min = minute; t.tm_hour = hour; t.tm_mday = 1; t.tm_mon = 2; t.tm_year = 114; set_time(mktime(&t)); } // set Hours ISR void setHourIRQ (void) { display_timer = 7; time_t seconds = time(NULL); char buffer[2]; strftime(buffer, 2,"%H", localtime(&seconds)); hour = atoi(buffer); // get Hour integer strftime(buffer, 2,"%M", localtime(&seconds)); minute = atoi(buffer); // get Minutes integer hour++; if (hour > 23) hour = 0; t.tm_sec = 0; // Seconds reset to zero t.tm_min = minute; t.tm_hour = hour; t.tm_mday = 1; t.tm_mon = 2; t.tm_year = 114; set_time(mktime(&t)); }