Demo program for driving the memory LCD on the Zero Gecko Starter Kit.

Dependencies:   MemoryLCD mbed

This demo program shows how to drive the memory LCD on the Zero Gecko Starter Kit, by using asynchronous transfers.

Information

All examples in this repo are considered EXPERIMENTAL QUALITY, meaning this code has been created as one-off proof-of-concept and is suitable as a demonstration for experimental purposes only. This code will not be regularly maintained by Silicon Labs and there is no guarantee that these projects will work across all environments, SDK versions and hardware.

Committer:
stevew817
Date:
Thu May 28 08:39:29 2015 +0000
Revision:
12:542a3be118c1
Parent:
11:9b7257e888c1
Workaround for race condition on HG.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stevew817 0:ecfcdf193e3d 1 #include "LS013B7DH03.h"
stevew817 0:ecfcdf193e3d 2 #include "mbed_logo.h"
stevew817 0:ecfcdf193e3d 3 /******************** Define I/O *****************************/
stevew817 0:ecfcdf193e3d 4 DigitalOut myled(LED1);
Steven Cooreman 3:95c3a389bc88 5
Steven Cooreman 3:95c3a389bc88 6 #if defined(TARGET_EFM32ZG_STK3200)
Steven Cooreman 3:95c3a389bc88 7 #define SCK_PIN PC15
Steven Cooreman 3:95c3a389bc88 8 #define MOSI_PIN PD7
Steven Cooreman 3:95c3a389bc88 9 #define CS_PIN PE11
Steven Cooreman 3:95c3a389bc88 10 #define EXTCOM_PIN PE10
Steven Cooreman 3:95c3a389bc88 11 #define DISP_PIN PA10
Steven Cooreman 3:95c3a389bc88 12 #define DISPSEL_PIN PA8
Steven Cooreman 3:95c3a389bc88 13 #elif defined (TARGET_EFM32HG_STK3400)
Steven Cooreman 3:95c3a389bc88 14 #define SCK_PIN PE12
Steven Cooreman 3:95c3a389bc88 15 #define MOSI_PIN PE10
Steven Cooreman 3:95c3a389bc88 16 #define CS_PIN PA10
Steven Cooreman 3:95c3a389bc88 17 #define EXTCOM_PIN PF3
stevew817 10:2acd2401b1a0 18 #define DISPSEL_PIN PA8
Steven Cooreman 3:95c3a389bc88 19 #else
Steven Cooreman 3:95c3a389bc88 20 #error "undefined pinout"
Steven Cooreman 3:95c3a389bc88 21 #endif
stevew817 0:ecfcdf193e3d 22
Steven Cooreman 3:95c3a389bc88 23 DigitalOut CS(CS_PIN);
Steven Cooreman 3:95c3a389bc88 24 DigitalOut EXTCOM(EXTCOM_PIN);
stevew817 11:9b7257e888c1 25 #ifdef DISP_PIN
Steven Cooreman 3:95c3a389bc88 26 DigitalOut DISP(DISP_PIN);
stevew817 11:9b7257e888c1 27 #endif
Steven Cooreman 3:95c3a389bc88 28 DigitalOut DISP_SEL(DISPSEL_PIN);
stevew817 0:ecfcdf193e3d 29
stevew817 7:ce493681a94b 30 SPI displaySPI(MOSI_PIN, NC, SCK_PIN);
stevew817 0:ecfcdf193e3d 31 silabs::LS013B7DH03 display(&displaySPI, &CS, &EXTCOM);
Steven Cooreman 2:66aa675cb1a7 32
stevew817 0:ecfcdf193e3d 33 /******************** Define Timers *****************************/
stevew817 0:ecfcdf193e3d 34
stevew817 0:ecfcdf193e3d 35 LowPowerTicker timeKeeping;
stevew817 0:ecfcdf193e3d 36
stevew817 0:ecfcdf193e3d 37 /***************** Define global variables **********************/
stevew817 0:ecfcdf193e3d 38 #define INIT_SECONDS 17600
stevew817 0:ecfcdf193e3d 39
stevew817 0:ecfcdf193e3d 40 volatile uint32_t prevSeconds = INIT_SECONDS, seconds = INIT_SECONDS;
stevew817 0:ecfcdf193e3d 41 volatile bool refreshed = false;
stevew817 0:ecfcdf193e3d 42
stevew817 0:ecfcdf193e3d 43 /***************** Define callback handlers *********************/
stevew817 0:ecfcdf193e3d 44 void secondsCallback(void);
stevew817 0:ecfcdf193e3d 45 void refreshCallback(void);
stevew817 0:ecfcdf193e3d 46
stevew817 0:ecfcdf193e3d 47 void secondsCallback(void) {
stevew817 0:ecfcdf193e3d 48 seconds++;
stevew817 0:ecfcdf193e3d 49 }
stevew817 0:ecfcdf193e3d 50
stevew817 0:ecfcdf193e3d 51 /**
stevew817 0:ecfcdf193e3d 52 * Callback for refresh completion
stevew817 0:ecfcdf193e3d 53 */
stevew817 0:ecfcdf193e3d 54 void refreshCallback(void) {
stevew817 0:ecfcdf193e3d 55 refreshed = true;
stevew817 0:ecfcdf193e3d 56 }
stevew817 0:ecfcdf193e3d 57
stevew817 0:ecfcdf193e3d 58 /*************************** MAIN *******************************/
stevew817 0:ecfcdf193e3d 59 int main() {
stevew817 0:ecfcdf193e3d 60 // Enable the LCD
stevew817 7:ce493681a94b 61 DISP_SEL = 1;
stevew817 11:9b7257e888c1 62 #ifdef DISP_PIN
stevew817 0:ecfcdf193e3d 63 DISP = 1;
stevew817 11:9b7257e888c1 64 #endif
stevew817 0:ecfcdf193e3d 65
stevew817 0:ecfcdf193e3d 66 // Start generating the 1Hz call for keeping time
stevew817 0:ecfcdf193e3d 67 timeKeeping.attach(&secondsCallback, 1.0f);
stevew817 0:ecfcdf193e3d 68
stevew817 0:ecfcdf193e3d 69 // Reset the LCD to a blank state. (All white)
stevew817 0:ecfcdf193e3d 70 refreshed = false;
stevew817 0:ecfcdf193e3d 71 display.clearImmediate(refreshCallback);
stevew817 0:ecfcdf193e3d 72 while(refreshed == false) sleep();
stevew817 0:ecfcdf193e3d 73
stevew817 0:ecfcdf193e3d 74 printf("Initialization done! \n");
stevew817 0:ecfcdf193e3d 75
stevew817 0:ecfcdf193e3d 76 // Apply mbed logo bitmap to the pixel buffer
stevew817 0:ecfcdf193e3d 77 display.showBMP((uint8_t*)mbed_enabled_logo, 128, 128, 0, 0);
stevew817 0:ecfcdf193e3d 78 display.printf("I like MBED!");
stevew817 0:ecfcdf193e3d 79
stevew817 0:ecfcdf193e3d 80 // Push update to the display
stevew817 0:ecfcdf193e3d 81 refreshed = false;
stevew817 0:ecfcdf193e3d 82 display.update(refreshCallback);
stevew817 0:ecfcdf193e3d 83
stevew817 0:ecfcdf193e3d 84 // Sleep while doing the transmit
stevew817 0:ecfcdf193e3d 85 while(refreshed == false) sleep();
stevew817 0:ecfcdf193e3d 86
stevew817 0:ecfcdf193e3d 87 // Go into clock mode
stevew817 0:ecfcdf193e3d 88 while(1) {
stevew817 0:ecfcdf193e3d 89 sleep();
stevew817 0:ecfcdf193e3d 90
stevew817 0:ecfcdf193e3d 91 // In clock mode, only update once per second
stevew817 0:ecfcdf193e3d 92 if(prevSeconds != seconds) {
stevew817 0:ecfcdf193e3d 93 display.locate(4,15);
stevew817 0:ecfcdf193e3d 94 display.printf("%02d:%02d:%02d", (seconds / 1200) % 24, (seconds / 60) % 60, seconds % 60);
stevew817 0:ecfcdf193e3d 95 if(refreshed == true) {
stevew817 0:ecfcdf193e3d 96 prevSeconds = seconds;
stevew817 0:ecfcdf193e3d 97 refreshed = false;
stevew817 0:ecfcdf193e3d 98 display.update(refreshCallback);
stevew817 12:542a3be118c1 99 while(!refreshed) sleep();
stevew817 0:ecfcdf193e3d 100 }
stevew817 0:ecfcdf193e3d 101 }
stevew817 0:ecfcdf193e3d 102 }
stevew817 0:ecfcdf193e3d 103 }