FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Committer:
salemtang
Date:
Sat Sep 27 14:56:06 2014 +0000
Revision:
3:fb38dbc95b12
Parent:
2:678c0be8c23d
Child:
4:15da67d64f85
20140927_2356 modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salemtang 2:678c0be8c23d 1 //_____________________________________________________________//
salemtang 2:678c0be8c23d 2 //======== INCLUDES ===========================================//
salemtang 2:678c0be8c23d 3 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
star297 0:4f67859595b2 4 #include "mbed.h"
star297 0:4f67859595b2 5 #include "SLCD.h"
star297 0:4f67859595b2 6
salemtang 2:678c0be8c23d 7 //_____________________________________________________________//
salemtang 2:678c0be8c23d 8 //======== DEFINES ============================================//
salemtang 2:678c0be8c23d 9 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 3:fb38dbc95b12 10 #define PWMDWELL 50 // milliseconds
salemtang 3:fb38dbc95b12 11 #define DFDELTA 0.01
salemtang 3:fb38dbc95b12 12
salemtang 3:fb38dbc95b12 13 //_____________________________________________________________//
salemtang 3:fb38dbc95b12 14 //======== MACROS =============================================//
salemtang 3:fb38dbc95b12 15 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
star297 0:4f67859595b2 16
salemtang 2:678c0be8c23d 17 //_____________________________________________________________//
salemtang 2:678c0be8c23d 18 //======== PROTOTYPES =========================================//
salemtang 2:678c0be8c23d 19 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 3:fb38dbc95b12 20 void initializeSetting (void);
salemtang 3:fb38dbc95b12 21 void ledBlink (float dutyfactor);
salemtang 3:fb38dbc95b12 22 void rtcClock (void);
salemtang 3:fb38dbc95b12 23 void scrollMessage (void);
salemtang 3:fb38dbc95b12 24 void switchinput1_INTIRQ (void);
salemtang 3:fb38dbc95b12 25 void switchinput3_INTIRQ (void);
salemtang 3:fb38dbc95b12 26
salemtang 3:fb38dbc95b12 27 //_____________________________________________________________//
salemtang 3:fb38dbc95b12 28 //======== TABLES =============================================//
salemtang 3:fb38dbc95b12 29 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 2:678c0be8c23d 30
salemtang 2:678c0be8c23d 31 //_____________________________________________________________//
salemtang 2:678c0be8c23d 32 //======== VARIABLES ==========================================//
salemtang 2:678c0be8c23d 33 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 3:fb38dbc95b12 34 DigitalOut greenled_DO(LED1);
salemtang 3:fb38dbc95b12 35 DigitalOut redled_DO(LED2);
salemtang 3:fb38dbc95b12 36 PwmOut greenled_PO(LED1);
salemtang 3:fb38dbc95b12 37 PwmOut redled_PO(LED2);
salemtang 3:fb38dbc95b12 38 DigitalIn switchinput1_DI(SW1);
salemtang 3:fb38dbc95b12 39 DigitalIn switchinput3_DI(SW3);
salemtang 3:fb38dbc95b12 40 InterruptIn switchinput1_INT(SW1);
salemtang 3:fb38dbc95b12 41 InterruptIn switchinput3_INT(SW3);
star297 0:4f67859595b2 42 SLCD slcd;
star297 0:4f67859595b2 43 Timer scroll;
star297 0:4f67859595b2 44 struct tm t;
salemtang 2:678c0be8c23d 45 int i, j, k, lastscroll, display_timer, minute, hour, colon, dp;
star297 1:34f0bfc62803 46 char message[60];
star297 0:4f67859595b2 47 char buffer[32];
salemtang 3:fb38dbc95b12 48 float defaultdutyfactor = 0.0;
star297 0:4f67859595b2 49
salemtang 2:678c0be8c23d 50 //_____________________________________________________________//
salemtang 2:678c0be8c23d 51 //======== MAIN() =============================================//
salemtang 2:678c0be8c23d 52 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 2:678c0be8c23d 53 int main ()
star297 1:34f0bfc62803 54 {
salemtang 3:fb38dbc95b12 55 initializeSetting();
salemtang 2:678c0be8c23d 56
salemtang 3:fb38dbc95b12 57 while (true) {
salemtang 3:fb38dbc95b12 58 rtcClock();
salemtang 3:fb38dbc95b12 59
salemtang 3:fb38dbc95b12 60 if (!switchinput1_DI) {
salemtang 3:fb38dbc95b12 61 ledBlink(1.0);
salemtang 3:fb38dbc95b12 62 } else if (!switchinput3_DI) {
salemtang 3:fb38dbc95b12 63 ledBlink(10.0);
star297 1:34f0bfc62803 64 } else {
star297 0:4f67859595b2 65 }
star297 0:4f67859595b2 66 }
star297 1:34f0bfc62803 67 }
star297 0:4f67859595b2 68
salemtang 2:678c0be8c23d 69 //_____________________________________________________________//
salemtang 2:678c0be8c23d 70 //======== FUNC() =============================================//
salemtang 2:678c0be8c23d 71 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
salemtang 3:fb38dbc95b12 72 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 73 //! @brief Initialize Setting
salemtang 3:fb38dbc95b12 74 //! @[in] nil
salemtang 3:fb38dbc95b12 75 //! @retval nil
salemtang 3:fb38dbc95b12 76 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 77 void initializeSetting (void)
salemtang 3:fb38dbc95b12 78 {
salemtang 3:fb38dbc95b12 79 time_t seconds = time(NULL);
salemtang 3:fb38dbc95b12 80
salemtang 3:fb38dbc95b12 81 switchinput1_DI.mode(PullUp);
salemtang 3:fb38dbc95b12 82 switchinput3_DI.mode(PullUp);
salemtang 3:fb38dbc95b12 83
salemtang 3:fb38dbc95b12 84 slcd.All_Segments(1);
salemtang 3:fb38dbc95b12 85 wait(2);
salemtang 3:fb38dbc95b12 86 slcd.All_Segments(0);
salemtang 3:fb38dbc95b12 87 wait(1);
salemtang 3:fb38dbc95b12 88
salemtang 3:fb38dbc95b12 89 greenled_DO = 1;
salemtang 3:fb38dbc95b12 90 redled_DO = 1;
salemtang 3:fb38dbc95b12 91
salemtang 3:fb38dbc95b12 92 sprintf(message, " rtc clock s3 sets the hours s1 sets the minutes");
salemtang 3:fb38dbc95b12 93
salemtang 3:fb38dbc95b12 94 // scrolling message
salemtang 3:fb38dbc95b12 95 scroll.start();
salemtang 3:fb38dbc95b12 96 while (i < 58) {
salemtang 3:fb38dbc95b12 97 while (i < 58) {
salemtang 3:fb38dbc95b12 98 scrollMessage();
salemtang 3:fb38dbc95b12 99 }
salemtang 3:fb38dbc95b12 100 }
salemtang 3:fb38dbc95b12 101 wait(1);
salemtang 3:fb38dbc95b12 102
salemtang 3:fb38dbc95b12 103 switchinput1_INT.rise(switchinput1_INTIRQ); // start set Minutes IRQ
salemtang 3:fb38dbc95b12 104 switchinput3_INT.rise(switchinput3_INTIRQ); // start set Hours IRQ
salemtang 3:fb38dbc95b12 105 }
salemtang 3:fb38dbc95b12 106
salemtang 3:fb38dbc95b12 107 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 108 //! @brief LED Blink
salemtang 3:fb38dbc95b12 109 //! @[in] dutyfactor Duty Factor
salemtang 3:fb38dbc95b12 110 //! @retval nil
salemtang 3:fb38dbc95b12 111 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 112 void ledBlink (float dutyfactor)
salemtang 3:fb38dbc95b12 113 {
salemtang 3:fb38dbc95b12 114 redled_PO.write(defaultdutyfactor);
salemtang 3:fb38dbc95b12 115 greenled_PO.write(dutyfactor - defaultdutyfactor);
salemtang 3:fb38dbc95b12 116 defaultdutyfactor += DFDELTA;
salemtang 3:fb38dbc95b12 117 if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0;
salemtang 3:fb38dbc95b12 118 wait_ms(PWMDWELL);
salemtang 3:fb38dbc95b12 119 }
salemtang 3:fb38dbc95b12 120
salemtang 3:fb38dbc95b12 121 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 122 //! @brief RTC Clock
salemtang 3:fb38dbc95b12 123 //! @[in] nil
salemtang 3:fb38dbc95b12 124 //! @retval nil
salemtang 3:fb38dbc95b12 125 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 126 void rtcClock (void)
salemtang 3:fb38dbc95b12 127 {
salemtang 3:fb38dbc95b12 128 time_t seconds = time(NULL);
salemtang 3:fb38dbc95b12 129
salemtang 3:fb38dbc95b12 130 if (display_timer > 6) {
salemtang 3:fb38dbc95b12 131 strftime(buffer, 4, "%H%M", localtime(&seconds)); // display Hours,Minutes for 2 seconds
salemtang 3:fb38dbc95b12 132 slcd.Colon(1);
salemtang 3:fb38dbc95b12 133 redled_DO = 0;
salemtang 3:fb38dbc95b12 134 slcd.DP2(0);
salemtang 3:fb38dbc95b12 135 greenled_DO = 1;
salemtang 3:fb38dbc95b12 136 } else {
salemtang 3:fb38dbc95b12 137 strftime(buffer, 4, "%M%S", localtime(&seconds)); // display Minutes,Seconds for 8 seconds
salemtang 3:fb38dbc95b12 138 slcd.Colon(0);
salemtang 3:fb38dbc95b12 139 redled_DO = 1;
salemtang 3:fb38dbc95b12 140 slcd.DP2(1);
salemtang 3:fb38dbc95b12 141 greenled_DO = 0;
salemtang 3:fb38dbc95b12 142 }
salemtang 3:fb38dbc95b12 143
salemtang 3:fb38dbc95b12 144 slcd.printf(buffer);
salemtang 3:fb38dbc95b12 145 wait(0.5);
salemtang 3:fb38dbc95b12 146 slcd.DP2(0);
salemtang 3:fb38dbc95b12 147 greenled_DO = 1;
salemtang 3:fb38dbc95b12 148 display_timer++;
salemtang 3:fb38dbc95b12 149 if (display_timer > 9) display_timer = 0;
salemtang 3:fb38dbc95b12 150 wait(0.5);
salemtang 3:fb38dbc95b12 151 }
salemtang 3:fb38dbc95b12 152
salemtang 3:fb38dbc95b12 153 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 154 //! @brief Scroll Message
salemtang 3:fb38dbc95b12 155 //! @[in] nil
salemtang 3:fb38dbc95b12 156 //! @retval nil
salemtang 3:fb38dbc95b12 157 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 158 void scrollMessage (void)
star297 0:4f67859595b2 159 {
star297 1:34f0bfc62803 160 if (scroll.read_ms() > lastscroll + 350) {
star297 0:4f67859595b2 161 scroll.reset();
star297 1:34f0bfc62803 162 if (i > 58) {
star297 0:4f67859595b2 163 i=0;
star297 0:4f67859595b2 164 }
star297 0:4f67859595b2 165 int j, k = i;
star297 0:4f67859595b2 166 for (j = 0; j < 4; j++) {
star297 0:4f67859595b2 167 if (message[k+j]) {
star297 0:4f67859595b2 168 slcd.putc(message[k+j]);
star297 0:4f67859595b2 169 } else {
star297 0:4f67859595b2 170 slcd.putc(' ');
star297 0:4f67859595b2 171 k--;
star297 0:4f67859595b2 172 }
star297 0:4f67859595b2 173 }
star297 0:4f67859595b2 174 i++;
salemtang 2:678c0be8c23d 175 lastscroll = scroll.read_ms();
star297 0:4f67859595b2 176 }
star297 0:4f67859595b2 177 }
salemtang 3:fb38dbc95b12 178 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 179 //! @brief Set Minutes ISR
salemtang 3:fb38dbc95b12 180 //! @[in] nil
salemtang 3:fb38dbc95b12 181 //! @retval nil
salemtang 3:fb38dbc95b12 182 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 183 void switchinput1_INTIRQ (void)
star297 0:4f67859595b2 184 {
salemtang 2:678c0be8c23d 185 display_timer = 7;
star297 0:4f67859595b2 186 time_t seconds = time(NULL);
star297 1:34f0bfc62803 187 char buffer[2];
star297 0:4f67859595b2 188 strftime(buffer, 2,"%H", localtime(&seconds));
star297 1:34f0bfc62803 189 hour = atoi(buffer); // get Hour integer
star297 0:4f67859595b2 190 strftime(buffer, 2,"%M", localtime(&seconds));
salemtang 2:678c0be8c23d 191 minute = atoi(buffer); // get Minutes integer
star297 0:4f67859595b2 192 minute++;
salemtang 2:678c0be8c23d 193 if (minute > 59) minute = 0;
salemtang 2:678c0be8c23d 194 t.tm_sec = 0; // Seconds reset to zero
star297 1:34f0bfc62803 195 t.tm_min = minute;
star297 1:34f0bfc62803 196 t.tm_hour = hour;
star297 1:34f0bfc62803 197 t.tm_mday = 1;
star297 1:34f0bfc62803 198 t.tm_mon = 2;
star297 1:34f0bfc62803 199 t.tm_year = 114;
salemtang 2:678c0be8c23d 200 set_time(mktime(&t));
star297 0:4f67859595b2 201 }
star297 0:4f67859595b2 202
salemtang 3:fb38dbc95b12 203 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 204 //! @brief Set Hours ISR
salemtang 3:fb38dbc95b12 205 //! @[in] nil
salemtang 3:fb38dbc95b12 206 //! @retval nil
salemtang 3:fb38dbc95b12 207 //! -------------------------------------------------------------
salemtang 3:fb38dbc95b12 208 void switchinput3_INTIRQ (void)
star297 0:4f67859595b2 209 {
salemtang 2:678c0be8c23d 210 display_timer = 7;
star297 0:4f67859595b2 211 time_t seconds = time(NULL);
star297 0:4f67859595b2 212 char buffer[2];
star297 1:34f0bfc62803 213 strftime(buffer, 2,"%H", localtime(&seconds));
star297 1:34f0bfc62803 214 hour = atoi(buffer); // get Hour integer
star297 0:4f67859595b2 215 strftime(buffer, 2,"%M", localtime(&seconds));
salemtang 2:678c0be8c23d 216 minute = atoi(buffer); // get Minutes integer
star297 0:4f67859595b2 217 hour++;
salemtang 2:678c0be8c23d 218 if (hour > 23) hour = 0;
salemtang 2:678c0be8c23d 219 t.tm_sec = 0; // Seconds reset to zero
star297 1:34f0bfc62803 220 t.tm_min = minute;
star297 1:34f0bfc62803 221 t.tm_hour = hour;
star297 1:34f0bfc62803 222 t.tm_mday = 1;
star297 1:34f0bfc62803 223 t.tm_mon = 2;
star297 1:34f0bfc62803 224 t.tm_year = 114;
salemtang 2:678c0be8c23d 225 set_time(mktime(&t));
star297 0:4f67859595b2 226 }