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.
EFM32_SegmentLCD.cpp@0:559902e88130, 2015-03-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |