This is a driver for the segment LCD found on the Silicon Labs EF32 Giant, Leopard and Wonder Gecko platforms. NOTE: This driver will not work with other platforms, because it contains EFM32-specific code.

Dependents:   EFM32 RDA5807M RDS Radio EMF32-Segment-Touch-Demo EMF32_ShowKey blinky_EFM32_Giant ... more

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.

/media/uploads/stevew817/screenshot_2015-03-17_11.17.52.png

Committer:
Steven Cooreman
Date:
Tue Mar 17 11:45:46 2015 -0500
Revision:
0:559902e88130
Child:
3:4e4f16874281
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Steven Cooreman 0:559902e88130 1 /***************************************************************************//**
Steven Cooreman 0:559902e88130 2 * @file EFM32_SegmentLCD.cpp
Steven Cooreman 0:559902e88130 3 * @brief Driver class for the segment LCD's on some of the EFM32 kits.
Steven Cooreman 0:559902e88130 4 *******************************************************************************
Steven Cooreman 0:559902e88130 5 * @section License
Steven Cooreman 0:559902e88130 6 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
Steven Cooreman 0:559902e88130 7 *******************************************************************************
Steven Cooreman 0:559902e88130 8 *
Steven Cooreman 0:559902e88130 9 * Permission is granted to anyone to use this software for any purpose,
Steven Cooreman 0:559902e88130 10 * including commercial applications, and to alter it and redistribute it
Steven Cooreman 0:559902e88130 11 * freely, subject to the following restrictions:
Steven Cooreman 0:559902e88130 12 *
Steven Cooreman 0:559902e88130 13 * 1. The origin of this software must not be misrepresented; you must not
Steven Cooreman 0:559902e88130 14 * claim that you wrote the original software.
Steven Cooreman 0:559902e88130 15 * 2. Altered source versions must be plainly marked as such, and must not be
Steven Cooreman 0:559902e88130 16 * misrepresented as being the original software.
Steven Cooreman 0:559902e88130 17 * 3. This notice may not be removed or altered from any source distribution.
Steven Cooreman 0:559902e88130 18 *
Steven Cooreman 0:559902e88130 19 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Steven Cooreman 0:559902e88130 20 * obligation to support this Software. Silicon Labs is providing the
Steven Cooreman 0:559902e88130 21 * Software "AS IS", with no express or implied warranties of any kind,
Steven Cooreman 0:559902e88130 22 * including, but not limited to, any implied warranties of merchantability
Steven Cooreman 0:559902e88130 23 * or fitness for any particular purpose or warranties against infringement
Steven Cooreman 0:559902e88130 24 * of any proprietary rights of a third party.
Steven Cooreman 0:559902e88130 25 *
Steven Cooreman 0:559902e88130 26 * Silicon Labs will not be liable for any consequential, incidental, or
Steven Cooreman 0:559902e88130 27 * special damages, or any other relief, or for any claim by any third party,
Steven Cooreman 0:559902e88130 28 * arising from your use of this Software.
Steven Cooreman 0:559902e88130 29 *
Steven Cooreman 0:559902e88130 30 ******************************************************************************/
Steven Cooreman 0:559902e88130 31
Steven Cooreman 0:559902e88130 32 #include <mbed.h>
Steven Cooreman 0:559902e88130 33 #include "pinmap.h"
Steven Cooreman 0:559902e88130 34 #include "EFM32_SegmentLCD.h"
Steven Cooreman 0:559902e88130 35 #include "segmentlcd.h"
Steven Cooreman 0:559902e88130 36
Steven Cooreman 0:559902e88130 37 namespace silabs {
Steven Cooreman 0:559902e88130 38 /*
Steven Cooreman 0:559902e88130 39 * Constructor.
Steven Cooreman 0:559902e88130 40 */
Steven Cooreman 0:559902e88130 41 EFM32_SegmentLCD::EFM32_SegmentLCD() {
Steven Cooreman 0:559902e88130 42 /* Set all pins used for the LCD to disabled. */
Steven Cooreman 0:559902e88130 43 uint32_t num_pins = sizeof(outPins) / sizeof(outPins[0]);
Steven Cooreman 0:559902e88130 44 for(uint8_t i = 0; i < num_pins; i++) {
Steven Cooreman 0:559902e88130 45 pin_mode(outPins[i], Disabled);
Steven Cooreman 0:559902e88130 46 }
Steven Cooreman 0:559902e88130 47
Steven Cooreman 0:559902e88130 48 /* Initialize the LCD without voltage booster */
Steven Cooreman 0:559902e88130 49 SegmentLCD_Init(false);
Steven Cooreman 0:559902e88130 50 }
Steven Cooreman 0:559902e88130 51
Steven Cooreman 0:559902e88130 52 void EFM32_SegmentLCD::AllOff( void ) {
Steven Cooreman 0:559902e88130 53 SegmentLCD_AllOff();
Steven Cooreman 0:559902e88130 54 }
Steven Cooreman 0:559902e88130 55
Steven Cooreman 0:559902e88130 56 void EFM32_SegmentLCD::AllOn( void ) {
Steven Cooreman 0:559902e88130 57 SegmentLCD_AllOn();
Steven Cooreman 0:559902e88130 58 }
Steven Cooreman 0:559902e88130 59
Steven Cooreman 0:559902e88130 60 /*
Steven Cooreman 0:559902e88130 61 * Switch off (clear) the alphanumeric portion of the display
Steven Cooreman 0:559902e88130 62 */
Steven Cooreman 0:559902e88130 63 void EFM32_SegmentLCD::AlphaNumberOff(void) {
Steven Cooreman 0:559902e88130 64 SegmentLCD_AlphaNumberOff();
Steven Cooreman 0:559902e88130 65 }
Steven Cooreman 0:559902e88130 66
Steven Cooreman 0:559902e88130 67 /*
Steven Cooreman 0:559902e88130 68 * Switch specified segment on the ring on/off
Steven Cooreman 0:559902e88130 69 * anum: ring segment index
Steven Cooreman 0:559902e88130 70 * on: true to turn on, false to turn off
Steven Cooreman 0:559902e88130 71 */
Steven Cooreman 0:559902e88130 72 void EFM32_SegmentLCD::ARing(int anum, bool on) {
Steven Cooreman 0:559902e88130 73 SegmentLCD_ARing(anum, (on ? 1 : 0));
Steven Cooreman 0:559902e88130 74 }
Steven Cooreman 0:559902e88130 75
Steven Cooreman 0:559902e88130 76 /*
Steven Cooreman 0:559902e88130 77 * Display a battery level on the LCD.
Steven Cooreman 0:559902e88130 78 * 0 = off
Steven Cooreman 0:559902e88130 79 * 1 = lowest block
Steven Cooreman 0:559902e88130 80 * 2 = lowest + second-to-lowest
Steven Cooreman 0:559902e88130 81 * ...
Steven Cooreman 0:559902e88130 82 */
Steven Cooreman 0:559902e88130 83 void EFM32_SegmentLCD::Battery(int batteryLevel) {
Steven Cooreman 0:559902e88130 84 SegmentLCD_Battery(batteryLevel);
Steven Cooreman 0:559902e88130 85 }
Steven Cooreman 0:559902e88130 86
Steven Cooreman 0:559902e88130 87 /*
Steven Cooreman 0:559902e88130 88 * Display an energy mode ring on the LCD.
Steven Cooreman 0:559902e88130 89 * em = energy mode number to display
Steven Cooreman 0:559902e88130 90 * on = true to turn on, false to turn off.
Steven Cooreman 0:559902e88130 91 */
Steven Cooreman 0:559902e88130 92 void EFM32_SegmentLCD::EnergyMode(int em, bool on) {
Steven Cooreman 0:559902e88130 93 SegmentLCD_EnergyMode(em, (on ? 1 : 0));
Steven Cooreman 0:559902e88130 94 }
Steven Cooreman 0:559902e88130 95
Steven Cooreman 0:559902e88130 96 /*
Steven Cooreman 0:559902e88130 97 * Display an unsigned integer on the alphanumeric
Steven Cooreman 0:559902e88130 98 * portion of the display as a hex value.
Steven Cooreman 0:559902e88130 99 *
Steven Cooreman 0:559902e88130 100 * num = number to display
Steven Cooreman 0:559902e88130 101 */
Steven Cooreman 0:559902e88130 102 void EFM32_SegmentLCD::LowerHex( uint32_t num ) {
Steven Cooreman 0:559902e88130 103 SegmentLCD_LowerHex(num);
Steven Cooreman 0:559902e88130 104 }
Steven Cooreman 0:559902e88130 105
Steven Cooreman 0:559902e88130 106 /*
Steven Cooreman 0:559902e88130 107 * Display a signed integer as decimal number on
Steven Cooreman 0:559902e88130 108 * the alphanumeric part of the display.
Steven Cooreman 0:559902e88130 109 */
Steven Cooreman 0:559902e88130 110 void EFM32_SegmentLCD::LowerNumber( int num ) {
Steven Cooreman 0:559902e88130 111 SegmentLCD_LowerNumber(num);
Steven Cooreman 0:559902e88130 112 }
Steven Cooreman 0:559902e88130 113
Steven Cooreman 0:559902e88130 114 /*
Steven Cooreman 0:559902e88130 115 * Display a signed integer on the numeric part
Steven Cooreman 0:559902e88130 116 * of the display (clock area).
Steven Cooreman 0:559902e88130 117 * max = 9999, min = -9999
Steven Cooreman 0:559902e88130 118 */
Steven Cooreman 0:559902e88130 119 void EFM32_SegmentLCD::Number(int value) {
Steven Cooreman 0:559902e88130 120 SegmentLCD_Number(value);
Steven Cooreman 0:559902e88130 121 }
Steven Cooreman 0:559902e88130 122
Steven Cooreman 0:559902e88130 123 /*
Steven Cooreman 0:559902e88130 124 * Clear the numeric part of the display.
Steven Cooreman 0:559902e88130 125 */
Steven Cooreman 0:559902e88130 126 void EFM32_SegmentLCD::NumberOff(void) {
Steven Cooreman 0:559902e88130 127 SegmentLCD_NumberOff();
Steven Cooreman 0:559902e88130 128 }
Steven Cooreman 0:559902e88130 129
Steven Cooreman 0:559902e88130 130 /*
Steven Cooreman 0:559902e88130 131 * Turn a predefined symbol on or off.
Steven Cooreman 0:559902e88130 132 * lcdSymbol = predefined symbol in segmentlcdconfig_*.h
Steven Cooreman 0:559902e88130 133 * on = true to turn on, false to turn off.
Steven Cooreman 0:559902e88130 134 */
Steven Cooreman 0:559902e88130 135 void EFM32_SegmentLCD::Symbol(lcdSymbol s, bool on) {
Steven Cooreman 0:559902e88130 136 SegmentLCD_Symbol(s, (on ? 1 : 0));
Steven Cooreman 0:559902e88130 137 }
Steven Cooreman 0:559902e88130 138
Steven Cooreman 0:559902e88130 139 /*
Steven Cooreman 0:559902e88130 140 * Display an unsigned short integer as a hex value
Steven Cooreman 0:559902e88130 141 * on the numeric part of the display.
Steven Cooreman 0:559902e88130 142 * max = FFFF, min = 0
Steven Cooreman 0:559902e88130 143 */
Steven Cooreman 0:559902e88130 144 void EFM32_SegmentLCD::UnsignedHex(uint16_t value) {
Steven Cooreman 0:559902e88130 145 SegmentLCD_UnsignedHex(value);
Steven Cooreman 0:559902e88130 146 }
Steven Cooreman 0:559902e88130 147
Steven Cooreman 0:559902e88130 148 /*
Steven Cooreman 0:559902e88130 149 * Display a 7-character string on the alphanumeric
Steven Cooreman 0:559902e88130 150 * portion of the display.
Steven Cooreman 0:559902e88130 151 */
Steven Cooreman 0:559902e88130 152 void EFM32_SegmentLCD::Write(char *string) {
Steven Cooreman 0:559902e88130 153 SegmentLCD_Write(string);
Steven Cooreman 0:559902e88130 154 }
Steven Cooreman 0:559902e88130 155
Steven Cooreman 0:559902e88130 156
Steven Cooreman 0:559902e88130 157 }