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