Fork of EFM32 Segment LCD library - used as pull request source for bugfixes
Fork of EFM32_SegmentLCD by
Revision 0:559902e88130, committed 2015-03-17
- Comitter:
- Steven Cooreman
- Date:
- Tue Mar 17 11:45:46 2015 -0500
- Child:
- 1:5335eb33bfcb
- Commit message:
- Initial commit
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EFM32_SegmentLCD.cpp Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,157 @@
+/***************************************************************************//**
+ * @file EFM32_SegmentLCD.cpp
+ * @brief Driver class for the segment LCD's on some of the EFM32 kits.
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#include <mbed.h>
+#include "pinmap.h"
+#include "EFM32_SegmentLCD.h"
+#include "segmentlcd.h"
+
+namespace silabs {
+/*
+ * Constructor.
+ */
+EFM32_SegmentLCD::EFM32_SegmentLCD() {
+ /* Set all pins used for the LCD to disabled. */
+ uint32_t num_pins = sizeof(outPins) / sizeof(outPins[0]);
+ for(uint8_t i = 0; i < num_pins; i++) {
+ pin_mode(outPins[i], Disabled);
+ }
+
+ /* Initialize the LCD without voltage booster */
+ SegmentLCD_Init(false);
+}
+
+void EFM32_SegmentLCD::AllOff( void ) {
+ SegmentLCD_AllOff();
+}
+
+void EFM32_SegmentLCD::AllOn( void ) {
+ SegmentLCD_AllOn();
+}
+
+/*
+ * Switch off (clear) the alphanumeric portion of the display
+ */
+void EFM32_SegmentLCD::AlphaNumberOff(void) {
+ SegmentLCD_AlphaNumberOff();
+}
+
+/*
+ * Switch specified segment on the ring on/off
+ * anum: ring segment index
+ * on: true to turn on, false to turn off
+ */
+void EFM32_SegmentLCD::ARing(int anum, bool on) {
+ SegmentLCD_ARing(anum, (on ? 1 : 0));
+}
+
+/*
+ * Display a battery level on the LCD.
+ * 0 = off
+ * 1 = lowest block
+ * 2 = lowest + second-to-lowest
+ * ...
+ */
+void EFM32_SegmentLCD::Battery(int batteryLevel) {
+ SegmentLCD_Battery(batteryLevel);
+}
+
+/*
+ * Display an energy mode ring on the LCD.
+ * em = energy mode number to display
+ * on = true to turn on, false to turn off.
+ */
+void EFM32_SegmentLCD::EnergyMode(int em, bool on) {
+ SegmentLCD_EnergyMode(em, (on ? 1 : 0));
+}
+
+/*
+ * Display an unsigned integer on the alphanumeric
+ * portion of the display as a hex value.
+ *
+ * num = number to display
+ */
+void EFM32_SegmentLCD::LowerHex( uint32_t num ) {
+ SegmentLCD_LowerHex(num);
+}
+
+/*
+ * Display a signed integer as decimal number on
+ * the alphanumeric part of the display.
+ */
+void EFM32_SegmentLCD::LowerNumber( int num ) {
+ SegmentLCD_LowerNumber(num);
+}
+
+/*
+ * Display a signed integer on the numeric part
+ * of the display (clock area).
+ * max = 9999, min = -9999
+ */
+void EFM32_SegmentLCD::Number(int value) {
+ SegmentLCD_Number(value);
+}
+
+/*
+ * Clear the numeric part of the display.
+ */
+void EFM32_SegmentLCD::NumberOff(void) {
+ SegmentLCD_NumberOff();
+}
+
+/*
+ * Turn a predefined symbol on or off.
+ * lcdSymbol = predefined symbol in segmentlcdconfig_*.h
+ * on = true to turn on, false to turn off.
+ */
+void EFM32_SegmentLCD::Symbol(lcdSymbol s, bool on) {
+ SegmentLCD_Symbol(s, (on ? 1 : 0));
+}
+
+/*
+ * Display an unsigned short integer as a hex value
+ * on the numeric part of the display.
+ * max = FFFF, min = 0
+ */
+void EFM32_SegmentLCD::UnsignedHex(uint16_t value) {
+ SegmentLCD_UnsignedHex(value);
+}
+
+/*
+ * Display a 7-character string on the alphanumeric
+ * portion of the display.
+ */
+void EFM32_SegmentLCD::Write(char *string) {
+ SegmentLCD_Write(string);
+}
+
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EFM32_SegmentLCD.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,143 @@
+/***************************************************************************//**
+ * @file EFM32_SegmentLCD.h
+ * @brief Driver class for the segment LCD's on some of the EFM32 kits.
+ *******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ *
+ * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
+ * obligation to support this Software. Silicon Labs is providing the
+ * Software "AS IS", with no express or implied warranties of any kind,
+ * including, but not limited to, any implied warranties of merchantability
+ * or fitness for any particular purpose or warranties against infringement
+ * of any proprietary rights of a third party.
+ *
+ * Silicon Labs will not be liable for any consequential, incidental, or
+ * special damages, or any other relief, or for any claim by any third party,
+ * arising from your use of this Software.
+ *
+ ******************************************************************************/
+
+#ifndef SILABS_SEGMENTLCD_H
+#define SILABS_SEGMENTLCD_H
+
+#define TARGET_EFM32
+#define TARGET_EFM32GG_STK3700
+
+#ifndef TARGET_EFM32
+#error "The Silicon Labs SegmentLCD library is specifically designed for EFM32 targets."
+#else
+#include "platform.h"
+#include <mbed.h>
+
+#include "segmentlcd.h"
+
+namespace silabs {
+class EFM32_SegmentLCD {
+public:
+ /*
+ * Constructor.
+ */
+ EFM32_SegmentLCD();
+
+ /*
+ * Switch off all elements
+ */
+ void AllOff( void );
+
+ /*
+ * Switch on all elements
+ */
+ void AllOn( void );
+
+ /*
+ * Switch off (clear) the alphanumeric portion of the display
+ */
+ void AlphaNumberOff(void);
+
+ /*
+ * Switch specified segment on the ring on/off
+ * anum: ring segment index
+ * on: true to turn on, false to turn off
+ */
+ void ARing(int anum, bool on);
+
+ /*
+ * Display a battery level on the LCD.
+ * 0 = off
+ * 1 = lowest block
+ * 2 = lowest + second-to-lowest
+ * ...
+ */
+ void Battery(int batteryLevel);
+
+ /*
+ * Display an energy mode ring on the LCD.
+ * em = energy mode number to display
+ * on = true to turn on, false to turn off.
+ */
+ void EnergyMode(int em, bool on);
+
+ /*
+ * Display an unsigned integer on the alphanumeric
+ * portion of the display as a hex value.
+ *
+ * num = number to display
+ */
+ void LowerHex( uint32_t num );
+
+ /*
+ * Display a signed integer as decimal number on
+ * the alphanumeric part of the display.
+ */
+ void LowerNumber( int num );
+
+ /*
+ * Display a signed integer on the numeric part
+ * of the display (clock area).
+ * max = 9999, min = -9999
+ */
+ void Number(int value);
+
+ /*
+ * Clear the numeric part of the display.
+ */
+ void NumberOff(void);
+
+ /*
+ * Turn a predefined symbol on or off.
+ * lcdSymbol = predefined symbol in segmentlcdconfig_*.h
+ * on = true to turn on, false to turn off.
+ */
+ void Symbol(lcdSymbol s, bool on);
+
+ /*
+ * Display an unsigned short integer as a hex value
+ * on the numeric part of the display.
+ * max = FFFF, min = 0
+ */
+ void UnsignedHex(uint16_t value);
+
+ /*
+ * Display a 7-character string on the alphanumeric
+ * portion of the display.
+ */
+ void Write(char *string);
+protected:
+
+};
+}
+
+#endif //TARGET_EFM32
+#endif //SILABS_SEGMENTLCD_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcd.c Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,827 @@
+/**************************************************************************//**
+ * @file
+ * @brief EFM32 Segment LCD Display driver
+ * @version 3.20.9
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include "em_device.h"
+#include "em_cmu.h"
+#include "em_gpio.h"
+
+#include "device_peripherals.h"
+
+#include "segmentlcd.h"
+
+/**************************************************************************//**
+ * @brief
+ * Defines each text symbol's segment in terms of COM and BIT numbers,
+ * in a way that we can enumerate each bit for each text segment in the
+ * following bit pattern:
+ * @verbatim
+ * -------0------
+ *
+ * | \7 |8 /9 |
+ * |5 \ | / |1
+ *
+ * --6--- ---10--
+ *
+ * | / | \11 |
+ * |4 /13 |12 \ |2
+ *
+ * -------3------
+ * @endverbatim
+ * E.g.: First text character bit pattern #3 (above) is
+ * Segment 1D for Display
+ * Location COM 3, BIT 0
+ *****************************************************************************/
+typedef struct
+{
+ uint8_t com[14]; /**< LCD COM line (for multiplexing) */
+ uint8_t bit[14]; /**< LCD bit number */
+} CHAR_TypeDef;
+
+
+/**************************************************************************//**
+ * @brief Defines segment COM and BIT fields numeric display
+ *****************************************************************************/
+typedef struct
+{
+ uint8_t com[7]; /**< LCD COM line (for multiplexing) */
+ uint8_t bit[7]; /**< LCD bit number */
+} NUMBER_TypeDef;
+
+/**************************************************************************//**
+ * @brief Defines segment COM and BIT fields for Energy Modes on display
+ *****************************************************************************/
+typedef struct
+{
+ uint8_t com[5]; /**< LCD COM line (for multiplexing) */
+ uint8_t bit[5]; /**< LCD bit number */
+} EM_TypeDef;
+
+/**************************************************************************//**
+ * @brief Defines segment COM and BIT fields for A-wheel (suited for Anim)
+ *****************************************************************************/
+typedef struct
+{
+ uint8_t com[8]; /**< LCD COM line (for multiplexing) */
+ uint8_t bit[8]; /**< LCD bit number */
+} ARING_TypeDef;
+
+/**************************************************************************//**
+ * @brief Defines segment COM and BIT fields for A-wheel (suited for Anim)
+ *****************************************************************************/
+typedef struct
+{
+ uint8_t com[4]; /**< LCD COM line (for multiplexing) */
+ uint8_t bit[4]; /**< LCD bit number */
+} BATTERY_TypeDef;
+
+/**************************************************************************//**
+ * @brief Defines prototype for all segments in display
+ *****************************************************************************/
+typedef struct
+{
+ CHAR_TypeDef Text[7]; /**< Text on display */
+ NUMBER_TypeDef Number[4]; /**< Numbers on display */
+ EM_TypeDef EMode; /**< Display energy mode */
+ ARING_TypeDef ARing; /**< Display ring */
+ BATTERY_TypeDef Battery; /**< Display battery */
+} MCU_DISPLAY;
+
+/**************************************************************************//**
+ * @brief Working instance of LCD display
+ *****************************************************************************/
+static const MCU_DISPLAY EFM_Display = EFM_DISPLAY_DEF;
+
+
+/**************************************************************************//**
+ * @brief
+ * Defines higlighted segments for the alphabet, starting from "blank" (SPACE)
+ * Uses bit pattern as defined for text segments above.
+ * E.g. a capital O, would have bits 0 1 2 3 4 5 => 0x003f defined
+ *****************************************************************************/
+static const uint16_t EFM_Alphabet[] = {
+ 0x0000, /* space */
+ 0x1100, /* ! */
+ 0x0280, /* " */
+ 0x0000, /* # */
+ 0x0000, /* $ */
+ 0x0602, /* % */
+ 0x0000, /* & */
+ 0x0020, /* ' */
+ 0x0039, /* ( */
+ 0x000f, /* ) */
+ 0x0000, /* * */
+ 0x1540, /* + */
+ 0x2000, /* , */
+ 0x0440, /* - */
+ 0x1000, /* . */
+ 0x2200, /* / */
+
+ 0x003f, /* 0 */
+ 0x0006, /* 1 */
+ 0x045b, /* 2 */
+ 0x044f, /* 3 */
+ 0x0466, /* 4 */
+ 0x046d, /* 5 */
+ 0x047d, /* 6 */
+ 0x0007, /* 7 */
+ 0x047f, /* 8 */
+ 0x046f, /* 9 */
+
+ 0x0000, /* : */
+ 0x0000, /* ; */
+ 0x0a00, /* < */
+ 0x0000, /* = */
+ 0x2080, /* > */
+ 0x0000, /* ? */
+ 0xffff, /* @ */
+
+ 0x0477, /* A */
+ 0x0a79, /* B */
+ 0x0039, /* C */
+ 0x20b0, /* D */
+ 0x0079, /* E */
+ 0x0071, /* F */
+ 0x047d, /* G */
+ 0x0476, /* H */
+ 0x0006, /* I */
+ 0x000e, /* J */
+ 0x0a70, /* K */
+ 0x0038, /* L */
+ 0x02b6, /* M */
+ 0x08b6, /* N */
+ 0x003f, /* O */
+ 0x0473, /* P */
+ 0x083f, /* Q */
+ 0x0c73, /* R */
+ 0x046d, /* S */
+ 0x1101, /* T */
+ 0x003e, /* U */
+ 0x2230, /* V */
+ 0x2836, /* W */
+ 0x2a80, /* X */
+ 0x046e, /* Y */
+ 0x2209, /* Z */
+
+ 0x0039, /* [ */
+ 0x0880, /* backslash */
+ 0x000f, /* ] */
+ 0x0001, /* ^ */
+ 0x0008, /* _ */
+ 0x0100, /* ` */
+
+ 0x1058, /* a */
+ 0x047c, /* b */
+ 0x0058, /* c */
+ 0x045e, /* d */
+ 0x2058, /* e */
+ 0x0471, /* f */
+ 0x0c0c, /* g */
+ 0x0474, /* h */
+ 0x0004, /* i */
+ 0x000e, /* j */
+ 0x0c70, /* k */
+ 0x0038, /* l */
+ 0x1454, /* m */
+ 0x0454, /* n */
+ 0x045c, /* o */
+ 0x0473, /* p */
+ 0x0467, /* q */
+ 0x0450, /* r */
+ 0x0c08, /* s */
+ 0x0078, /* t */
+ 0x001c, /* u */
+ 0x2010, /* v */
+ 0x2814, /* w */
+ 0x2a80, /* x */
+ 0x080c, /* y */
+ 0x2048, /* z */
+
+ 0x0000,
+};
+
+/**************************************************************************//**
+ * @brief
+ * Defines higlighted segments for the numeric display
+ *****************************************************************************/
+
+static const uint16_t EFM_Numbers[] = {
+ 0x003f, /* 0 */
+ 0x0006, /* 1 */
+ 0x005b, /* 2 */
+ 0x004f, /* 3 */
+ 0x0066, /* 4 */
+ 0x006d, /* 5 */
+ 0x007d, /* 6 */
+ 0x0007, /* 7 */
+ 0x007f, /* 8 */
+ 0x006f, /* 9 */
+ 0x0077, /* A */
+ 0x007c, /* b */
+ 0x0039, /* C */
+ 0x005e, /* d */
+ 0x0079, /* E */
+ 0x0071, /* F */
+ 0x0040 /* - */
+};
+
+/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
+/* sign is last element of the table */
+static const uint16_t signIndex = sizeof(EFM_Numbers)/sizeof(uint16_t) - 1 ;
+
+static const LCD_Init_TypeDef lcdInit = LCD_INIT_DEF;
+/** @endcond */
+
+
+/**************************************************************************//**
+ * @brief Disable all segments
+ *****************************************************************************/
+void SegmentLCD_AllOff(void)
+{
+ /* Turn on low segments */
+ LCD_ALL_SEGMENTS_OFF();
+}
+
+
+/**************************************************************************//**
+ * @brief Enable all segments
+ *****************************************************************************/
+void SegmentLCD_AllOn(void)
+{
+ LCD_ALL_SEGMENTS_ON();
+}
+
+
+/**************************************************************************//**
+ * @brief Turn all segments on alpha characters in display off
+ *****************************************************************************/
+void SegmentLCD_AlphaNumberOff(void)
+{
+ LCD_ALPHA_NUMBER_OFF();
+ return;
+}
+
+
+/**************************************************************************//**
+ * @brief Light up or shut off Ring of Indicators
+ * @param anum "Segment number" on "Ring", range 0 - 7
+ * @param on Zero is off, non-zero is on
+ *****************************************************************************/
+void SegmentLCD_ARing(int anum, int on)
+{
+ uint32_t com, bit;
+
+ com = EFM_Display.ARing.com[anum];
+ bit = EFM_Display.ARing.bit[anum];
+
+ if (on)
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ else
+ {
+ LCD_SegmentSet(com, bit, false);
+ }
+}
+
+
+/**************************************************************************//**
+ * @brief Light up or shut off Battery Indicator
+ * @param batteryLevel Battery Level, 0 to 4 (0 turns all off)
+ *****************************************************************************/
+void SegmentLCD_Battery(int batteryLevel)
+{
+ uint32_t com, bit;
+ int i, on;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i < batteryLevel)
+ {
+ on = 1;
+ }
+ else
+ {
+ on = 0;
+ }
+ com = EFM_Display.Battery.com[i];
+ bit = EFM_Display.Battery.bit[i];
+
+ if (on)
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ else
+ {
+ LCD_SegmentSet(com, bit, false);
+ }
+ }
+}
+
+
+/**************************************************************************//**
+ * @brief Disables LCD controller
+ *****************************************************************************/
+void SegmentLCD_Disable(void)
+{
+ /* Disable LCD */
+ LCD_Enable(false);
+
+ /* Make sure CTRL register has been updated */
+ LCD_SyncBusyDelay(LCD_SYNCBUSY_CTRL);
+
+ /* Turn off LCD clock */
+ CMU_ClockEnable(cmuClock_LCD, false);
+
+ /* Turn off voltage boost if enabled */
+ CMU->LCDCTRL = 0;
+}
+
+
+/**************************************************************************//**
+ * @brief Light up or shut off Energy Mode indicator
+ * @param em Energy Mode numer 0 to 4
+ * @param on Zero is off, non-zero is on
+ *****************************************************************************/
+void SegmentLCD_EnergyMode(int em, int on)
+{
+ uint32_t com, bit;
+
+ com = EFM_Display.EMode.com[em];
+ bit = EFM_Display.EMode.bit[em];
+
+ if (on)
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ else
+ {
+ LCD_SegmentSet(com, bit, false);
+ }
+}
+
+/**************************************************************************//**
+ * @brief Get frame rate division value corresponding to mux selection
+ * @param mux enum
+ *****************************************************************************/
+uint8_t SegmentLCD_GetFrameRateDiv(LCD_Mux_TypeDef muxSetting) {
+ switch(muxSetting) {
+ /** Static (segments can be multiplexed with LCD_COM[0]) */
+ case lcdMuxStatic: return 2;
+ /** Duplex / 1/2 Duty cycle (segments can be multiplexed with LCD_COM[0:1]) */
+ case lcdMuxDuplex: return 4;
+ /** Triplex / 1/3 Duty cycle (segments can be multiplexed with LCD_COM[0:2]) */
+ case lcdMuxTriplex: return 6;
+ /** Quadruplex / 1/4 Duty cycle (segments can be multiplexed with LCD_COM[0:3]) */
+ case lcdMuxQuadruplex: return 8;
+ #if defined(_EFM32_TINY_FAMILY) || defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
+ /** Sextaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]) */
+ case lcdMuxSextaplex: return 12;
+ /** Octaplex / 1/6 Duty cycle (segments can be multiplexed with LCD_COM[0:5]) */
+ case lcdMuxOctaplex: return 16;
+ #endif
+ default: return 1;
+ }
+}
+
+/**************************************************************************//**
+ * @brief Segment LCD Initialization routine for EFM32 STK display
+ * @param useBoost Set to use voltage boost
+ *****************************************************************************/
+void SegmentLCD_Init(bool useBoost)
+{
+
+ /* Ensure LE modules are accessible */
+ CMU_ClockEnable(cmuClock_CORELE, true);
+
+ /* Enable LFRCO as LFACLK in CMU (will also enable oscillator if not enabled) */
+ CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO);
+
+ /* LCD Controller Prescaler */
+
+ /* Calculate value. Approach 50Hz for framerate. */
+ uint32_t prescaler = (LOW_ENERGY_CLOCK_FREQUENCY / 32) / SegmentLCD_GetFrameRateDiv(lcdInit.mux);
+
+ CMU_ClockDivSet(cmuClock_LCDpre, prescaler);
+
+ /* Frame Rate */
+ CMU_LCDClkFDIVSet(0);
+
+ /* Enable clock to LCD module */
+ CMU_ClockEnable(cmuClock_LCD, true);
+
+ LCD_DISPLAY_ENABLE();
+
+ /* Disable interrupts */
+ LCD_IntDisable(0xFFFFFFFF);
+
+ /* Initialize and enable LCD controller */
+ LCD_Init(&lcdInit);
+
+ /* Enable all display segments */
+ LCD_SEGMENTS_ENABLE();
+
+ /* Enable boost if necessary */
+ if (useBoost)
+ {
+ LCD_VBoostSet(LCD_BOOST_LEVEL);
+ LCD_VLCDSelect(lcdVLCDSelVExtBoost);
+ CMU->LCDCTRL |= CMU_LCDCTRL_VBOOSTEN;
+ }
+
+ /* Turn all segments off */
+ SegmentLCD_AllOff();
+
+ LCD_SyncBusyDelay(0xFFFFFFFF);
+}
+
+
+/**************************************************************************//**
+ * @brief Write a hexadecimal number on lower alphanumeric part of
+ * Segment LCD display
+ * @param num Hexadecimal number value to put on display, in range 0
+ * to 0x0FFFFFFF
+ *****************************************************************************/
+void SegmentLCD_LowerHex( uint32_t num )
+{
+ int i;
+ char str[7];
+ uint32_t nibble;
+
+ SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 0);
+
+ for ( i=6; i>=0; i-- )
+ {
+ nibble = num & 0xF;
+
+ if ( nibble < 10 )
+ str[i] = nibble + '0';
+ else if ( nibble == 11 )
+ str[i] = 'b';
+ else if ( nibble == 13 )
+ str[i] = 'd';
+ else
+ str[i] = (nibble - 10) + 'A';
+
+ num >>= 4;
+ }
+
+ SegmentLCD_Write(str);
+}
+
+/**************************************************************************//**
+ * @brief Write number on lower alphanumeric part of Segment LCD display
+ * @param num Numeric value to put on display, in range -9999999 to +9999999
+ *****************************************************************************/
+void SegmentLCD_LowerNumber( int num )
+{
+ int i;
+ char str[7];
+
+ SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 0);
+
+ if ( ( num > 9999999 ) || ( num < -9999999 ) )
+ {
+ SegmentLCD_Write("Ovrflow");
+ return;
+ }
+
+ if ( num < 0 )
+ {
+ SegmentLCD_Symbol(LCD_SYMBOL_MINUS, 1);
+ num = -num;
+ }
+
+ for ( i=6; i>=0; i-- )
+ {
+ if ( ( i < 6 ) && ( num == 0 ) )
+ {
+ str[i] = ' ';
+ }
+ else
+ {
+ str[i] = (num % 10) + '0';
+ num /= 10;
+ }
+ }
+
+ SegmentLCD_Write(str);
+}
+
+
+/**************************************************************************//**
+ * @brief Write number on numeric part on Segment LCD display
+ * @param value Numeric value to put on display, in range -999 to +9999
+ *****************************************************************************/
+void SegmentLCD_Number(int value)
+{
+ int i, com, bit, digit, div, neg;
+ uint16_t bitpattern;
+ uint16_t num;
+
+ /* Parameter consistancy check */
+ if (value >= 9999)
+ {
+ value = 9999;
+ }
+ if (value <= -1000)
+ {
+ value = -999;
+ }
+ if (value < 0)
+ {
+ value = abs(value);
+ neg = 1;
+ }
+ else
+ {
+ neg = 0;
+ }
+
+ /* If an update is in progress we must block, or there might be tearing */
+ LCD_SyncBusyDelay(0xFFFFFFFF);
+
+ /* Freeze updates to avoid partial refresh of display */
+ LCD_FreezeEnable(true);
+
+ /* Turn off all number LCD segments */
+ SegmentLCD_NumberOff();
+
+ /* Extract useful digits */
+ div = 1;
+ for (digit = 0; digit < 4; digit++)
+ {
+ num = (value / div) % 10;
+ if ((neg == 1) && (digit == 3)) num = signIndex;
+ /* Get number layout of display */
+ bitpattern = EFM_Numbers[num];
+ for (i = 0; i < 7; i++)
+ {
+ bit = EFM_Display.Number[digit].bit[i];
+ com = EFM_Display.Number[digit].com[i];
+ if (bitpattern & (1 << i))
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ }
+ div = div * 10;
+ }
+ /* Sync LCD registers to LE domain */
+ LCD_FreezeEnable(false);
+}
+
+
+/**************************************************************************//**
+ * @brief Turn all segments on numeric digits in display off
+ *****************************************************************************/
+void SegmentLCD_NumberOff(void)
+{
+ /* Turn off all number segments */
+ LCD_NUMBER_OFF();
+ return;
+}
+
+
+/**************************************************************************//**
+ * @brief Light up or shut off various symbols on Segment LCD
+ * @param s Which symbol to turn on or off
+ * @param on Zero is off, non-zero is on
+ *****************************************************************************/
+void SegmentLCD_Symbol(lcdSymbol s, int on)
+{
+ int com = 0;
+ int bit = 0;
+
+ switch (s)
+ {
+ case LCD_SYMBOL_GECKO:
+ com = LCD_SYMBOL_GECKO_COM;
+ bit = LCD_SYMBOL_GECKO_SEG;
+ break;
+ case LCD_SYMBOL_ANT:
+ com = LCD_SYMBOL_ANT_COM;
+ bit = LCD_SYMBOL_ANT_SEG;
+ break;
+ case LCD_SYMBOL_PAD0:
+ com = LCD_SYMBOL_PAD0_COM;
+ bit = LCD_SYMBOL_PAD0_SEG;
+ break;
+ case LCD_SYMBOL_PAD1:
+ com = LCD_SYMBOL_PAD1_COM;
+ bit = LCD_SYMBOL_PAD1_SEG;
+ break;
+ case LCD_SYMBOL_EFM32:
+ com = LCD_SYMBOL_EFM32_COM;
+ bit = LCD_SYMBOL_EFM32_SEG;
+ break;
+ case LCD_SYMBOL_MINUS:
+ com = LCD_SYMBOL_MINUS_COM;
+ bit = LCD_SYMBOL_MINUS_SEG;
+ break;
+ case LCD_SYMBOL_COL3:
+ com = LCD_SYMBOL_COL3_COM;
+ bit = LCD_SYMBOL_COL3_SEG;
+ break;
+ case LCD_SYMBOL_COL5:
+ com = LCD_SYMBOL_COL5_COM;
+ bit = LCD_SYMBOL_COL5_SEG;
+ break;
+ case LCD_SYMBOL_COL10:
+ com = LCD_SYMBOL_COL10_COM;
+ bit = LCD_SYMBOL_COL10_SEG;
+ break;
+#ifdef LCD_SYMBOL_DEGC_SEG
+ case LCD_SYMBOL_DEGC:
+ com = LCD_SYMBOL_DEGC_COM;
+ bit = LCD_SYMBOL_DEGC_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_DEGF_SEG
+ case LCD_SYMBOL_DEGF:
+ com = LCD_SYMBOL_DEGF_COM;
+ bit = LCD_SYMBOL_DEGF_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_DP2_SEG
+ case LCD_SYMBOL_DP2:
+ com = LCD_SYMBOL_DP2_COM;
+ bit = LCD_SYMBOL_DP2_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_DP3_SEG
+ case LCD_SYMBOL_DP3:
+ com = LCD_SYMBOL_DP3_COM;
+ bit = LCD_SYMBOL_DP3_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_DP4_SEG
+ case LCD_SYMBOL_DP4:
+ com = LCD_SYMBOL_DP4_COM;
+ bit = LCD_SYMBOL_DP4_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_DP5_SEG
+ case LCD_SYMBOL_DP5:
+ com = LCD_SYMBOL_DP5_COM;
+ bit = LCD_SYMBOL_DP5_SEG;
+ break;
+#endif
+ case LCD_SYMBOL_DP6:
+ com = LCD_SYMBOL_DP6_COM;
+ bit = LCD_SYMBOL_DP6_SEG;
+ break;
+ case LCD_SYMBOL_DP10:
+ com = LCD_SYMBOL_DP10_COM;
+ bit = LCD_SYMBOL_DP10_SEG;
+ break;
+#ifdef LCD_SYMBOL_AM_SEG
+ case LCD_SYMBOL_AM:
+ com = LCD_SYMBOL_AM_COM;
+ bit = LCD_SYMBOL_AM_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_PM_SEG
+ case LCD_SYMBOL_PM:
+ com = LCD_SYMBOL_PM_COM;
+ bit = LCD_SYMBOL_PM_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_MICROAMP_SEG
+ case LCD_SYMBOL_MICROAMP:
+ com = LCD_SYMBOL_MICROAMP_COM;
+ bit = LCD_SYMBOL_MICROAMP_SEG;
+ break;
+#endif
+#ifdef LCD_SYMBOL_MILLIAMP_SEG
+ case LCD_SYMBOL_MILLIAMP:
+ com = LCD_SYMBOL_MILLIAMP_COM;
+ bit = LCD_SYMBOL_MILLIAMP_SEG;
+ break;
+#endif
+
+ }
+ if (on)
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ else
+ {
+ LCD_SegmentSet(com, bit, false);
+ }
+}
+
+
+/**************************************************************************//**
+ * @brief Write hexadecimal number on numeric part on Segment LCD display
+ * @param value Numeric value to put on display, in range 0x0000-0xFFFF
+ *****************************************************************************/
+void SegmentLCD_UnsignedHex(uint16_t value)
+{
+ int num, i, com, bit, digit;
+ uint16_t bitpattern;
+
+ /* Parameter consistancy check */
+ if (value >= 0xffff)
+ {
+ value = 0xffff;
+ }
+
+ /* If an update is in progress we must block, or there might be tearing */
+ LCD_SyncBusyDelay(0xFFFFFFFF);
+
+ /* Freeze updates to avoid partial refresh of display */
+ LCD_FreezeEnable(true);
+
+ /* Turn off all number LCD segments */
+ SegmentLCD_NumberOff();
+
+ for (digit = 0; digit < 4; digit++)
+ {
+ num = (value >> (4 * digit)) & 0x0f;
+ bitpattern = EFM_Numbers[num];
+ for (i = 0; i < 7; i++)
+ {
+ bit = EFM_Display.Number[digit].bit[i];
+ com = EFM_Display.Number[digit].com[i];
+ if (bitpattern & (1 << i))
+ {
+ LCD_SegmentSet(com, bit, true);
+ }
+ }
+ }
+
+ /* Sync LCD registers to LE domain */
+ LCD_FreezeEnable(false);
+}
+
+
+/**************************************************************************//**
+ * @brief Write text on LCD display
+ * @param string Text string to show on display
+ *****************************************************************************/
+void SegmentLCD_Write(char *string)
+{
+ int data, length, index;
+ uint16_t bitfield;
+ uint32_t com, bit;
+ int i;
+
+ length = strlen(string);
+ index = 0;
+
+ /* If an update is in progress we must block, or there might be tearing */
+ LCD_SyncBusyDelay(0xFFFFFFFF);
+
+ /* Freeze LCD to avoid partial updates */
+ LCD_FreezeEnable(true);
+
+ /* Turn all segments off */
+ SegmentLCD_AlphaNumberOff();
+
+ /* Fill out all characters on display */
+ for (index = 0; index < 7; index++)
+ {
+ if (index < length)
+ {
+ data = (int) *string;
+ }
+ else /* Padding with space */
+ {
+ data = 0x20; /* SPACE */
+ }
+ /* Defined letters currently starts at "SPACE" - ASCII 0x20; */
+ data = data - 0x20;
+ /* Get font for this letter */
+ bitfield = EFM_Alphabet[data];
+
+ for (i = 0; i < 14; i++)
+ {
+ bit = EFM_Display.Text[index].bit[i];
+ com = EFM_Display.Text[index].com[i];
+
+ if (bitfield & (1 << i))
+ {
+ /* Turn on segment */
+ LCD_SegmentSet(com, bit, true);
+ }
+ }
+ string++;
+ }
+ /* Enable update */
+ LCD_FreezeEnable(false);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcd.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,79 @@
+/**************************************************************************//**
+ * @file
+ * @brief EFM32 Segment LCD Display driver, header file
+ * @version 3.20.9
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+
+#ifndef __SEGMENTLCD_H
+#define __SEGMENTLCD_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#if defined( TARGET_EFM32GG_STK3700 )
+#include "segmentlcdconfig_stk_gg.h"
+#elif defined( TARGET_EFM32_G8XX_STK )
+#include "segmentlcdconfig_stk_g.h"
+#elif defined( TARGET_EFM32LG_STK3600 )
+#include "segmentlcdconfig_stk_lg.h"
+#elif defined( TARGET_EFM32TG_STK3300 )
+#include "segmentlcdconfig_stk_tg.h"
+#elif defined( TARGET_EFM32WG_STK3800 )
+#include "segmentlcdconfig_stk_wg.h"
+#elif defined( TARGET_EFM32ZG_STK3200 )
+#error "No segment LCD available on the Zero Gecko STK."
+#elif defined( TARGET_EFM32HG_STK3400 )
+#error "No segment LCD available on the Happy Gecko STK."
+#else
+#error "No EFM32 target STK defined."
+#endif
+
+/***************************************************************************//**
+ * @addtogroup Drivers
+ * @{
+ ******************************************************************************/
+
+/***************************************************************************//**
+ * @addtogroup SegmentLcd
+ * @{
+ ******************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Regular functions */
+void SegmentLCD_AllOff(void);
+void SegmentLCD_AllOn(void);
+void SegmentLCD_AlphaNumberOff(void);
+void SegmentLCD_ARing(int anum, int on);
+void SegmentLCD_Battery(int batteryLevel);
+void SegmentLCD_Disable(void);
+void SegmentLCD_EnergyMode(int em, int on);
+void SegmentLCD_Init(bool useBoost);
+void SegmentLCD_LowerHex( uint32_t num );
+void SegmentLCD_LowerNumber( int num );
+void SegmentLCD_Number(int value);
+void SegmentLCD_NumberOff(void);
+void SegmentLCD_Symbol(lcdSymbol s, int on);
+void SegmentLCD_UnsignedHex(uint16_t value);
+void SegmentLCD_Write(char *string);
+
+#ifdef __cplusplus
+}
+#endif
+
+/** @} (end group SegmentLcd) */
+/** @} (end group Drivers) */
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcdconfig_stk_g.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,333 @@
+/**************************************************************************//**
+ * @file
+ * @brief Segment LCD Config for the EFM32_G8xx_STK
+ * @version 3.20.5
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#ifndef __SEGMENTLCDCONFIG_H
+#define __SEGMENTLCDCONFIG_H
+
+#include "em_lcd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Range of symbols available on display */
+typedef enum
+{
+ LCD_SYMBOL_GECKO,
+ LCD_SYMBOL_ANT,
+ LCD_SYMBOL_PAD0,
+ LCD_SYMBOL_PAD1,
+ LCD_SYMBOL_AM,
+ LCD_SYMBOL_PM,
+ LCD_SYMBOL_EFM32,
+ LCD_SYMBOL_MINUS,
+ LCD_SYMBOL_COL3,
+ LCD_SYMBOL_COL5,
+ LCD_SYMBOL_COL10,
+ LCD_SYMBOL_DEGC,
+ LCD_SYMBOL_DEGF,
+ LCD_SYMBOL_MICROAMP,
+ LCD_SYMBOL_MILLIAMP,
+ LCD_SYMBOL_DP6,
+ LCD_SYMBOL_DP10,
+} lcdSymbol;
+
+
+#define LCD_SYMBOL_GECKO_COM 3
+#define LCD_SYMBOL_GECKO_SEG 8
+#define LCD_SYMBOL_ANT_COM 3
+#define LCD_SYMBOL_ANT_SEG 1
+#define LCD_SYMBOL_PAD0_COM 1
+#define LCD_SYMBOL_PAD0_SEG 8
+#define LCD_SYMBOL_PAD1_COM 2
+#define LCD_SYMBOL_PAD1_SEG 8
+#define LCD_SYMBOL_AM_COM 0
+#define LCD_SYMBOL_AM_SEG 32
+#define LCD_SYMBOL_PM_COM 0
+#define LCD_SYMBOL_PM_SEG 35
+#define LCD_SYMBOL_EFM32_COM 0
+#define LCD_SYMBOL_EFM32_SEG 8
+#define LCD_SYMBOL_MINUS_COM 0
+#define LCD_SYMBOL_MINUS_SEG 9
+#define LCD_SYMBOL_COL3_COM 0
+#define LCD_SYMBOL_COL3_SEG 16
+#define LCD_SYMBOL_COL5_COM 0
+#define LCD_SYMBOL_COL5_SEG 24
+#define LCD_SYMBOL_COL10_COM 0
+#define LCD_SYMBOL_COL10_SEG 39
+#define LCD_SYMBOL_DEGC_COM 0
+#define LCD_SYMBOL_DEGC_SEG 34
+#define LCD_SYMBOL_DEGF_COM 1
+#define LCD_SYMBOL_DEGF_SEG 34
+#define LCD_SYMBOL_MICROAMP_COM 2
+#define LCD_SYMBOL_MICROAMP_SEG 34
+#define LCD_SYMBOL_MILLIAMP_COM 3
+#define LCD_SYMBOL_MILLIAMP_SEG 34
+#define LCD_SYMBOL_DP6_COM 0
+#define LCD_SYMBOL_DP6_SEG 21
+#define LCD_SYMBOL_DP10_COM 0
+#define LCD_SYMBOL_DP10_SEG 37
+
+/* LCD Controller Prescaler (divide by 128) */
+/* CLKlcd = 256 Hz */
+#define LCD_CMU_CLK_PRE cmuClkDiv_128
+#define LCD_CMU_CLK_DIV 0
+
+#define LCD_BOOST_LEVEL lcdVBoostLevel0
+
+#define LCD_INIT_DEF \
+{ true,\
+ lcdMuxQuadruplex,\
+ lcdBiasOneThird,\
+ lcdWaveLowPower,\
+ lcdVLCDSelVDD,\
+ lcdConConfVLCD }
+
+#define LCD_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0x80000000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0x80000000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0x80000000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0x80000000, 0x00000000);\
+ LCD_SegmentSetHigh(0, 0x52, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0xFB, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0xFB, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0xFB, 0x00000000);\
+} while (0)
+
+#define LCD_ALPHA_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0x7ECCCC00, 0x00000000);\
+ LCD_SegmentSetLow(1, 0x7FFFFEFC, 0x00000000);\
+ LCD_SegmentSetLow(2, 0x7FFFFEFC, 0x00000000);\
+ LCD_SegmentSetLow(3, 0x7FFFFEFC, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetHigh(0, 0xFF, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0xFF, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0xFF, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0xFF, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_ON() \
+do { \
+ LCD_SegmentSetLow(0, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(1, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(2, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(3, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(0, 0xFF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(1, 0xFF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(2, 0xFF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(3, 0xFF, 0xFFFFFFFF);\
+} while(0)
+
+#define LCD_SEGMENTS_ENABLE() \
+do { \
+ LCD_SegmentRangeEnable(lcdSegmentAll, true);\
+} while(0)
+
+#define LCD_DISPLAY_ENABLE() \
+do { \
+ ;\
+} while(0)
+
+#define EFM_DISPLAY_DEF {\
+ .Text = {\
+ { /* 1 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 10, .bit[1] = 12, .bit[2] = 12, .bit[3] = 10,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 9, .bit[5] = 9, .bit[6] = 9, .bit[7] = 10,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 11, .bit[9] = 11, .bit[10] = 12, .bit[11] = 11,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 11, .bit[13] = 10\
+ },\
+ { /* 2 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 14, .bit[1] = 16, .bit[2] = 16, .bit[3] = 14,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 14,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 15, .bit[9] = 15, .bit[10] = 16, .bit[11] = 15,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 15, .bit[13] = 14\
+ },\
+ { /* 3 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 18, .bit[1] = 20, .bit[2] = 20, .bit[3] = 18,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 17, .bit[5] = 17, .bit[6] = 17, .bit[7] = 18,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 19, .bit[9] = 19, .bit[10] = 20, .bit[11] = 19,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 19, .bit[13] = 18\
+ },\
+ { /* 4 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 22, .bit[1] = 24, .bit[2] = 24, .bit[3] = 22,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 21, .bit[5] = 21, .bit[6] = 21, .bit[7] = 22,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 23, .bit[9] = 23, .bit[10] = 24, .bit[11] = 23,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 23, .bit[13] = 22\
+ },\
+ { /* 5 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 25, .bit[1] = 6, .bit[2] = 6, .bit[3] = 25,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 7, .bit[5] = 7, .bit[6] = 7, .bit[7] = 25,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 26, .bit[9] = 26, .bit[10] = 6, .bit[11] = 26,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 26, .bit[13] = 25\
+ },\
+ { /* 6 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 27, .bit[1] = 04, .bit[2] = 04, .bit[3] = 27,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 5, .bit[5] = 5, .bit[6] = 5, .bit[7] = 27,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 28, .bit[9] = 28, .bit[10] = 4, .bit[11] = 28,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 28, .bit[13] = 27\
+ },\
+ { /* 7 */\
+ .com[0] = 3, .com[1] = 3, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 29, .bit[1] = 2, .bit[2] = 2, .bit[3] = 29,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2, .com[7] = 2,\
+ .bit[4] = 03, .bit[5] = 3, .bit[6] = 3, .bit[7] = 29,\
+ .com[8] = 2, .com[9] = 3, .com[10] = 2, .com[11] = 0,\
+ .bit[8] = 30, .bit[9] = 30, .bit[10] = 2, .bit[11] = 30,\
+ .com[12] = 1, .com[13] = 1,\
+ .bit[12] = 30, .bit[13] = 29\
+ }\
+ },\
+ .Number = {\
+ {\
+ .com[0] = 3, .com[1] = 2, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 31, .bit[1] = 31, .bit[2] = 31, .bit[3] = 31,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2,\
+ .bit[4] = 32, .bit[5] = 32, .bit[6] = 32,\
+ },\
+ {\
+ .com[0] = 3, .com[1] = 2, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 33, .bit[1] = 33, .bit[2] = 33, .bit[3] = 33,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2,\
+ .bit[4] = 35, .bit[5] = 35, .bit[6] = 35,\
+ },\
+ {\
+ .com[0] = 3, .com[1] = 2, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 36, .bit[1] = 36, .bit[2] = 36, .bit[3] = 36,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2,\
+ .bit[4] = 37, .bit[5] = 37, .bit[6] = 37,\
+ },\
+ {\
+ .com[0] = 3, .com[1] = 2, .com[2] = 1, .com[3] = 0,\
+ .bit[0] = 38, .bit[1] = 38, .bit[2] = 38, .bit[3] = 38,\
+ .com[4] = 1, .com[5] = 3, .com[6] = 2,\
+ .bit[4] = 39, .bit[5] = 39, .bit[6] = 39,\
+ },\
+ },\
+ .EMode = {\
+ .com[0] = 1, .bit[0] = 1,\
+ .com[1] = 2, .bit[1] = 1,\
+ .com[2] = 1, .bit[2] = 0,\
+ .com[3] = 2, .bit[3] = 0,\
+ .com[4] = 3, .bit[4] = 0,\
+ },\
+ .ARing = {\
+ .com[0] = 0, .bit[0] = 0,\
+ .com[1] = 0, .bit[1] = 1,\
+ .com[2] = 0, .bit[2] = 2,\
+ .com[3] = 0, .bit[3] = 3,\
+ .com[4] = 0, .bit[4] = 4,\
+ .com[5] = 0, .bit[5] = 5,\
+ .com[6] = 0, .bit[6] = 6,\
+ .com[7] = 0, .bit[7] = 7,\
+ },\
+ .Battery = {\
+ .com[0] = 0, .bit[0] = 12,\
+ .com[1] = 0, .bit[1] = 17,\
+ .com[2] = 0, .bit[2] = 20,\
+ .com[3] = 0, .bit[3] = 13,\
+ }\
+}
+
+static const PinName outPins[] = {
+ /* SEG28..39 */
+ PA7, //LCD_SEG35
+ PA8, //LCD_SEG36
+ PA9, //LCD_SEG37
+ PA10, //LCD_SEG38
+ PA11, //LCD_SEG39
+ PB0, //LCD_SEG32
+ PB1, //LCD_SEG33
+ PB2, //LCD_SEG34
+ PD9, //LCD_SEG28
+ PD10, //LCD_SEG29
+ PD11, //LCD_SEG30
+ PD12, //LCD_SEG31
+ /* SEG 20..27 */
+ PB3, //LCD_SEG20
+ PB4, //LCD_SEG21
+ PB5, //LCD_SEG22
+ PB6, //LCD_SEG23
+ PF6, //LCD_SEG24
+ PF7, //LCD_SEG25
+ PF8, //LCD_SEG26
+ PF9, //LCD_SEG27
+ /* SEG12..19 */
+ PA0, //LCD_SEG13
+ PA1, //LCD_SEG14
+ PA2, //LCD_SEG15
+ PA3, //LCD_SEG16
+ PA4, //LCD_SEG17
+ PA5, //LCD_SEG18
+ PA6, //LCD_SEG19
+ PA15, //LCD_SEG12
+ /* SEG0..11 */
+ PF2, //LCD_SEG0
+ PF3, //LCD_SEG1
+ PF4, //LCD_SEG2
+ PF5, //LCD_SEG3
+ PE8, //LCD_SEG4
+ PE9, //LCD_SEG5
+ PE10, //LCD_SEG6
+ PE11, //LCD_SEG7
+ PE12, //LCD_SEG8
+ PE13, //LCD_SEG9
+ PE14, //LCD_SEG10
+ PE15, //LCD_SEG11
+ PA15, //LCD_SEG12
+ /* COM0..3 */
+ PE4, //LCD_COM0
+ PE5, //LCD_COM1
+ PE6, //LCD_COM2
+ PE7 //LCD_COM3
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcdconfig_stk_gg.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,347 @@
+/**************************************************************************//**
+ * @file
+ * @brief Segment LCD Config
+ * @version 3.20.5
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#ifndef __SEGMENTLCDCONFIG_H
+#define __SEGMENTLCDCONFIG_H
+
+#include "em_lcd.h"
+#include "PinNames.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Range of symbols available on display */
+typedef enum {
+ LCD_SYMBOL_GECKO,
+ LCD_SYMBOL_ANT,
+ LCD_SYMBOL_PAD0,
+ LCD_SYMBOL_PAD1,
+ LCD_SYMBOL_EFM32,
+ LCD_SYMBOL_MINUS,
+ LCD_SYMBOL_COL3,
+ LCD_SYMBOL_COL5,
+ LCD_SYMBOL_COL10,
+ LCD_SYMBOL_DEGC,
+ LCD_SYMBOL_DEGF,
+ LCD_SYMBOL_DP2,
+ LCD_SYMBOL_DP3,
+ LCD_SYMBOL_DP4,
+ LCD_SYMBOL_DP5,
+ LCD_SYMBOL_DP6,
+ LCD_SYMBOL_DP10,
+} lcdSymbol;
+
+#define LCD_SYMBOL_GECKO_COM 1
+#define LCD_SYMBOL_GECKO_SEG 12
+#define LCD_SYMBOL_ANT_COM 0
+#define LCD_SYMBOL_ANT_SEG 32
+#define LCD_SYMBOL_PAD0_COM 3
+#define LCD_SYMBOL_PAD0_SEG 39
+#define LCD_SYMBOL_PAD1_COM 2
+#define LCD_SYMBOL_PAD1_SEG 12
+#define LCD_SYMBOL_EFM32_COM 0
+#define LCD_SYMBOL_EFM32_SEG 28
+#define LCD_SYMBOL_MINUS_COM 3
+#define LCD_SYMBOL_MINUS_SEG 12
+#define LCD_SYMBOL_COL3_COM 4
+#define LCD_SYMBOL_COL3_SEG 12
+#define LCD_SYMBOL_COL5_COM 0
+#define LCD_SYMBOL_COL5_SEG 30
+#define LCD_SYMBOL_COL10_COM 5
+#define LCD_SYMBOL_COL10_SEG 39
+#define LCD_SYMBOL_DEGC_COM 0
+#define LCD_SYMBOL_DEGC_SEG 34
+#define LCD_SYMBOL_DEGF_COM 0
+#define LCD_SYMBOL_DEGF_SEG 35
+#define LCD_SYMBOL_DP2_COM 7
+#define LCD_SYMBOL_DP2_SEG 12
+#define LCD_SYMBOL_DP3_COM 5
+#define LCD_SYMBOL_DP3_SEG 12
+#define LCD_SYMBOL_DP4_COM 6
+#define LCD_SYMBOL_DP4_SEG 12
+#define LCD_SYMBOL_DP5_COM 7
+#define LCD_SYMBOL_DP5_SEG 29
+#define LCD_SYMBOL_DP6_COM 7
+#define LCD_SYMBOL_DP6_SEG 31
+#define LCD_SYMBOL_DP10_COM 4
+#define LCD_SYMBOL_DP10_SEG 39
+
+/* LCD Controller Prescaler (divide LFACLK / 64) */
+/* LFACLK_LCDpre = 512 Hz */
+/* Set FDIV=0, means 512/1 = 512 Hz */
+/* With octaplex mode, 512/16 => 32 Hz Frame Rate */
+#define LCD_CMU_CLK_PRE cmuClkDiv_64
+#define LCD_CMU_CLK_DIV 1
+
+#define LCD_BOOST_LEVEL lcdVBoostLevel3
+
+
+#define LCD_INIT_DEF \
+{ true,\
+ lcdMuxOctaplex,\
+ lcdBiasOneFourth,\
+ lcdWaveLowPower,\
+ lcdVLCDSelVDD, \
+ lcdConConfVLCD }
+
+#define LCD_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetHigh(1, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(2, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(3, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(4, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(5, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(6, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(7, 0x00000078, 0x00000000); \
+} while (0)
+
+#define LCD_ALPHA_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(7, 0x500FE000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(0, 0xA0000000, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x00000007, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_ON() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0xFFFFFFFF);\
+} while(0)
+
+#define LCD_SEGMENTS_ENABLE() \
+do { \
+LCD_SegmentRangeEnable(lcdSegment12_15, true);\
+LCD_SegmentRangeEnable(lcdSegment16_19, true);\
+LCD_SegmentRangeEnable(lcdSegment28_31, true);\
+LCD_SegmentRangeEnable(lcdSegment32_35, true);\
+LCD_SegmentRangeEnable(lcdSegment36_39, true);\
+} while(0)
+
+#define LCD_DISPLAY_ENABLE() \
+do { \
+ LCD_Enable(true);\
+} while(0)
+
+#define EFM_DISPLAY_DEF {\
+ .Text = {\
+ { /* 1 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 13, .bit[1] = 14, .bit[2] = 14, .bit[3] = 14,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 13,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 14, .bit[9] = 14, .bit[10] = 14, .bit[11] = 14,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 13, .bit[13] = 13\
+ },\
+ { /* 2 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 15, .bit[1] = 16, .bit[2] = 16, .bit[3] = 16,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 15, .bit[5] = 15, .bit[6] = 15, .bit[7] = 15,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 16, .bit[9] = 16, .bit[10] = 16, .bit[11] = 16,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 15, .bit[13] = 15\
+ },\
+ { /* 3 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 17, .bit[1] = 18, .bit[2] = 18, .bit[3] = 18,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 17, .bit[5] = 17, .bit[6] = 17, .bit[7] = 17,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 18, .bit[9] = 18, .bit[10] = 18, .bit[11] = 18,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 17, .bit[13] = 17\
+ },\
+ { /* 4 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 19, .bit[1] = 28, .bit[2] = 28, .bit[3] = 28,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 19, .bit[5] = 19, .bit[6] = 19, .bit[7] = 19,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 28, .bit[9] = 28, .bit[10] = 28, .bit[11] = 28,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 19, .bit[13] = 19\
+ },\
+ { /* 5 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 29, .bit[1] = 30, .bit[2] = 30, .bit[3] = 30,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 29, .bit[5] = 29, .bit[6] = 29, .bit[7] = 29,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 30, .bit[9] = 30, .bit[10] = 30, .bit[11] = 30,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 29, .bit[13] = 29\
+ },\
+ { /* 6 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 31, .bit[1] = 32, .bit[2] = 32, .bit[3] = 32,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 31, .bit[5] = 31, .bit[6] = 31, .bit[7] = 31,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 32, .bit[9] = 32, .bit[10] = 32, .bit[11] = 32,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 31, .bit[13] = 31\
+ },\
+ { /* 7 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 33, .bit[1] = 34, .bit[2] = 34, .bit[3] = 34,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 33, .bit[5] = 33, .bit[6] = 33, .bit[7] = 33,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 34, .bit[9] = 34, .bit[10] = 34, .bit[11] = 34,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 33, .bit[13] = 33\
+ },\
+ },\
+ .Number = {\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 35, .bit[1] = 35, .bit[2] = 35, .bit[3] = 35,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 35, .bit[5] = 35, .bit[6] = 35,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 36, .bit[1] = 36, .bit[2] = 36, .bit[3] = 36,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 36, .bit[5] = 36, .bit[6] = 36,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 37, .bit[1] = 37, .bit[2] = 37, .bit[3] = 37,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 37, .bit[5] = 37, .bit[6] = 37,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 38, .bit[1] = 38, .bit[2] = 38, .bit[3] = 38,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 38, .bit[5] = 38, .bit[6] = 38,\
+ },\
+ },\
+ .EMode = {\
+ .com[0] = 0, .bit[0] = 39,\
+ .com[1] = 1, .bit[1] = 39,\
+ .com[2] = 7, .bit[2] = 39,\
+ .com[3] = 2, .bit[3] = 39,\
+ .com[4] = 6, .bit[4] = 39,\
+ },\
+ .ARing = {\
+ .com[0] = 0, .bit[0] = 19,\
+ .com[1] = 0, .bit[1] = 18,\
+ .com[2] = 0, .bit[2] = 17,\
+ .com[3] = 0, .bit[3] = 16,\
+ .com[4] = 0, .bit[4] = 15,\
+ .com[5] = 0, .bit[5] = 14,\
+ .com[6] = 0, .bit[6] = 13,\
+ .com[7] = 0, .bit[7] = 12,\
+ },\
+ .Battery = {\
+ .com[0] = 0, .bit[0] = 33,\
+ .com[1] = 0, .bit[1] = 37,\
+ .com[2] = 0, .bit[2] = 36,\
+ .com[3] = 0, .bit[3] = 38,\
+ }\
+}
+
+static const PinName outPins[] = {
+ /* SEG28..39 */
+ PA7, //LCD_SEG35
+ PA8, //LCD_SEG36
+ PA9, //LCD_SEG37
+ PA10, //LCD_SEG38
+ PA11, //LCD_SEG39
+ PB0, //LCD_SEG32
+ PB1, //LCD_SEG33
+ PB2, //LCD_SEG34
+ PD9, //LCD_SEG28
+ PD10, //LCD_SEG29
+ PD11, //LCD_SEG30
+ PD12, //LCD_SEG31
+ /* SEG12..19 */
+ PA0, //LCD_SEG13
+ PA1, //LCD_SEG14
+ PA2, //LCD_SEG15
+ PA3, //LCD_SEG16
+ PA4, //LCD_SEG17
+ PA5, //LCD_SEG18
+ PA6, //LCD_SEG19
+ PA15, //LCD_SEG12
+ /* COM4..7 */
+ PB3, //LCD_COM4
+ PB4, //LCD_COM5
+ PB5, //LCD_COM6
+ PB6, //LCD_COM7
+ /* COM0..3 */
+ PE4, //LCD_COM0
+ PE5, //LCD_COM1
+ PE6, //LCD_COM2
+ PE7 //LCD_COM3
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcdconfig_stk_lg.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,346 @@
+/**************************************************************************//**
+ * @file
+ * @brief Segment LCD Config
+ * @version 3.20.5
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#ifndef __SEGMENTLCDCONFIG_H
+#define __SEGMENTLCDCONFIG_H
+
+#include "em_lcd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Range of symbols available on display */
+typedef enum {
+ LCD_SYMBOL_GECKO,
+ LCD_SYMBOL_ANT,
+ LCD_SYMBOL_PAD0,
+ LCD_SYMBOL_PAD1,
+ LCD_SYMBOL_EFM32,
+ LCD_SYMBOL_MINUS,
+ LCD_SYMBOL_COL3,
+ LCD_SYMBOL_COL5,
+ LCD_SYMBOL_COL10,
+ LCD_SYMBOL_DEGC,
+ LCD_SYMBOL_DEGF,
+ LCD_SYMBOL_DP2,
+ LCD_SYMBOL_DP3,
+ LCD_SYMBOL_DP4,
+ LCD_SYMBOL_DP5,
+ LCD_SYMBOL_DP6,
+ LCD_SYMBOL_DP10,
+} lcdSymbol;
+
+#define LCD_SYMBOL_GECKO_COM 1
+#define LCD_SYMBOL_GECKO_SEG 12
+#define LCD_SYMBOL_ANT_COM 0
+#define LCD_SYMBOL_ANT_SEG 32
+#define LCD_SYMBOL_PAD0_COM 3
+#define LCD_SYMBOL_PAD0_SEG 39
+#define LCD_SYMBOL_PAD1_COM 2
+#define LCD_SYMBOL_PAD1_SEG 12
+#define LCD_SYMBOL_EFM32_COM 0
+#define LCD_SYMBOL_EFM32_SEG 28
+#define LCD_SYMBOL_MINUS_COM 3
+#define LCD_SYMBOL_MINUS_SEG 12
+#define LCD_SYMBOL_COL3_COM 4
+#define LCD_SYMBOL_COL3_SEG 12
+#define LCD_SYMBOL_COL5_COM 0
+#define LCD_SYMBOL_COL5_SEG 30
+#define LCD_SYMBOL_COL10_COM 5
+#define LCD_SYMBOL_COL10_SEG 39
+#define LCD_SYMBOL_DEGC_COM 0
+#define LCD_SYMBOL_DEGC_SEG 34
+#define LCD_SYMBOL_DEGF_COM 0
+#define LCD_SYMBOL_DEGF_SEG 35
+#define LCD_SYMBOL_DP2_COM 7
+#define LCD_SYMBOL_DP2_SEG 12
+#define LCD_SYMBOL_DP3_COM 5
+#define LCD_SYMBOL_DP3_SEG 12
+#define LCD_SYMBOL_DP4_COM 6
+#define LCD_SYMBOL_DP4_SEG 12
+#define LCD_SYMBOL_DP5_COM 7
+#define LCD_SYMBOL_DP5_SEG 29
+#define LCD_SYMBOL_DP6_COM 7
+#define LCD_SYMBOL_DP6_SEG 31
+#define LCD_SYMBOL_DP10_COM 4
+#define LCD_SYMBOL_DP10_SEG 39
+
+/* LCD Controller Prescaler (divide LFACLK / 64) */
+/* LFACLK_LCDpre = 512 Hz */
+/* Set FDIV=0, means 512/1 = 512 Hz */
+/* With octaplex mode, 512/16 => 32 Hz Frame Rate */
+#define LCD_CMU_CLK_PRE cmuClkDiv_64
+#define LCD_CMU_CLK_DIV cmuClkDiv_1
+
+#define LCD_BOOST_LEVEL lcdVBoostLevel3
+
+
+#define LCD_INIT_DEF \
+{ true,\
+ lcdMuxOctaplex,\
+ lcdBiasOneFourth,\
+ lcdWaveLowPower,\
+ lcdVLCDSelVDD, \
+ lcdConConfVLCD }
+
+#define LCD_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetHigh(1, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(2, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(3, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(4, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(5, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(6, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(7, 0x00000078, 0x00000000); \
+} while (0)
+
+#define LCD_ALPHA_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(7, 0x500FE000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(0, 0xA0000000, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x00000007, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_ON() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0xFFFFFFFF);\
+} while(0)
+
+#define LCD_SEGMENTS_ENABLE() \
+do { \
+LCD_SegmentRangeEnable(lcdSegment12_15, true);\
+LCD_SegmentRangeEnable(lcdSegment16_19, true);\
+LCD_SegmentRangeEnable(lcdSegment28_31, true);\
+LCD_SegmentRangeEnable(lcdSegment32_35, true);\
+LCD_SegmentRangeEnable(lcdSegment36_39, true);\
+} while(0)
+
+#define LCD_DISPLAY_ENABLE() \
+do { \
+ ;\
+} while(0)
+
+#define EFM_DISPLAY_DEF {\
+ .Text = {\
+ { /* 1 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 13, .bit[1] = 14, .bit[2] = 14, .bit[3] = 14,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 13,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 14, .bit[9] = 14, .bit[10] = 14, .bit[11] = 14,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 13, .bit[13] = 13\
+ },\
+ { /* 2 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 15, .bit[1] = 16, .bit[2] = 16, .bit[3] = 16,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 15, .bit[5] = 15, .bit[6] = 15, .bit[7] = 15,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 16, .bit[9] = 16, .bit[10] = 16, .bit[11] = 16,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 15, .bit[13] = 15\
+ },\
+ { /* 3 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 17, .bit[1] = 18, .bit[2] = 18, .bit[3] = 18,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 17, .bit[5] = 17, .bit[6] = 17, .bit[7] = 17,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 18, .bit[9] = 18, .bit[10] = 18, .bit[11] = 18,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 17, .bit[13] = 17\
+ },\
+ { /* 4 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 19, .bit[1] = 28, .bit[2] = 28, .bit[3] = 28,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 19, .bit[5] = 19, .bit[6] = 19, .bit[7] = 19,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 28, .bit[9] = 28, .bit[10] = 28, .bit[11] = 28,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 19, .bit[13] = 19\
+ },\
+ { /* 5 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 29, .bit[1] = 30, .bit[2] = 30, .bit[3] = 30,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 29, .bit[5] = 29, .bit[6] = 29, .bit[7] = 29,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 30, .bit[9] = 30, .bit[10] = 30, .bit[11] = 30,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 29, .bit[13] = 29\
+ },\
+ { /* 6 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 31, .bit[1] = 32, .bit[2] = 32, .bit[3] = 32,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 31, .bit[5] = 31, .bit[6] = 31, .bit[7] = 31,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 32, .bit[9] = 32, .bit[10] = 32, .bit[11] = 32,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 31, .bit[13] = 31\
+ },\
+ { /* 7 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 33, .bit[1] = 34, .bit[2] = 34, .bit[3] = 34,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 33, .bit[5] = 33, .bit[6] = 33, .bit[7] = 33,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 34, .bit[9] = 34, .bit[10] = 34, .bit[11] = 34,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 33, .bit[13] = 33\
+ },\
+ },\
+ .Number = {\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 35, .bit[1] = 35, .bit[2] = 35, .bit[3] = 35,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 35, .bit[5] = 35, .bit[6] = 35,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 36, .bit[1] = 36, .bit[2] = 36, .bit[3] = 36,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 36, .bit[5] = 36, .bit[6] = 36,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 37, .bit[1] = 37, .bit[2] = 37, .bit[3] = 37,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 37, .bit[5] = 37, .bit[6] = 37,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 38, .bit[1] = 38, .bit[2] = 38, .bit[3] = 38,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 38, .bit[5] = 38, .bit[6] = 38,\
+ },\
+ },\
+ .EMode = {\
+ .com[0] = 0, .bit[0] = 39,\
+ .com[1] = 1, .bit[1] = 39,\
+ .com[2] = 7, .bit[2] = 39,\
+ .com[3] = 2, .bit[3] = 39,\
+ .com[4] = 6, .bit[4] = 39,\
+ },\
+ .ARing = {\
+ .com[0] = 0, .bit[0] = 19,\
+ .com[1] = 0, .bit[1] = 18,\
+ .com[2] = 0, .bit[2] = 17,\
+ .com[3] = 0, .bit[3] = 16,\
+ .com[4] = 0, .bit[4] = 15,\
+ .com[5] = 0, .bit[5] = 14,\
+ .com[6] = 0, .bit[6] = 13,\
+ .com[7] = 0, .bit[7] = 12,\
+ },\
+ .Battery = {\
+ .com[0] = 0, .bit[0] = 33,\
+ .com[1] = 0, .bit[1] = 37,\
+ .com[2] = 0, .bit[2] = 36,\
+ .com[3] = 0, .bit[3] = 38,\
+ }\
+}
+
+static const PinName outPins[] = {
+ /* SEG28..39 */
+ PA7, //LCD_SEG35
+ PA8, //LCD_SEG36
+ PA9, //LCD_SEG37
+ PA10, //LCD_SEG38
+ PA11, //LCD_SEG39
+ PB0, //LCD_SEG32
+ PB1, //LCD_SEG33
+ PB2, //LCD_SEG34
+ PD9, //LCD_SEG28
+ PD10, //LCD_SEG29
+ PD11, //LCD_SEG30
+ PD12, //LCD_SEG31
+ /* SEG12..19 */
+ PA0, //LCD_SEG13
+ PA1, //LCD_SEG14
+ PA2, //LCD_SEG15
+ PA3, //LCD_SEG16
+ PA4, //LCD_SEG17
+ PA5, //LCD_SEG18
+ PA6, //LCD_SEG19
+ PA15, //LCD_SEG12
+ /* COM4..7 */
+ PB3, //LCD_COM4
+ PB4, //LCD_COM5
+ PB5, //LCD_COM6
+ PB6, //LCD_COM7
+ /* COM0..3 */
+ PE4, //LCD_COM0
+ PE5, //LCD_COM1
+ PE6, //LCD_COM2
+ PE7 //LCD_COM3
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcdconfig_stk_tg.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,321 @@
+/**************************************************************************//**
+ * @file
+ * @brief Segment LCD Config for the EFM32TG_STK3300 starter kit
+ * @version 3.20.5
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#ifndef __SEGMENTLCDCONFIG_H
+#define __SEGMENTLCDCONFIG_H
+
+#include "em_lcd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Range of symbols available on display */
+typedef enum {
+ LCD_SYMBOL_GECKO,
+ LCD_SYMBOL_ANT,
+ LCD_SYMBOL_PAD0,
+ LCD_SYMBOL_PAD1,
+ LCD_SYMBOL_EFM32,
+ LCD_SYMBOL_MINUS,
+ LCD_SYMBOL_COL3,
+ LCD_SYMBOL_COL5,
+ LCD_SYMBOL_COL10,
+ LCD_SYMBOL_DEGC,
+ LCD_SYMBOL_DEGF,
+ LCD_SYMBOL_DP2,
+ LCD_SYMBOL_DP3,
+ LCD_SYMBOL_DP4,
+ LCD_SYMBOL_DP5,
+ LCD_SYMBOL_DP6,
+ LCD_SYMBOL_DP10,
+} lcdSymbol;
+
+#define LCD_SYMBOL_GECKO_COM 1
+#define LCD_SYMBOL_GECKO_SEG 0
+#define LCD_SYMBOL_ANT_COM 0
+#define LCD_SYMBOL_ANT_SEG 12
+#define LCD_SYMBOL_PAD0_COM 3
+#define LCD_SYMBOL_PAD0_SEG 19
+#define LCD_SYMBOL_PAD1_COM 2
+#define LCD_SYMBOL_PAD1_SEG 0
+#define LCD_SYMBOL_EFM32_COM 0
+#define LCD_SYMBOL_EFM32_SEG 8
+#define LCD_SYMBOL_MINUS_COM 3
+#define LCD_SYMBOL_MINUS_SEG 0
+#define LCD_SYMBOL_COL3_COM 4
+#define LCD_SYMBOL_COL3_SEG 0
+#define LCD_SYMBOL_COL5_COM 0
+#define LCD_SYMBOL_COL5_SEG 10
+#define LCD_SYMBOL_COL10_COM 5
+#define LCD_SYMBOL_COL10_SEG 19
+#define LCD_SYMBOL_DEGC_COM 0
+#define LCD_SYMBOL_DEGC_SEG 14
+#define LCD_SYMBOL_DEGF_COM 0
+#define LCD_SYMBOL_DEGF_SEG 15
+#define LCD_SYMBOL_DP2_COM 7
+#define LCD_SYMBOL_DP2_SEG 0
+#define LCD_SYMBOL_DP3_COM 5
+#define LCD_SYMBOL_DP3_SEG 0
+#define LCD_SYMBOL_DP4_COM 6
+#define LCD_SYMBOL_DP4_SEG 0
+#define LCD_SYMBOL_DP5_COM 7
+#define LCD_SYMBOL_DP5_SEG 9
+#define LCD_SYMBOL_DP6_COM 7
+#define LCD_SYMBOL_DP6_SEG 11
+#define LCD_SYMBOL_DP10_COM 4
+#define LCD_SYMBOL_DP10_SEG 19
+
+#define LCD_STK3300 TRUE
+#define LCD_DISPLAY_TYPE 8x20
+#define LCD_BOOST_LEVEL lcdVBoostLevel3
+
+ /* LCD Controller Prescaler (divide LFACLK / 64) */
+ /* LFACLK_LCDpre = 512 Hz */
+ /* Set FDIV=0, means 512/1 = 512 Hz */
+ /* With octaplex mode, 512/16 => 32 Hz Frame Rate */
+#define LCD_CMU_CLK_PRE cmuClkDiv_64
+#define LCD_CMU_CLK_DIV cmuClkDiv_1
+
+#define LCD_INIT_DEF \
+{ true,\
+ lcdMuxOctaplex,\
+ lcdBiasOneFourth,\
+ lcdWaveLowPower,\
+ lcdVLCDSelVDD,\
+ lcdConConfVLCD }
+
+#define LCD_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0x00078000, 0x00000000);\
+ LCD_SegmentSetLow(7, 0x00078000, 0x00000000);\
+} while (0)
+
+#define LCD_ALPHA_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(7, 0x000075FE, 0x00000000);\
+ LCD_SegmentSetLow(6, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(5, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(4, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(3, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(2, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(1, 0x00007FFE, 0x00000000);\
+ LCD_SegmentSetLow(0, 0x00000A00, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xFFFFFFFF, 0x00000000);\
+ LCD_SegmentSetLow(7, 0xFFFFFFFF, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_ON() \
+do { \
+ LCD_SegmentSetLow(0, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(1, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(2, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(3, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(4, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(5, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(6, 0xFFFFFFFF, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(7, 0xFFFFFFFF, 0xFFFFFFFF);\
+} while(0)
+
+#define LCD_SEGMENTS_ENABLE() \
+do { \
+ LCD_SegmentRangeEnable(lcdSegmentAll, true);\
+} while(0)
+
+#define LCD_DISPLAY_ENABLE() \
+do { \
+ ;\
+} while(0)
+
+#define EFM_DISPLAY_DEF {\
+ .Text = {\
+ { /* 1 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 1, .bit[1] = 2, .bit[2] = 2, .bit[3] = 2,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 1, .bit[5] = 1, .bit[6] = 1, .bit[7] = 1,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 2, .bit[9] = 2, .bit[10] = 2, .bit[11] = 2,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 1, .bit[13] = 1\
+ },\
+ { /* 2 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 3, .bit[1] = 4, .bit[2] = 4, .bit[3] = 4,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 3, .bit[5] = 3, .bit[6] = 3, .bit[7] = 3,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 4, .bit[9] = 4, .bit[10] = 4, .bit[11] = 4,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 3, .bit[13] = 3\
+ },\
+ { /* 3 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 5, .bit[1] = 6, .bit[2] = 6, .bit[3] = 6,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 5, .bit[5] = 5, .bit[6] = 5, .bit[7] = 5,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 6, .bit[9] = 6, .bit[10] = 6, .bit[11] = 6,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 5, .bit[13] = 5\
+ },\
+ { /* 4 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 7, .bit[1] = 8, .bit[2] = 8, .bit[3] = 8,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 7, .bit[5] = 7, .bit[6] = 7, .bit[7] = 7,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 8, .bit[9] = 8, .bit[10] = 8, .bit[11] = 8,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 7, .bit[13] = 7\
+ },\
+ { /* 5 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 9, .bit[1] = 10, .bit[2] = 10, .bit[3] = 10,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 9, .bit[5] = 9, .bit[6] = 9, .bit[7] = 9,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 10, .bit[9] = 10, .bit[10] = 10, .bit[11] = 10,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 9, .bit[13] = 9\
+ },\
+ { /* 6 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 11, .bit[1] = 12, .bit[2] = 12, .bit[3] = 12,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 11, .bit[5] = 11, .bit[6] = 11, .bit[7] = 11,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 12, .bit[9] = 12, .bit[10] = 12, .bit[11] = 12,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 11, .bit[13] = 11\
+ },\
+ { /* 7 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 13, .bit[1] = 14, .bit[2] = 14, .bit[3] = 14,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 13,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 14, .bit[9] = 14, .bit[10] = 14, .bit[11] = 14,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 13, .bit[13] = 13\
+ },\
+ },\
+ .Number = {\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 15, .bit[1] = 15, .bit[2] = 15, .bit[3] = 15,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 15, .bit[5] = 15, .bit[6] = 15,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 16, .bit[1] = 16, .bit[2] = 16, .bit[3] = 16,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 16, .bit[5] = 16, .bit[6] = 16,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 17, .bit[1] = 17, .bit[2] = 17, .bit[3] = 17,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 17, .bit[5] = 17, .bit[6] = 17,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 18, .bit[1] = 18, .bit[2] = 18, .bit[3] = 18,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 18, .bit[5] = 18, .bit[6] = 18,\
+ },\
+ },\
+ .EMode = {\
+ .com[0] = 0, .bit[0] = 19,\
+ .com[1] = 1, .bit[1] = 19,\
+ .com[2] = 7, .bit[2] = 19,\
+ .com[3] = 2, .bit[3] = 19,\
+ .com[4] = 6, .bit[4] = 19,\
+ },\
+ .ARing = {\
+ .com[0] = 0, .bit[0] = 7,\
+ .com[1] = 0, .bit[1] = 6,\
+ .com[2] = 0, .bit[2] = 5,\
+ .com[3] = 0, .bit[3] = 4,\
+ .com[4] = 0, .bit[4] = 3,\
+ .com[5] = 0, .bit[5] = 2,\
+ .com[6] = 0, .bit[6] = 1,\
+ .com[7] = 0, .bit[7] = 0,\
+ },\
+ .Battery = {\
+ .com[0] = 0, .bit[0] = 13,\
+ .com[1] = 0, .bit[1] = 17,\
+ .com[2] = 0, .bit[2] = 16,\
+ .com[3] = 0, .bit[3] = 18,\
+ }\
+}
+
+static const PinName outPins[] = {
+ /* SEG28..39 */
+ PA7, //LCD_SEG35
+ PA8, //LCD_SEG36
+ PA9, //LCD_SEG37
+ PA10, //LCD_SEG38
+ PA11, //LCD_SEG39
+ PB0, //LCD_SEG32
+ PB1, //LCD_SEG33
+ PB2, //LCD_SEG34
+ PD9, //LCD_SEG28
+ PD10, //LCD_SEG29
+ PD11, //LCD_SEG30
+ PD12, //LCD_SEG31
+ /* SEG12..19 */
+ PA0, //LCD_SEG13
+ PA1, //LCD_SEG14
+ PA2, //LCD_SEG15
+ PA3, //LCD_SEG16
+ PA4, //LCD_SEG17
+ PA5, //LCD_SEG18
+ PA6, //LCD_SEG19
+ PA15, //LCD_SEG12
+ /* COM4..7 */
+ PB3, //LCD_COM4
+ PB4, //LCD_COM5
+ PB5, //LCD_COM6
+ PB6, //LCD_COM7
+ /* COM0..3 */
+ PE4, //LCD_COM0
+ PE5, //LCD_COM1
+ PE6, //LCD_COM2
+ PE7 //LCD_COM3
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/segmentlcdconfig_stk_wg.h Tue Mar 17 11:45:46 2015 -0500
@@ -0,0 +1,346 @@
+/**************************************************************************//**
+ * @file
+ * @brief Segment LCD Config
+ * @version 3.20.5
+ ******************************************************************************
+ * @section License
+ * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>
+ *******************************************************************************
+ *
+ * This file is licensensed under the Silabs License Agreement. See the file
+ * "Silabs_License_Agreement.txt" for details. Before using this software for
+ * any purpose, you must agree to the terms of that agreement.
+ *
+ ******************************************************************************/
+
+#ifndef __SEGMENTLCDCONFIG_H
+#define __SEGMENTLCDCONFIG_H
+
+#include "em_lcd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Range of symbols available on display */
+typedef enum {
+ LCD_SYMBOL_GECKO,
+ LCD_SYMBOL_ANT,
+ LCD_SYMBOL_PAD0,
+ LCD_SYMBOL_PAD1,
+ LCD_SYMBOL_EFM32,
+ LCD_SYMBOL_MINUS,
+ LCD_SYMBOL_COL3,
+ LCD_SYMBOL_COL5,
+ LCD_SYMBOL_COL10,
+ LCD_SYMBOL_DEGC,
+ LCD_SYMBOL_DEGF,
+ LCD_SYMBOL_DP2,
+ LCD_SYMBOL_DP3,
+ LCD_SYMBOL_DP4,
+ LCD_SYMBOL_DP5,
+ LCD_SYMBOL_DP6,
+ LCD_SYMBOL_DP10,
+} lcdSymbol;
+
+#define LCD_SYMBOL_GECKO_COM 1
+#define LCD_SYMBOL_GECKO_SEG 12
+#define LCD_SYMBOL_ANT_COM 0
+#define LCD_SYMBOL_ANT_SEG 32
+#define LCD_SYMBOL_PAD0_COM 3
+#define LCD_SYMBOL_PAD0_SEG 39
+#define LCD_SYMBOL_PAD1_COM 2
+#define LCD_SYMBOL_PAD1_SEG 12
+#define LCD_SYMBOL_EFM32_COM 0
+#define LCD_SYMBOL_EFM32_SEG 28
+#define LCD_SYMBOL_MINUS_COM 3
+#define LCD_SYMBOL_MINUS_SEG 12
+#define LCD_SYMBOL_COL3_COM 4
+#define LCD_SYMBOL_COL3_SEG 12
+#define LCD_SYMBOL_COL5_COM 0
+#define LCD_SYMBOL_COL5_SEG 30
+#define LCD_SYMBOL_COL10_COM 5
+#define LCD_SYMBOL_COL10_SEG 39
+#define LCD_SYMBOL_DEGC_COM 0
+#define LCD_SYMBOL_DEGC_SEG 34
+#define LCD_SYMBOL_DEGF_COM 0
+#define LCD_SYMBOL_DEGF_SEG 35
+#define LCD_SYMBOL_DP2_COM 7
+#define LCD_SYMBOL_DP2_SEG 12
+#define LCD_SYMBOL_DP3_COM 5
+#define LCD_SYMBOL_DP3_SEG 12
+#define LCD_SYMBOL_DP4_COM 6
+#define LCD_SYMBOL_DP4_SEG 12
+#define LCD_SYMBOL_DP5_COM 7
+#define LCD_SYMBOL_DP5_SEG 29
+#define LCD_SYMBOL_DP6_COM 7
+#define LCD_SYMBOL_DP6_SEG 31
+#define LCD_SYMBOL_DP10_COM 4
+#define LCD_SYMBOL_DP10_SEG 39
+
+/* LCD Controller Prescaler (divide LFACLK / 64) */
+/* LFACLK_LCDpre = 512 Hz */
+/* Set FDIV=0, means 512/1 = 512 Hz */
+/* With octaplex mode, 512/16 => 32 Hz Frame Rate */
+#define LCD_CMU_CLK_PRE cmuClkDiv_64
+#define LCD_CMU_CLK_DIV cmuClkDiv_1
+
+#define LCD_BOOST_LEVEL lcdVBoostLevel3
+
+
+#define LCD_INIT_DEF \
+{ true,\
+ lcdMuxOctaplex,\
+ lcdBiasOneFourth,\
+ lcdWaveLowPower,\
+ lcdVLCDSelVDD, \
+ lcdConConfVLCD }
+
+#define LCD_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetHigh(1, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(2, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(3, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(4, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(5, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(6, 0x00000078, 0x00000000); \
+ LCD_SegmentSetHigh(7, 0x00000078, 0x00000000); \
+} while (0)
+
+#define LCD_ALPHA_NUMBER_OFF() \
+do { \
+ LCD_SegmentSetLow(7, 0x500FE000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FE000, 0x00000000);\
+ LCD_SegmentSetLow(0, 0xA0000000, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x00000007, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x00000007, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_OFF() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0x00000000);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0x00000000);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0x00000000);\
+} while(0)
+
+#define LCD_ALL_SEGMENTS_ON() \
+do { \
+ LCD_SegmentSetLow(0, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(1, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(2, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(3, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(4, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(5, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(6, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetLow(7, 0xF00FF000, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(0, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(1, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(2, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(3, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(4, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(5, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(6, 0x000000FF, 0xFFFFFFFF);\
+ LCD_SegmentSetHigh(7, 0x000000FF, 0xFFFFFFFF);\
+} while(0)
+
+#define LCD_SEGMENTS_ENABLE() \
+do { \
+LCD_SegmentRangeEnable(lcdSegment12_15, true);\
+LCD_SegmentRangeEnable(lcdSegment16_19, true);\
+LCD_SegmentRangeEnable(lcdSegment28_31, true);\
+LCD_SegmentRangeEnable(lcdSegment32_35, true);\
+LCD_SegmentRangeEnable(lcdSegment36_39, true);\
+} while(0)
+
+#define LCD_DISPLAY_ENABLE() \
+do { \
+ ;\
+} while(0)
+
+#define EFM_DISPLAY_DEF {\
+ .Text = {\
+ { /* 1 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 13, .bit[1] = 14, .bit[2] = 14, .bit[3] = 14,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 13,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 14, .bit[9] = 14, .bit[10] = 14, .bit[11] = 14,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 13, .bit[13] = 13\
+ },\
+ { /* 2 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 15, .bit[1] = 16, .bit[2] = 16, .bit[3] = 16,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 15, .bit[5] = 15, .bit[6] = 15, .bit[7] = 15,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 16, .bit[9] = 16, .bit[10] = 16, .bit[11] = 16,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 15, .bit[13] = 15\
+ },\
+ { /* 3 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 17, .bit[1] = 18, .bit[2] = 18, .bit[3] = 18,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 17, .bit[5] = 17, .bit[6] = 17, .bit[7] = 17,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 18, .bit[9] = 18, .bit[10] = 18, .bit[11] = 18,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 17, .bit[13] = 17\
+ },\
+ { /* 4 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 19, .bit[1] = 28, .bit[2] = 28, .bit[3] = 28,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 19, .bit[5] = 19, .bit[6] = 19, .bit[7] = 19,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 28, .bit[9] = 28, .bit[10] = 28, .bit[11] = 28,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 19, .bit[13] = 19\
+ },\
+ { /* 5 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 29, .bit[1] = 30, .bit[2] = 30, .bit[3] = 30,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 29, .bit[5] = 29, .bit[6] = 29, .bit[7] = 29,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 30, .bit[9] = 30, .bit[10] = 30, .bit[11] = 30,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 29, .bit[13] = 29\
+ },\
+ { /* 6 */\
+ .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 31, .bit[1] = 32, .bit[2] = 32, .bit[3] = 32,\
+ .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\
+ .bit[4] = 31, .bit[5] = 31, .bit[6] = 31, .bit[7] = 31,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 32, .bit[9] = 32, .bit[10] = 32, .bit[11] = 32,\
+ .com[12] = 4, .com[13] = 5,\
+ .bit[12] = 31, .bit[13] = 31\
+ },\
+ { /* 7 */\
+ .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\
+ .bit[0] = 33, .bit[1] = 34, .bit[2] = 34, .bit[3] = 34,\
+ .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\
+ .bit[4] = 33, .bit[5] = 33, .bit[6] = 33, .bit[7] = 33,\
+ .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\
+ .bit[8] = 34, .bit[9] = 34, .bit[10] = 34, .bit[11] = 34,\
+ .com[12] = 5, .com[13] = 6,\
+ .bit[12] = 33, .bit[13] = 33\
+ },\
+ },\
+ .Number = {\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 35, .bit[1] = 35, .bit[2] = 35, .bit[3] = 35,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 35, .bit[5] = 35, .bit[6] = 35,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 36, .bit[1] = 36, .bit[2] = 36, .bit[3] = 36,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 36, .bit[5] = 36, .bit[6] = 36,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 37, .bit[1] = 37, .bit[2] = 37, .bit[3] = 37,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 37, .bit[5] = 37, .bit[6] = 37,\
+ },\
+ {\
+ .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\
+ .bit[0] = 38, .bit[1] = 38, .bit[2] = 38, .bit[3] = 38,\
+ .com[4] = 3, .com[5] = 6, .com[6] = 4,\
+ .bit[4] = 38, .bit[5] = 38, .bit[6] = 38,\
+ },\
+ },\
+ .EMode = {\
+ .com[0] = 0, .bit[0] = 39,\
+ .com[1] = 1, .bit[1] = 39,\
+ .com[2] = 7, .bit[2] = 39,\
+ .com[3] = 2, .bit[3] = 39,\
+ .com[4] = 6, .bit[4] = 39,\
+ },\
+ .ARing = {\
+ .com[0] = 0, .bit[0] = 19,\
+ .com[1] = 0, .bit[1] = 18,\
+ .com[2] = 0, .bit[2] = 17,\
+ .com[3] = 0, .bit[3] = 16,\
+ .com[4] = 0, .bit[4] = 15,\
+ .com[5] = 0, .bit[5] = 14,\
+ .com[6] = 0, .bit[6] = 13,\
+ .com[7] = 0, .bit[7] = 12,\
+ },\
+ .Battery = {\
+ .com[0] = 0, .bit[0] = 33,\
+ .com[1] = 0, .bit[1] = 37,\
+ .com[2] = 0, .bit[2] = 36,\
+ .com[3] = 0, .bit[3] = 38,\
+ }\
+}
+
+static const PinName outPins[] = {
+ /* SEG28..39 */
+ PA7, //LCD_SEG35
+ PA8, //LCD_SEG36
+ PA9, //LCD_SEG37
+ PA10, //LCD_SEG38
+ PA11, //LCD_SEG39
+ PB0, //LCD_SEG32
+ PB1, //LCD_SEG33
+ PB2, //LCD_SEG34
+ PD9, //LCD_SEG28
+ PD10, //LCD_SEG29
+ PD11, //LCD_SEG30
+ PD12, //LCD_SEG31
+ /* SEG12..19 */
+ PA0, //LCD_SEG13
+ PA1, //LCD_SEG14
+ PA2, //LCD_SEG15
+ PA3, //LCD_SEG16
+ PA4, //LCD_SEG17
+ PA5, //LCD_SEG18
+ PA6, //LCD_SEG19
+ PA15, //LCD_SEG12
+ /* COM4..7 */
+ PB3, //LCD_COM4
+ PB4, //LCD_COM5
+ PB5, //LCD_COM6
+ PB6, //LCD_COM7
+ /* COM0..3 */
+ PE4, //LCD_COM0
+ PE5, //LCD_COM1
+ PE6, //LCD_COM2
+ PE7 //LCD_COM3
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif