FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Committer:
salemtang
Date:
Sun Sep 28 01:50:26 2014 +0000
Revision:
5:15c484c41006
Parent:
4:15da67d64f85
Child:
6:10b73ebdba3d
20140928_1050 modified

Who changed what in which revision?

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