FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Committer:
salemtang
Date:
Mon Sep 29 15:55:03 2014 +0000
Revision:
7:33a8bfcbe3be
Parent:
6:10b73ebdba3d
Child:
8:18e86eb228ca
20140930_0055 modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salemtang 6:10b73ebdba3d 1 /**
salemtang 6:10b73ebdba3d 2 * @file main.cpp
salemtang 6:10b73ebdba3d 3 * @brief Abstract
salemtang 6:10b73ebdba3d 4 * @copyright (c)
salemtang 6:10b73ebdba3d 5 */
salemtang 6:10b73ebdba3d 6 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 7 // note
salemtang 6:10b73ebdba3d 8 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 9
salemtang 6:10b73ebdba3d 10 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 11 // include files
salemtang 6:10b73ebdba3d 12 // -----------------------------------------------------------------------------
salemtang 7:33a8bfcbe3be 13 #include "main.h"
salemtang 4:15da67d64f85 14 #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
star297 0:4f67859595b2 15 #include "mbed.h"
salemtang 6:10b73ebdba3d 16 #endif // RTC_CLOCK_TEST || LED_BLINK_TEST
salemtang 4:15da67d64f85 17 #ifdef RTC_CLOCK_TEST
star297 0:4f67859595b2 18 #include "SLCD.h"
salemtang 6:10b73ebdba3d 19 #endif // RTC_CLOCK_TEST
salemtang 6:10b73ebdba3d 20
salemtang 6:10b73ebdba3d 21 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 22 // general define
salemtang 6:10b73ebdba3d 23 // -----------------------------------------------------------------------------
star297 0:4f67859595b2 24
salemtang 6:10b73ebdba3d 25 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 26 // struct define
salemtang 6:10b73ebdba3d 27 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 28
salemtang 6:10b73ebdba3d 29 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 30 // external function
salemtang 6:10b73ebdba3d 31 // -----------------------------------------------------------------------------
star297 0:4f67859595b2 32
salemtang 6:10b73ebdba3d 33 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 34 // function prototype
salemtang 6:10b73ebdba3d 35 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 36 #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
salemtang 3:fb38dbc95b12 37 void initializeSetting (void);
salemtang 6:10b73ebdba3d 38 #endif // RTC_CLOCK_TEST || LED_BLINK_TEST
salemtang 4:15da67d64f85 39 #ifdef LED_BLINK_TEST
salemtang 3:fb38dbc95b12 40 void ledBlink (float dutyfactor);
salemtang 6:10b73ebdba3d 41 #endif // LED_BLINK_TEST
salemtang 4:15da67d64f85 42 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 43 void rtcClock (void);
salemtang 3:fb38dbc95b12 44 void scrollMessage (void);
salemtang 3:fb38dbc95b12 45 void switchinput1_INTIRQ (void);
salemtang 3:fb38dbc95b12 46 void switchinput3_INTIRQ (void);
salemtang 6:10b73ebdba3d 47 #endif // LED_BLINK_TEST
salemtang 3:fb38dbc95b12 48
salemtang 6:10b73ebdba3d 49 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 50 // external variable
salemtang 6:10b73ebdba3d 51 // -----------------------------------------------------------------------------
salemtang 2:678c0be8c23d 52
salemtang 6:10b73ebdba3d 53 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 54 // global variable
salemtang 6:10b73ebdba3d 55 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 56 #ifdef LED_BLINK_TEST
salemtang 3:fb38dbc95b12 57 PwmOut greenled_PO(LED1);
salemtang 3:fb38dbc95b12 58 PwmOut redled_PO(LED2);
salemtang 3:fb38dbc95b12 59 DigitalIn switchinput1_DI(SW1);
salemtang 3:fb38dbc95b12 60 DigitalIn switchinput3_DI(SW3);
salemtang 4:15da67d64f85 61 float defaultdutyfactor = 0.0;
salemtang 6:10b73ebdba3d 62 #endif // LED_BLINK_TEST
salemtang 4:15da67d64f85 63 #ifdef RTC_CLOCK_TEST
salemtang 4:15da67d64f85 64 DigitalOut greenled_DO(LED1);
salemtang 4:15da67d64f85 65 DigitalOut redled_DO(LED2);
salemtang 3:fb38dbc95b12 66 InterruptIn switchinput1_INT(SW1);
salemtang 3:fb38dbc95b12 67 InterruptIn switchinput3_INT(SW3);
star297 0:4f67859595b2 68 SLCD slcd;
star297 0:4f67859595b2 69 Timer scroll;
star297 0:4f67859595b2 70 struct tm t;
salemtang 2:678c0be8c23d 71 int i, j, k, lastscroll, display_timer, minute, hour, colon, dp;
star297 1:34f0bfc62803 72 char message[60];
star297 0:4f67859595b2 73 char buffer[32];
salemtang 6:10b73ebdba3d 74 #endif // RTC_CLOCK_TEST
star297 0:4f67859595b2 75
salemtang 6:10b73ebdba3d 76 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 77 // function
salemtang 6:10b73ebdba3d 78 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 79 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 80 //! @brief Main Function
salemtang 6:10b73ebdba3d 81 //! @param [in] nil
salemtang 6:10b73ebdba3d 82 //! @retval int
salemtang 6:10b73ebdba3d 83 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 84 int main (void)
star297 1:34f0bfc62803 85 {
salemtang 4:15da67d64f85 86 #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
salemtang 3:fb38dbc95b12 87 initializeSetting();
salemtang 6:10b73ebdba3d 88 #endif // RTC_CLOCK_TEST || LED_BLINK_TEST
salemtang 2:678c0be8c23d 89
salemtang 3:fb38dbc95b12 90 while (true) {
salemtang 4:15da67d64f85 91 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 92 rtcClock();
salemtang 6:10b73ebdba3d 93 #endif // RTC_CLOCK_TEST
salemtang 4:15da67d64f85 94
salemtang 4:15da67d64f85 95 #ifdef LED_BLINK_TEST
salemtang 3:fb38dbc95b12 96 if (!switchinput1_DI) {
salemtang 4:15da67d64f85 97 ledBlink(0.5);
salemtang 4:15da67d64f85 98 } else if (!switchinput3_DI) {
salemtang 3:fb38dbc95b12 99 ledBlink(1.0);
star297 1:34f0bfc62803 100 } else {
salemtang 4:15da67d64f85 101 ledBlink(2.0);
star297 0:4f67859595b2 102 }
salemtang 6:10b73ebdba3d 103 #endif // LED_BLINK_TEST
star297 0:4f67859595b2 104 }
star297 1:34f0bfc62803 105 }
star297 0:4f67859595b2 106
salemtang 6:10b73ebdba3d 107 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 108 //! @brief Initialize Setting
salemtang 6:10b73ebdba3d 109 //! @param [in] nil
salemtang 3:fb38dbc95b12 110 //! @retval nil
salemtang 6:10b73ebdba3d 111 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 112 #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
salemtang 3:fb38dbc95b12 113 void initializeSetting (void)
salemtang 3:fb38dbc95b12 114 {
salemtang 4:15da67d64f85 115 #ifdef LED_BLINK_TEST
salemtang 3:fb38dbc95b12 116 switchinput1_DI.mode(PullUp);
salemtang 3:fb38dbc95b12 117 switchinput3_DI.mode(PullUp);
salemtang 6:10b73ebdba3d 118 #endif // LED_BLINK_TEST
salemtang 4:15da67d64f85 119
salemtang 4:15da67d64f85 120 #ifdef RTC_CLOCK_TEST
salemtang 4:15da67d64f85 121 time_t seconds = time(NULL);
salemtang 3:fb38dbc95b12 122
salemtang 3:fb38dbc95b12 123 slcd.All_Segments(1);
salemtang 3:fb38dbc95b12 124 wait(2);
salemtang 3:fb38dbc95b12 125 slcd.All_Segments(0);
salemtang 3:fb38dbc95b12 126 wait(1);
salemtang 3:fb38dbc95b12 127
salemtang 3:fb38dbc95b12 128 greenled_DO = 1;
salemtang 3:fb38dbc95b12 129 redled_DO = 1;
salemtang 3:fb38dbc95b12 130
salemtang 4:15da67d64f85 131 sprintf(message, " rtc clock sw3 sets the hours sw1 sets the minutes");
salemtang 3:fb38dbc95b12 132
salemtang 3:fb38dbc95b12 133 // scrolling message
salemtang 3:fb38dbc95b12 134 scroll.start();
salemtang 3:fb38dbc95b12 135 while (i < 58) {
salemtang 3:fb38dbc95b12 136 while (i < 58) {
salemtang 3:fb38dbc95b12 137 scrollMessage();
salemtang 3:fb38dbc95b12 138 }
salemtang 3:fb38dbc95b12 139 }
salemtang 3:fb38dbc95b12 140 wait(1);
salemtang 3:fb38dbc95b12 141
salemtang 5:15c484c41006 142 switchinput1_INT.rise(switchinput1_INTIRQ);
salemtang 5:15c484c41006 143 switchinput3_INT.rise(switchinput3_INTIRQ);
salemtang 6:10b73ebdba3d 144 #endif // RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 145 }
salemtang 6:10b73ebdba3d 146 #endif // RTC_CLOCK_TEST || LED_BLINK_TEST
salemtang 3:fb38dbc95b12 147
salemtang 6:10b73ebdba3d 148 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 149 //! @brief LED Blink
salemtang 6:10b73ebdba3d 150 //! @param [in] dutyfactor Duty Factor Integer
salemtang 3:fb38dbc95b12 151 //! @retval nil
salemtang 6:10b73ebdba3d 152 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 153 #ifdef LED_BLINK_TEST
salemtang 3:fb38dbc95b12 154 void ledBlink (float dutyfactor)
salemtang 3:fb38dbc95b12 155 {
salemtang 3:fb38dbc95b12 156 redled_PO.write(defaultdutyfactor);
salemtang 3:fb38dbc95b12 157 greenled_PO.write(dutyfactor - defaultdutyfactor);
salemtang 6:10b73ebdba3d 158 defaultdutyfactor += 0.01;
salemtang 3:fb38dbc95b12 159 if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0;
salemtang 6:10b73ebdba3d 160 wait(0.5);
salemtang 3:fb38dbc95b12 161 }
salemtang 4:15da67d64f85 162 #endif
salemtang 3:fb38dbc95b12 163
salemtang 6:10b73ebdba3d 164 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 165 //! @brief RTC Clock
salemtang 6:10b73ebdba3d 166 //! @param [in] nil
salemtang 3:fb38dbc95b12 167 //! @retval nil
salemtang 6:10b73ebdba3d 168 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 169 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 170 void rtcClock (void)
salemtang 3:fb38dbc95b12 171 {
salemtang 3:fb38dbc95b12 172 time_t seconds = time(NULL);
salemtang 3:fb38dbc95b12 173
salemtang 3:fb38dbc95b12 174 if (display_timer > 6) {
salemtang 5:15c484c41006 175 // display Hours,Minutes for 2 seconds
salemtang 5:15c484c41006 176 strftime(buffer, 4, "%H%M", localtime(&seconds));
salemtang 3:fb38dbc95b12 177 slcd.Colon(1);
salemtang 3:fb38dbc95b12 178 redled_DO = 0;
salemtang 3:fb38dbc95b12 179 slcd.DP2(0);
salemtang 3:fb38dbc95b12 180 greenled_DO = 1;
salemtang 3:fb38dbc95b12 181 } else {
salemtang 5:15c484c41006 182 // display Minutes,Seconds for 8 seconds
salemtang 5:15c484c41006 183 strftime(buffer, 4, "%M%S", localtime(&seconds));
salemtang 3:fb38dbc95b12 184 slcd.Colon(0);
salemtang 3:fb38dbc95b12 185 redled_DO = 1;
salemtang 3:fb38dbc95b12 186 slcd.DP2(1);
salemtang 3:fb38dbc95b12 187 greenled_DO = 0;
salemtang 3:fb38dbc95b12 188 }
salemtang 3:fb38dbc95b12 189
salemtang 3:fb38dbc95b12 190 slcd.printf(buffer);
salemtang 3:fb38dbc95b12 191 wait(0.5);
salemtang 3:fb38dbc95b12 192 slcd.DP2(0);
salemtang 3:fb38dbc95b12 193 greenled_DO = 1;
salemtang 3:fb38dbc95b12 194 display_timer++;
salemtang 3:fb38dbc95b12 195 if (display_timer > 9) display_timer = 0;
salemtang 3:fb38dbc95b12 196 wait(0.5);
salemtang 3:fb38dbc95b12 197 }
salemtang 6:10b73ebdba3d 198 #endif // RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 199
salemtang 6:10b73ebdba3d 200 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 201 //! @brief Scroll Message
salemtang 6:10b73ebdba3d 202 //! @param [in] nil
salemtang 3:fb38dbc95b12 203 //! @retval nil
salemtang 6:10b73ebdba3d 204 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 205 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 206 void scrollMessage (void)
star297 0:4f67859595b2 207 {
star297 1:34f0bfc62803 208 if (scroll.read_ms() > lastscroll + 350) {
star297 0:4f67859595b2 209 scroll.reset();
star297 1:34f0bfc62803 210 if (i > 58) {
salemtang 4:15da67d64f85 211 i = 0;
star297 0:4f67859595b2 212 }
star297 0:4f67859595b2 213 int j, k = i;
star297 0:4f67859595b2 214 for (j = 0; j < 4; j++) {
star297 0:4f67859595b2 215 if (message[k+j]) {
star297 0:4f67859595b2 216 slcd.putc(message[k+j]);
star297 0:4f67859595b2 217 } else {
star297 0:4f67859595b2 218 slcd.putc(' ');
star297 0:4f67859595b2 219 k--;
star297 0:4f67859595b2 220 }
star297 0:4f67859595b2 221 }
star297 0:4f67859595b2 222 i++;
salemtang 2:678c0be8c23d 223 lastscroll = scroll.read_ms();
star297 0:4f67859595b2 224 }
star297 0:4f67859595b2 225 }
salemtang 6:10b73ebdba3d 226 #endif // RTC_CLOCK_TEST
salemtang 4:15da67d64f85 227
salemtang 6:10b73ebdba3d 228 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 229 //! @brief Set Minutes ISR
salemtang 6:10b73ebdba3d 230 //! @param [in] nil
salemtang 3:fb38dbc95b12 231 //! @retval nil
salemtang 6:10b73ebdba3d 232 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 233 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 234 void switchinput1_INTIRQ (void)
star297 0:4f67859595b2 235 {
salemtang 2:678c0be8c23d 236 display_timer = 7;
star297 0:4f67859595b2 237 time_t seconds = time(NULL);
star297 1:34f0bfc62803 238 char buffer[2];
star297 0:4f67859595b2 239 strftime(buffer, 2,"%H", localtime(&seconds));
salemtang 6:10b73ebdba3d 240 hour = atoi(buffer); // get Hour integer
star297 0:4f67859595b2 241 strftime(buffer, 2,"%M", localtime(&seconds));
salemtang 6:10b73ebdba3d 242 minute = atoi(buffer); // get Minutes integer
star297 0:4f67859595b2 243 minute++;
salemtang 2:678c0be8c23d 244 if (minute > 59) minute = 0;
salemtang 6:10b73ebdba3d 245 t.tm_sec = 0; // Seconds reset to zero
star297 1:34f0bfc62803 246 t.tm_min = minute;
star297 1:34f0bfc62803 247 t.tm_hour = hour;
star297 1:34f0bfc62803 248 t.tm_mday = 1;
star297 1:34f0bfc62803 249 t.tm_mon = 2;
star297 1:34f0bfc62803 250 t.tm_year = 114;
salemtang 2:678c0be8c23d 251 set_time(mktime(&t));
star297 0:4f67859595b2 252 }
salemtang 6:10b73ebdba3d 253 #endif // RTC_CLOCK_TEST
star297 0:4f67859595b2 254
salemtang 6:10b73ebdba3d 255 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 256 //! @brief Set Hours ISR
salemtang 6:10b73ebdba3d 257 //! @param [in] nil
salemtang 3:fb38dbc95b12 258 //! @retval nil
salemtang 6:10b73ebdba3d 259 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 260 #ifdef RTC_CLOCK_TEST
salemtang 3:fb38dbc95b12 261 void switchinput3_INTIRQ (void)
star297 0:4f67859595b2 262 {
salemtang 2:678c0be8c23d 263 display_timer = 7;
star297 0:4f67859595b2 264 time_t seconds = time(NULL);
star297 0:4f67859595b2 265 char buffer[2];
star297 1:34f0bfc62803 266 strftime(buffer, 2,"%H", localtime(&seconds));
salemtang 6:10b73ebdba3d 267 hour = atoi(buffer); // get Hour integer
star297 0:4f67859595b2 268 strftime(buffer, 2,"%M", localtime(&seconds));
salemtang 6:10b73ebdba3d 269 minute = atoi(buffer); // get Minutes integer
star297 0:4f67859595b2 270 hour++;
salemtang 2:678c0be8c23d 271 if (hour > 23) hour = 0;
salemtang 6:10b73ebdba3d 272 t.tm_sec = 0; // Seconds reset to zero
star297 1:34f0bfc62803 273 t.tm_min = minute;
star297 1:34f0bfc62803 274 t.tm_hour = hour;
star297 1:34f0bfc62803 275 t.tm_mday = 1;
star297 1:34f0bfc62803 276 t.tm_mon = 2;
star297 1:34f0bfc62803 277 t.tm_year = 114;
salemtang 2:678c0be8c23d 278 set_time(mktime(&t));
star297 0:4f67859595b2 279 }
salemtang 6:10b73ebdba3d 280 #endif //RTC_CLOCK_TEST