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
segmentlcdconfig_stk_lg.h
00001 /**************************************************************************//** 00002 * @file 00003 * @brief Segment LCD Config for the EFM32 Leopard Gecko STK (STK_3600) 00004 * @version 3.20.5 00005 ****************************************************************************** 00006 * @section License 00007 * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b> 00008 ******************************************************************************* 00009 * 00010 * This file is licensensed under the Silabs License Agreement. See the file 00011 * "Silabs_License_Agreement.txt" for details. Before using this software for 00012 * any purpose, you must agree to the terms of that agreement. 00013 * 00014 ******************************************************************************/ 00015 00016 #ifndef __SEGMENTLCDCONFIG_H 00017 #define __SEGMENTLCDCONFIG_H 00018 00019 #include "em_lcd.h" 00020 #include "PinNames.h" 00021 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00026 /** Range of symbols available on display */ 00027 typedef enum { 00028 LCD_SYMBOL_GECKO, 00029 LCD_SYMBOL_ANT, 00030 LCD_SYMBOL_PAD0, 00031 LCD_SYMBOL_PAD1, 00032 LCD_SYMBOL_EFM32, 00033 LCD_SYMBOL_MINUS, 00034 LCD_SYMBOL_COL3, 00035 LCD_SYMBOL_COL5, 00036 LCD_SYMBOL_COL10, 00037 LCD_SYMBOL_DEGC, 00038 LCD_SYMBOL_DEGF, 00039 LCD_SYMBOL_DP2, 00040 LCD_SYMBOL_DP3, 00041 LCD_SYMBOL_DP4, 00042 LCD_SYMBOL_DP5, 00043 LCD_SYMBOL_DP6, 00044 LCD_SYMBOL_DP10, 00045 } lcdSymbol; 00046 00047 #define LCD_SYMBOL_GECKO_COM 1 00048 #define LCD_SYMBOL_GECKO_SEG 12 00049 #define LCD_SYMBOL_ANT_COM 0 00050 #define LCD_SYMBOL_ANT_SEG 32 00051 #define LCD_SYMBOL_PAD0_COM 3 00052 #define LCD_SYMBOL_PAD0_SEG 39 00053 #define LCD_SYMBOL_PAD1_COM 2 00054 #define LCD_SYMBOL_PAD1_SEG 12 00055 #define LCD_SYMBOL_EFM32_COM 0 00056 #define LCD_SYMBOL_EFM32_SEG 28 00057 #define LCD_SYMBOL_MINUS_COM 3 00058 #define LCD_SYMBOL_MINUS_SEG 12 00059 #define LCD_SYMBOL_COL3_COM 4 00060 #define LCD_SYMBOL_COL3_SEG 12 00061 #define LCD_SYMBOL_COL5_COM 0 00062 #define LCD_SYMBOL_COL5_SEG 30 00063 #define LCD_SYMBOL_COL10_COM 5 00064 #define LCD_SYMBOL_COL10_SEG 39 00065 #define LCD_SYMBOL_DEGC_COM 0 00066 #define LCD_SYMBOL_DEGC_SEG 34 00067 #define LCD_SYMBOL_DEGF_COM 0 00068 #define LCD_SYMBOL_DEGF_SEG 35 00069 #define LCD_SYMBOL_DP2_COM 7 00070 #define LCD_SYMBOL_DP2_SEG 12 00071 #define LCD_SYMBOL_DP3_COM 5 00072 #define LCD_SYMBOL_DP3_SEG 12 00073 #define LCD_SYMBOL_DP4_COM 6 00074 #define LCD_SYMBOL_DP4_SEG 12 00075 #define LCD_SYMBOL_DP5_COM 7 00076 #define LCD_SYMBOL_DP5_SEG 29 00077 #define LCD_SYMBOL_DP6_COM 7 00078 #define LCD_SYMBOL_DP6_SEG 31 00079 #define LCD_SYMBOL_DP10_COM 4 00080 #define LCD_SYMBOL_DP10_SEG 39 00081 00082 /* LCD Controller Prescaler (divide LFACLK / 64) */ 00083 /* LFACLK_LCDpre = 512 Hz */ 00084 /* Set FDIV=0, means 512/1 = 512 Hz */ 00085 /* With octaplex mode, 512/16 => 32 Hz Frame Rate */ 00086 #define LCD_CMU_CLK_PRE cmuClkDiv_64 00087 #define LCD_CMU_CLK_DIV cmuClkDiv_1 00088 00089 #define LCD_BOOST_LEVEL lcdVBoostLevel3 00090 00091 00092 #define LCD_INIT_DEF \ 00093 { true,\ 00094 lcdMuxOctaplex,\ 00095 lcdBiasOneFourth,\ 00096 lcdWaveLowPower,\ 00097 lcdVLCDSelVDD, \ 00098 lcdConConfVLCD } 00099 00100 #define LCD_NUMBER_OFF() \ 00101 do { \ 00102 LCD_SegmentSetHigh(1, 0x00000078, 0x00000000); \ 00103 LCD_SegmentSetHigh(2, 0x00000078, 0x00000000); \ 00104 LCD_SegmentSetHigh(3, 0x00000078, 0x00000000); \ 00105 LCD_SegmentSetHigh(4, 0x00000078, 0x00000000); \ 00106 LCD_SegmentSetHigh(5, 0x00000078, 0x00000000); \ 00107 LCD_SegmentSetHigh(6, 0x00000078, 0x00000000); \ 00108 LCD_SegmentSetHigh(7, 0x00000078, 0x00000000); \ 00109 } while (0) 00110 00111 #define LCD_ALPHA_NUMBER_OFF() \ 00112 do { \ 00113 LCD_SegmentSetLow(7, 0x500FE000, 0x00000000);\ 00114 LCD_SegmentSetLow(6, 0xF00FE000, 0x00000000);\ 00115 LCD_SegmentSetLow(5, 0xF00FE000, 0x00000000);\ 00116 LCD_SegmentSetLow(4, 0xF00FE000, 0x00000000);\ 00117 LCD_SegmentSetLow(3, 0xF00FE000, 0x00000000);\ 00118 LCD_SegmentSetLow(2, 0xF00FE000, 0x00000000);\ 00119 LCD_SegmentSetLow(1, 0xF00FE000, 0x00000000);\ 00120 LCD_SegmentSetLow(0, 0xA0000000, 0x00000000);\ 00121 LCD_SegmentSetHigh(7, 0x00000007, 0x00000000);\ 00122 LCD_SegmentSetHigh(6, 0x00000007, 0x00000000);\ 00123 LCD_SegmentSetHigh(5, 0x00000007, 0x00000000);\ 00124 LCD_SegmentSetHigh(4, 0x00000007, 0x00000000);\ 00125 LCD_SegmentSetHigh(3, 0x00000007, 0x00000000);\ 00126 LCD_SegmentSetHigh(2, 0x00000007, 0x00000000);\ 00127 LCD_SegmentSetHigh(1, 0x00000007, 0x00000000);\ 00128 } while(0) 00129 00130 #define LCD_ALL_SEGMENTS_OFF() \ 00131 do { \ 00132 LCD_SegmentSetLow(0, 0xF00FF000, 0x00000000);\ 00133 LCD_SegmentSetLow(1, 0xF00FF000, 0x00000000);\ 00134 LCD_SegmentSetLow(2, 0xF00FF000, 0x00000000);\ 00135 LCD_SegmentSetLow(3, 0xF00FF000, 0x00000000);\ 00136 LCD_SegmentSetLow(4, 0xF00FF000, 0x00000000);\ 00137 LCD_SegmentSetLow(5, 0xF00FF000, 0x00000000);\ 00138 LCD_SegmentSetLow(6, 0xF00FF000, 0x00000000);\ 00139 LCD_SegmentSetLow(7, 0xF00FF000, 0x00000000);\ 00140 LCD_SegmentSetHigh(0, 0x000000FF, 0x00000000);\ 00141 LCD_SegmentSetHigh(1, 0x000000FF, 0x00000000);\ 00142 LCD_SegmentSetHigh(2, 0x000000FF, 0x00000000);\ 00143 LCD_SegmentSetHigh(3, 0x000000FF, 0x00000000);\ 00144 LCD_SegmentSetHigh(4, 0x000000FF, 0x00000000);\ 00145 LCD_SegmentSetHigh(5, 0x000000FF, 0x00000000);\ 00146 LCD_SegmentSetHigh(6, 0x000000FF, 0x00000000);\ 00147 LCD_SegmentSetHigh(7, 0x000000FF, 0x00000000);\ 00148 } while(0) 00149 00150 #define LCD_ALL_SEGMENTS_ON() \ 00151 do { \ 00152 LCD_SegmentSetLow(0, 0xF00FF000, 0xFFFFFFFF);\ 00153 LCD_SegmentSetLow(1, 0xF00FF000, 0xFFFFFFFF);\ 00154 LCD_SegmentSetLow(2, 0xF00FF000, 0xFFFFFFFF);\ 00155 LCD_SegmentSetLow(3, 0xF00FF000, 0xFFFFFFFF);\ 00156 LCD_SegmentSetLow(4, 0xF00FF000, 0xFFFFFFFF);\ 00157 LCD_SegmentSetLow(5, 0xF00FF000, 0xFFFFFFFF);\ 00158 LCD_SegmentSetLow(6, 0xF00FF000, 0xFFFFFFFF);\ 00159 LCD_SegmentSetLow(7, 0xF00FF000, 0xFFFFFFFF);\ 00160 LCD_SegmentSetHigh(0, 0x000000FF, 0xFFFFFFFF);\ 00161 LCD_SegmentSetHigh(1, 0x000000FF, 0xFFFFFFFF);\ 00162 LCD_SegmentSetHigh(2, 0x000000FF, 0xFFFFFFFF);\ 00163 LCD_SegmentSetHigh(3, 0x000000FF, 0xFFFFFFFF);\ 00164 LCD_SegmentSetHigh(4, 0x000000FF, 0xFFFFFFFF);\ 00165 LCD_SegmentSetHigh(5, 0x000000FF, 0xFFFFFFFF);\ 00166 LCD_SegmentSetHigh(6, 0x000000FF, 0xFFFFFFFF);\ 00167 LCD_SegmentSetHigh(7, 0x000000FF, 0xFFFFFFFF);\ 00168 } while(0) 00169 00170 #define LCD_SEGMENTS_ENABLE() \ 00171 do { \ 00172 LCD_SegmentRangeEnable(lcdSegment12_15, true);\ 00173 LCD_SegmentRangeEnable(lcdSegment16_19, true);\ 00174 LCD_SegmentRangeEnable(lcdSegment28_31, true);\ 00175 LCD_SegmentRangeEnable(lcdSegment32_35, true);\ 00176 LCD_SegmentRangeEnable(lcdSegment36_39, true);\ 00177 } while(0) 00178 00179 #define LCD_DISPLAY_ENABLE() \ 00180 do { \ 00181 ;\ 00182 } while(0) 00183 00184 #define EFM_DISPLAY_DEF {\ 00185 .Text = {\ 00186 { /* 1 */\ 00187 .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00188 .bit[0] = 13, .bit[1] = 14, .bit[2] = 14, .bit[3] = 14,\ 00189 .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\ 00190 .bit[4] = 13, .bit[5] = 13, .bit[6] = 13, .bit[7] = 13,\ 00191 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00192 .bit[8] = 14, .bit[9] = 14, .bit[10] = 14, .bit[11] = 14,\ 00193 .com[12] = 5, .com[13] = 6,\ 00194 .bit[12] = 13, .bit[13] = 13\ 00195 },\ 00196 { /* 2 */\ 00197 .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00198 .bit[0] = 15, .bit[1] = 16, .bit[2] = 16, .bit[3] = 16,\ 00199 .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\ 00200 .bit[4] = 15, .bit[5] = 15, .bit[6] = 15, .bit[7] = 15,\ 00201 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00202 .bit[8] = 16, .bit[9] = 16, .bit[10] = 16, .bit[11] = 16,\ 00203 .com[12] = 5, .com[13] = 6,\ 00204 .bit[12] = 15, .bit[13] = 15\ 00205 },\ 00206 { /* 3 */\ 00207 .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00208 .bit[0] = 17, .bit[1] = 18, .bit[2] = 18, .bit[3] = 18,\ 00209 .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\ 00210 .bit[4] = 17, .bit[5] = 17, .bit[6] = 17, .bit[7] = 17,\ 00211 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00212 .bit[8] = 18, .bit[9] = 18, .bit[10] = 18, .bit[11] = 18,\ 00213 .com[12] = 5, .com[13] = 6,\ 00214 .bit[12] = 17, .bit[13] = 17\ 00215 },\ 00216 { /* 4 */\ 00217 .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00218 .bit[0] = 19, .bit[1] = 28, .bit[2] = 28, .bit[3] = 28,\ 00219 .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\ 00220 .bit[4] = 19, .bit[5] = 19, .bit[6] = 19, .bit[7] = 19,\ 00221 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00222 .bit[8] = 28, .bit[9] = 28, .bit[10] = 28, .bit[11] = 28,\ 00223 .com[12] = 5, .com[13] = 6,\ 00224 .bit[12] = 19, .bit[13] = 19\ 00225 },\ 00226 { /* 5 */\ 00227 .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00228 .bit[0] = 29, .bit[1] = 30, .bit[2] = 30, .bit[3] = 30,\ 00229 .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\ 00230 .bit[4] = 29, .bit[5] = 29, .bit[6] = 29, .bit[7] = 29,\ 00231 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00232 .bit[8] = 30, .bit[9] = 30, .bit[10] = 30, .bit[11] = 30,\ 00233 .com[12] = 4, .com[13] = 5,\ 00234 .bit[12] = 29, .bit[13] = 29\ 00235 },\ 00236 { /* 6 */\ 00237 .com[0] = 0, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00238 .bit[0] = 31, .bit[1] = 32, .bit[2] = 32, .bit[3] = 32,\ 00239 .com[4] = 6, .com[5] = 2, .com[6] = 3, .com[7] = 1,\ 00240 .bit[4] = 31, .bit[5] = 31, .bit[6] = 31, .bit[7] = 31,\ 00241 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00242 .bit[8] = 32, .bit[9] = 32, .bit[10] = 32, .bit[11] = 32,\ 00243 .com[12] = 4, .com[13] = 5,\ 00244 .bit[12] = 31, .bit[13] = 31\ 00245 },\ 00246 { /* 7 */\ 00247 .com[0] = 1, .com[1] = 1, .com[2] = 5, .com[3] = 7,\ 00248 .bit[0] = 33, .bit[1] = 34, .bit[2] = 34, .bit[3] = 34,\ 00249 .com[4] = 7, .com[5] = 3, .com[6] = 4, .com[7] = 2,\ 00250 .bit[4] = 33, .bit[5] = 33, .bit[6] = 33, .bit[7] = 33,\ 00251 .com[8] = 3, .com[9] = 2, .com[10] = 4, .com[11] = 6,\ 00252 .bit[8] = 34, .bit[9] = 34, .bit[10] = 34, .bit[11] = 34,\ 00253 .com[12] = 5, .com[13] = 6,\ 00254 .bit[12] = 33, .bit[13] = 33\ 00255 },\ 00256 },\ 00257 .Number = {\ 00258 {\ 00259 .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\ 00260 .bit[0] = 35, .bit[1] = 35, .bit[2] = 35, .bit[3] = 35,\ 00261 .com[4] = 3, .com[5] = 6, .com[6] = 4,\ 00262 .bit[4] = 35, .bit[5] = 35, .bit[6] = 35,\ 00263 },\ 00264 {\ 00265 .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\ 00266 .bit[0] = 36, .bit[1] = 36, .bit[2] = 36, .bit[3] = 36,\ 00267 .com[4] = 3, .com[5] = 6, .com[6] = 4,\ 00268 .bit[4] = 36, .bit[5] = 36, .bit[6] = 36,\ 00269 },\ 00270 {\ 00271 .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\ 00272 .bit[0] = 37, .bit[1] = 37, .bit[2] = 37, .bit[3] = 37,\ 00273 .com[4] = 3, .com[5] = 6, .com[6] = 4,\ 00274 .bit[4] = 37, .bit[5] = 37, .bit[6] = 37,\ 00275 },\ 00276 {\ 00277 .com[0] = 7, .com[1] = 5, .com[2] = 2, .com[3] = 1,\ 00278 .bit[0] = 38, .bit[1] = 38, .bit[2] = 38, .bit[3] = 38,\ 00279 .com[4] = 3, .com[5] = 6, .com[6] = 4,\ 00280 .bit[4] = 38, .bit[5] = 38, .bit[6] = 38,\ 00281 },\ 00282 },\ 00283 .EMode = {\ 00284 .com[0] = 0, .bit[0] = 39,\ 00285 .com[1] = 1, .bit[1] = 39,\ 00286 .com[2] = 7, .bit[2] = 39,\ 00287 .com[3] = 2, .bit[3] = 39,\ 00288 .com[4] = 6, .bit[4] = 39,\ 00289 },\ 00290 .ARing = {\ 00291 .com[0] = 0, .bit[0] = 19,\ 00292 .com[1] = 0, .bit[1] = 18,\ 00293 .com[2] = 0, .bit[2] = 17,\ 00294 .com[3] = 0, .bit[3] = 16,\ 00295 .com[4] = 0, .bit[4] = 15,\ 00296 .com[5] = 0, .bit[5] = 14,\ 00297 .com[6] = 0, .bit[6] = 13,\ 00298 .com[7] = 0, .bit[7] = 12,\ 00299 },\ 00300 .Battery = {\ 00301 .com[0] = 0, .bit[0] = 33,\ 00302 .com[1] = 0, .bit[1] = 37,\ 00303 .com[2] = 0, .bit[2] = 36,\ 00304 .com[3] = 0, .bit[3] = 38,\ 00305 }\ 00306 } 00307 00308 static const PinName outPins[] = { 00309 /* SEG28..39 */ 00310 PA7, //LCD_SEG35 00311 PA8, //LCD_SEG36 00312 PA9, //LCD_SEG37 00313 PA10, //LCD_SEG38 00314 PA11, //LCD_SEG39 00315 PB0, //LCD_SEG32 00316 PB1, //LCD_SEG33 00317 PB2, //LCD_SEG34 00318 PD9, //LCD_SEG28 00319 PD10, //LCD_SEG29 00320 PD11, //LCD_SEG30 00321 PD12, //LCD_SEG31 00322 /* SEG12..19 */ 00323 PA0, //LCD_SEG13 00324 PA1, //LCD_SEG14 00325 PA2, //LCD_SEG15 00326 PA3, //LCD_SEG16 00327 PA4, //LCD_SEG17 00328 PA5, //LCD_SEG18 00329 PA6, //LCD_SEG19 00330 PA15, //LCD_SEG12 00331 /* COM4..7 */ 00332 PB3, //LCD_COM4 00333 PB4, //LCD_COM5 00334 PB5, //LCD_COM6 00335 PB6, //LCD_COM7 00336 /* COM0..3 */ 00337 PE4, //LCD_COM0 00338 PE5, //LCD_COM1 00339 PE6, //LCD_COM2 00340 PE7 //LCD_COM3 00341 }; 00342 00343 #ifdef __cplusplus 00344 } 00345 #endif 00346 00347 #endif
Generated on Thu Jul 14 2022 05:15:53 by 1.7.2