FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp
- Committer:
- salemtang
- Date:
- 2014-09-27
- Revision:
- 4:15da67d64f85
- Parent:
- 3:fb38dbc95b12
- Child:
- 5:15c484c41006
File content as of revision 4:15da67d64f85:
#ifndef RTC_CLOCK_TEST //#define RTC_CLOCK_TEST #endif //RTC_CLOCK_TEST #ifndef LED_BLINK_TEST //#define LED_BLINK_TEST #endif //LED_BLINK_TEST //_____________________________________________________________// //======== INCLUDES ===========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) #include "mbed.h" #endif //RTC_CLOCK_TEST || LED_BLINK_TEST #ifdef RTC_CLOCK_TEST #include "SLCD.h" #endif //RTC_CLOCK_TEST //_____________________________________________________________// //======== DEFINES ============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// #ifdef LED_BLINK_TEST #define PWMDWELL 50 // milliseconds #define DFDELTA 0.01 #endif //RTC_CLOCK_TEST //_____________________________________________________________// //======== MACROS =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //_____________________________________________________________// //======== PROTOTYPES =========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) void initializeSetting (void); #endif //RTC_CLOCK_TEST || LED_BLINK_TEST #ifdef LED_BLINK_TEST void ledBlink (float dutyfactor); #endif //LED_BLINK_TEST #ifdef RTC_CLOCK_TEST void rtcClock (void); void scrollMessage (void); void switchinput1_INTIRQ (void); void switchinput3_INTIRQ (void); #endif //LED_BLINK_TEST //_____________________________________________________________// //======== TABLES =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //_____________________________________________________________// //======== VARIABLES ==========================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// #ifdef LED_BLINK_TEST PwmOut greenled_PO(LED1); PwmOut redled_PO(LED2); DigitalIn switchinput1_DI(SW1); DigitalIn switchinput3_DI(SW3); float defaultdutyfactor = 0.0; #endif //LED_BLINK_TEST #ifdef RTC_CLOCK_TEST DigitalOut greenled_DO(LED1); DigitalOut redled_DO(LED2); InterruptIn switchinput1_INT(SW1); InterruptIn switchinput3_INT(SW3); SLCD slcd; Timer scroll; struct tm t; int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; char message[60]; char buffer[32]; #endif //RTC_CLOCK_TEST //_____________________________________________________________// //======== MAIN() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// int main () { #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) initializeSetting(); #endif //RTC_CLOCK_TEST || LED_BLINK_TEST while (true) { #ifdef RTC_CLOCK_TEST rtcClock(); #endif //RTC_CLOCK_TEST #ifdef LED_BLINK_TEST if (!switchinput1_DI) { ledBlink(0.5); } else if (!switchinput3_DI) { ledBlink(1.0); } else { ledBlink(2.0); } #endif //LED_BLINK_TEST } } //_____________________________________________________________// //======== FUNC() =============================================// //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯// //! ------------------------------------------------------------- //! @brief Initialize Setting //! @[in] nil //! @retval nil //! ------------------------------------------------------------- #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) void initializeSetting (void) { #ifdef LED_BLINK_TEST switchinput1_DI.mode(PullUp); switchinput3_DI.mode(PullUp); #endif //LED_BLINK_TEST #ifdef RTC_CLOCK_TEST time_t seconds = time(NULL); slcd.All_Segments(1); wait(2); slcd.All_Segments(0); wait(1); greenled_DO = 1; redled_DO = 1; sprintf(message, " rtc clock sw3 sets the hours sw1 sets the minutes"); // scrolling message scroll.start(); while (i < 58) { while (i < 58) { scrollMessage(); } } wait(1); switchinput1_INT.rise(switchinput1_INTIRQ); // start set Minutes IRQ switchinput3_INT.rise(switchinput3_INTIRQ); // start set Hours IRQ #endif //RTC_CLOCK_TEST } #endif //RTC_CLOCK_TEST || LED_BLINK_TEST //! ------------------------------------------------------------- //! @brief LED Blink //! @[in] dutyfactor Duty Factor Integer //! @retval nil //! ------------------------------------------------------------- #ifdef LED_BLINK_TEST void ledBlink (float dutyfactor) { redled_PO.write(defaultdutyfactor); greenled_PO.write(dutyfactor - defaultdutyfactor); defaultdutyfactor += DFDELTA; if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0; wait_ms(PWMDWELL); } #endif //! ------------------------------------------------------------- //! @brief RTC Clock //! @[in] nil //! @retval nil //! ------------------------------------------------------------- #ifdef RTC_CLOCK_TEST void rtcClock (void) { 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); redled_DO = 0; slcd.DP2(0); greenled_DO = 1; } else { strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds slcd.Colon(0); redled_DO = 1; slcd.DP2(1); greenled_DO = 0; } slcd.printf(buffer); wait(0.5); slcd.DP2(0); greenled_DO = 1; display_timer++; if (display_timer > 9) display_timer = 0; wait(0.5); } #endif //RTC_CLOCK_TEST //! ------------------------------------------------------------- //! @brief Scroll Message //! @[in] nil //! @retval nil //! ------------------------------------------------------------- #ifdef RTC_CLOCK_TEST void scrollMessage (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(); } } #endif //RTC_CLOCK_TEST //! ------------------------------------------------------------- //! @brief Set Minutes ISR //! @[in] nil //! @retval nil //! ------------------------------------------------------------- #ifdef RTC_CLOCK_TEST void switchinput1_INTIRQ (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)); } #endif //RTC_CLOCK_TEST //! ------------------------------------------------------------- //! @brief Set Hours ISR //! @[in] nil //! @retval nil //! ------------------------------------------------------------- #ifdef RTC_CLOCK_TEST void switchinput3_INTIRQ (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)); } #endif //RTC_CLOCK_TEST