FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

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));
}