Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BSP_DISCO_L476VG/stm32l476g_discovery_glass_lcd.c@6:0018763974d3, 2017-02-25 (annotated)
- Committer:
- elmot
- Date:
- Sat Feb 25 08:59:21 2017 +0000
- Revision:
- 6:0018763974d3
- Parent:
- 1:d0dfbce63a89
No comment
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
elmot | 1:d0dfbce63a89 | 1 | /** |
elmot | 1:d0dfbce63a89 | 2 | ****************************************************************************** |
elmot | 1:d0dfbce63a89 | 3 | * @file stm32l476g_discovery_glass_lcd.c |
elmot | 1:d0dfbce63a89 | 4 | * @author MCD Application Team |
elmot | 1:d0dfbce63a89 | 5 | * @version V1.0.0 |
elmot | 1:d0dfbce63a89 | 6 | * @date 26-June-2015 |
elmot | 1:d0dfbce63a89 | 7 | * @brief This file provides a set of functions needed to manage the |
elmot | 1:d0dfbce63a89 | 8 | * LCD Glass driver for the STM32L476G-Discovery board. |
elmot | 1:d0dfbce63a89 | 9 | ****************************************************************************** |
elmot | 1:d0dfbce63a89 | 10 | * @attention |
elmot | 1:d0dfbce63a89 | 11 | * |
elmot | 1:d0dfbce63a89 | 12 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
elmot | 1:d0dfbce63a89 | 13 | * |
elmot | 1:d0dfbce63a89 | 14 | * Redistribution and use in source and binary forms, with or without modification, |
elmot | 1:d0dfbce63a89 | 15 | * are permitted provided that the following conditions are met: |
elmot | 1:d0dfbce63a89 | 16 | * 1. Redistributions of source code must retain the above copyright notice, |
elmot | 1:d0dfbce63a89 | 17 | * this list of conditions and the following disclaimer. |
elmot | 1:d0dfbce63a89 | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
elmot | 1:d0dfbce63a89 | 19 | * this list of conditions and the following disclaimer in the documentation |
elmot | 1:d0dfbce63a89 | 20 | * and/or other materials provided with the distribution. |
elmot | 1:d0dfbce63a89 | 21 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
elmot | 1:d0dfbce63a89 | 22 | * may be used to endorse or promote products derived from this software |
elmot | 1:d0dfbce63a89 | 23 | * without specific prior written permission. |
elmot | 1:d0dfbce63a89 | 24 | * |
elmot | 1:d0dfbce63a89 | 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
elmot | 1:d0dfbce63a89 | 26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
elmot | 1:d0dfbce63a89 | 27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
elmot | 1:d0dfbce63a89 | 28 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
elmot | 1:d0dfbce63a89 | 29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
elmot | 1:d0dfbce63a89 | 30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
elmot | 1:d0dfbce63a89 | 31 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
elmot | 1:d0dfbce63a89 | 32 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
elmot | 1:d0dfbce63a89 | 33 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
elmot | 1:d0dfbce63a89 | 34 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
elmot | 1:d0dfbce63a89 | 35 | * |
elmot | 1:d0dfbce63a89 | 36 | ****************************************************************************** |
elmot | 1:d0dfbce63a89 | 37 | */ |
elmot | 1:d0dfbce63a89 | 38 | |
elmot | 1:d0dfbce63a89 | 39 | /* Includes ------------------------------------------------------------------*/ |
elmot | 1:d0dfbce63a89 | 40 | #include "stm32l476g_discovery_glass_lcd.h" |
elmot | 1:d0dfbce63a89 | 41 | |
elmot | 1:d0dfbce63a89 | 42 | // mbed function to replace HAL_Delay function |
elmot | 1:d0dfbce63a89 | 43 | void wait_ms(int ms); |
elmot | 1:d0dfbce63a89 | 44 | |
elmot | 1:d0dfbce63a89 | 45 | /** @addtogroup BSP |
elmot | 1:d0dfbce63a89 | 46 | * @{ |
elmot | 1:d0dfbce63a89 | 47 | */ |
elmot | 1:d0dfbce63a89 | 48 | |
elmot | 1:d0dfbce63a89 | 49 | /** @addtogroup STM32L476G_DISCOVERY |
elmot | 1:d0dfbce63a89 | 50 | * @{ |
elmot | 1:d0dfbce63a89 | 51 | */ |
elmot | 1:d0dfbce63a89 | 52 | |
elmot | 1:d0dfbce63a89 | 53 | /** @defgroup STM32L476G_DISCOVERY_GLASS_LCD STM32L476G-DISCOVERY GLASS LCD |
elmot | 1:d0dfbce63a89 | 54 | * @brief This file includes the LCD Glass driver for LCD Module of |
elmot | 1:d0dfbce63a89 | 55 | * STM32L476G-DISCOVERY board. |
elmot | 1:d0dfbce63a89 | 56 | * @{ |
elmot | 1:d0dfbce63a89 | 57 | */ |
elmot | 1:d0dfbce63a89 | 58 | |
elmot | 1:d0dfbce63a89 | 59 | /* Private constants ---------------------------------------------------------*/ |
elmot | 1:d0dfbce63a89 | 60 | |
elmot | 1:d0dfbce63a89 | 61 | /** @defgroup STM32L476G_DISCOVERY_GLASS_LCD_Private_Constants Private Constants |
elmot | 1:d0dfbce63a89 | 62 | * @{ |
elmot | 1:d0dfbce63a89 | 63 | */ |
elmot | 1:d0dfbce63a89 | 64 | #define ASCII_CHAR_0 0x30 /* 0 */ |
elmot | 1:d0dfbce63a89 | 65 | #define ASCII_CHAR_AT_SYMBOL 0x40 /* @ */ |
elmot | 1:d0dfbce63a89 | 66 | #define ASCII_CHAR_LEFT_OPEN_BRACKET 0x5B /* [ */ |
elmot | 1:d0dfbce63a89 | 67 | #define ASCII_CHAR_APOSTROPHE 0x60 /* ` */ |
elmot | 1:d0dfbce63a89 | 68 | #define ASCII_CHAR_LEFT_OPEN_BRACE 0x7B /* ( */ |
elmot | 1:d0dfbce63a89 | 69 | /** |
elmot | 1:d0dfbce63a89 | 70 | * @} |
elmot | 1:d0dfbce63a89 | 71 | */ |
elmot | 1:d0dfbce63a89 | 72 | |
elmot | 1:d0dfbce63a89 | 73 | /* Private variables ---------------------------------------------------------*/ |
elmot | 1:d0dfbce63a89 | 74 | |
elmot | 1:d0dfbce63a89 | 75 | /** @defgroup STM32L476G_DISCOVERY_GLASS_LCD_Private_Variables Private Variables |
elmot | 1:d0dfbce63a89 | 76 | * @{ |
elmot | 1:d0dfbce63a89 | 77 | */ |
elmot | 1:d0dfbce63a89 | 78 | |
elmot | 1:d0dfbce63a89 | 79 | /* this variable can be used for accelerate the scrolling exit when push user button */ |
elmot | 1:d0dfbce63a89 | 80 | __IO uint8_t bLCDGlass_KeyPressed = 0; |
elmot | 1:d0dfbce63a89 | 81 | |
elmot | 1:d0dfbce63a89 | 82 | /** |
elmot | 1:d0dfbce63a89 | 83 | @verbatim |
elmot | 1:d0dfbce63a89 | 84 | ================================================================================ |
elmot | 1:d0dfbce63a89 | 85 | GLASS LCD MAPPING |
elmot | 1:d0dfbce63a89 | 86 | ================================================================================ |
elmot | 1:d0dfbce63a89 | 87 | LCD allows to display informations on six 14-segment digits and 4 bars: |
elmot | 1:d0dfbce63a89 | 88 | |
elmot | 1:d0dfbce63a89 | 89 | 1 2 3 4 5 6 |
elmot | 1:d0dfbce63a89 | 90 | ----- ----- ----- ----- ----- ----- |
elmot | 1:d0dfbce63a89 | 91 | |\|/| o |\|/| o |\|/| o |\|/| o |\|/| |\|/| BAR3 |
elmot | 1:d0dfbce63a89 | 92 | -- -- -- -- -- -- -- -- -- -- -- -- BAR2 |
elmot | 1:d0dfbce63a89 | 93 | |/|\| o |/|\| o |/|\| o |/|\| o |/|\| |/|\| BAR1 |
elmot | 1:d0dfbce63a89 | 94 | ----- * ----- * ----- * ----- * ----- ----- BAR0 |
elmot | 1:d0dfbce63a89 | 95 | |
elmot | 1:d0dfbce63a89 | 96 | LCD segment mapping: |
elmot | 1:d0dfbce63a89 | 97 | -------------------- |
elmot | 1:d0dfbce63a89 | 98 | -----A----- _ |
elmot | 1:d0dfbce63a89 | 99 | |\ | /| COL |_| |
elmot | 1:d0dfbce63a89 | 100 | F H J K B |
elmot | 1:d0dfbce63a89 | 101 | | \ | / | _ |
elmot | 1:d0dfbce63a89 | 102 | --G-- --M-- COL |_| |
elmot | 1:d0dfbce63a89 | 103 | | / | \ | |
elmot | 1:d0dfbce63a89 | 104 | E Q P N C |
elmot | 1:d0dfbce63a89 | 105 | |/ | \| _ |
elmot | 1:d0dfbce63a89 | 106 | -----D----- DP |_| |
elmot | 1:d0dfbce63a89 | 107 | |
elmot | 1:d0dfbce63a89 | 108 | An LCD character coding is based on the following matrix: |
elmot | 1:d0dfbce63a89 | 109 | COM 0 1 2 3 |
elmot | 1:d0dfbce63a89 | 110 | SEG(n) { E , D , P , N } |
elmot | 1:d0dfbce63a89 | 111 | SEG(n+1) { M , C , COL , DP } |
elmot | 1:d0dfbce63a89 | 112 | SEG(23-n-1) { B , A , K , J } |
elmot | 1:d0dfbce63a89 | 113 | SEG(23-n) { G , F , Q , H } |
elmot | 1:d0dfbce63a89 | 114 | with n positive odd number. |
elmot | 1:d0dfbce63a89 | 115 | |
elmot | 1:d0dfbce63a89 | 116 | The character 'A' for example is: |
elmot | 1:d0dfbce63a89 | 117 | ------------------------------- |
elmot | 1:d0dfbce63a89 | 118 | LSB { 1 , 0 , 0 , 0 } |
elmot | 1:d0dfbce63a89 | 119 | { 1 , 1 , 0 , 0 } |
elmot | 1:d0dfbce63a89 | 120 | { 1 , 1 , 0 , 0 } |
elmot | 1:d0dfbce63a89 | 121 | MSB { 1 , 1 , 0 , 0 } |
elmot | 1:d0dfbce63a89 | 122 | ------------------- |
elmot | 1:d0dfbce63a89 | 123 | 'A' = F E 0 0 hexa |
elmot | 1:d0dfbce63a89 | 124 | |
elmot | 1:d0dfbce63a89 | 125 | @endverbatim |
elmot | 1:d0dfbce63a89 | 126 | */ |
elmot | 1:d0dfbce63a89 | 127 | |
elmot | 1:d0dfbce63a89 | 128 | LCD_HandleTypeDef LCDHandle; |
elmot | 1:d0dfbce63a89 | 129 | |
elmot | 1:d0dfbce63a89 | 130 | /* Constant table for cap characters 'A' --> 'Z' */ |
elmot | 1:d0dfbce63a89 | 131 | const uint16_t CapLetterMap[26]= |
elmot | 1:d0dfbce63a89 | 132 | { |
elmot | 1:d0dfbce63a89 | 133 | /* A B C D E F G H I */ |
elmot | 1:d0dfbce63a89 | 134 | 0xFE00, 0x6714, 0x1D00, 0x4714, 0x9D00, 0x9C00, 0x3F00, 0xFA00, 0x0014, |
elmot | 1:d0dfbce63a89 | 135 | /* J K L M N O P Q R */ |
elmot | 1:d0dfbce63a89 | 136 | 0x5300, 0x9841, 0x1900, 0x5A48, 0x5A09, 0x5F00, 0xFC00, 0x5F01, 0xFC01, |
elmot | 1:d0dfbce63a89 | 137 | /* S T U V W X Y Z */ |
elmot | 1:d0dfbce63a89 | 138 | 0xAF00, 0x0414, 0x5b00, 0x18C0, 0x5A81, 0x00C9, 0x0058, 0x05C0 |
elmot | 1:d0dfbce63a89 | 139 | }; |
elmot | 1:d0dfbce63a89 | 140 | |
elmot | 1:d0dfbce63a89 | 141 | /* Constant table for number '0' --> '9' */ |
elmot | 1:d0dfbce63a89 | 142 | const uint16_t NumberMap[10]= |
elmot | 1:d0dfbce63a89 | 143 | { |
elmot | 1:d0dfbce63a89 | 144 | /* 0 1 2 3 4 5 6 7 8 9 */ |
elmot | 1:d0dfbce63a89 | 145 | 0x5F00,0x4200,0xF500,0x6700,0xEa00,0xAF00,0xBF00,0x04600,0xFF00,0xEF00 |
elmot | 1:d0dfbce63a89 | 146 | }; |
elmot | 1:d0dfbce63a89 | 147 | |
elmot | 1:d0dfbce63a89 | 148 | uint32_t Digit[4]; /* Digit frame buffer */ |
elmot | 1:d0dfbce63a89 | 149 | |
elmot | 1:d0dfbce63a89 | 150 | /* LCD BAR status: To save the bar setting after writing in LCD RAM memory */ |
elmot | 1:d0dfbce63a89 | 151 | uint8_t LCDBar = BATTERYLEVEL_FULL; |
elmot | 1:d0dfbce63a89 | 152 | |
elmot | 1:d0dfbce63a89 | 153 | /** |
elmot | 1:d0dfbce63a89 | 154 | * @} |
elmot | 1:d0dfbce63a89 | 155 | */ |
elmot | 1:d0dfbce63a89 | 156 | |
elmot | 1:d0dfbce63a89 | 157 | /** @defgroup STM32L476G_DISCOVERY_LCD_Private_Functions Private Functions |
elmot | 1:d0dfbce63a89 | 158 | * @{ |
elmot | 1:d0dfbce63a89 | 159 | */ |
elmot | 1:d0dfbce63a89 | 160 | static void Convert(uint8_t* Char, Point_Typedef Point, DoublePoint_Typedef Colon); |
elmot | 1:d0dfbce63a89 | 161 | static void WriteChar(uint8_t* ch, Point_Typedef Point, DoublePoint_Typedef Colon, DigitPosition_Typedef Position); |
elmot | 1:d0dfbce63a89 | 162 | static void LCD_MspInit(LCD_HandleTypeDef *hlcd); |
elmot | 1:d0dfbce63a89 | 163 | static void LCD_MspDeInit(LCD_HandleTypeDef *hlcd); |
elmot | 1:d0dfbce63a89 | 164 | |
elmot | 1:d0dfbce63a89 | 165 | /** |
elmot | 1:d0dfbce63a89 | 166 | * @} |
elmot | 1:d0dfbce63a89 | 167 | */ |
elmot | 1:d0dfbce63a89 | 168 | |
elmot | 1:d0dfbce63a89 | 169 | /** @addtogroup STM32L476G_DISCOVERY_LCD_Exported_Functions |
elmot | 1:d0dfbce63a89 | 170 | * @{ |
elmot | 1:d0dfbce63a89 | 171 | */ |
elmot | 1:d0dfbce63a89 | 172 | |
elmot | 1:d0dfbce63a89 | 173 | /** |
elmot | 1:d0dfbce63a89 | 174 | * @brief Initialize the LCD GLASS relative GPIO port IOs and LCD peripheral. |
elmot | 1:d0dfbce63a89 | 175 | * @retval None |
elmot | 1:d0dfbce63a89 | 176 | */ |
elmot | 1:d0dfbce63a89 | 177 | void BSP_LCD_GLASS_Init(void) |
elmot | 1:d0dfbce63a89 | 178 | { |
elmot | 1:d0dfbce63a89 | 179 | LCDHandle.Instance = LCD; |
elmot | 1:d0dfbce63a89 | 180 | LCDHandle.Init.Prescaler = LCD_PRESCALER_1; |
elmot | 1:d0dfbce63a89 | 181 | LCDHandle.Init.Divider = LCD_DIVIDER_31; |
elmot | 1:d0dfbce63a89 | 182 | #if defined (USE_STM32L476G_DISCO_REVC) || defined (USE_STM32L476G_DISCO_REVB) |
elmot | 1:d0dfbce63a89 | 183 | LCDHandle.Init.Duty = LCD_DUTY_1_4; |
elmot | 1:d0dfbce63a89 | 184 | #elif defined (USE_STM32L476G_DISCO_REVA) |
elmot | 1:d0dfbce63a89 | 185 | LCDHandle.Init.Duty = LCD_DUTY_1_8; |
elmot | 1:d0dfbce63a89 | 186 | #endif |
elmot | 1:d0dfbce63a89 | 187 | LCDHandle.Init.Bias = LCD_BIAS_1_3; |
elmot | 1:d0dfbce63a89 | 188 | LCDHandle.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL; |
elmot | 1:d0dfbce63a89 | 189 | LCDHandle.Init.Contrast = LCD_CONTRASTLEVEL_5; |
elmot | 1:d0dfbce63a89 | 190 | LCDHandle.Init.DeadTime = LCD_DEADTIME_0; |
elmot | 1:d0dfbce63a89 | 191 | LCDHandle.Init.PulseOnDuration = LCD_PULSEONDURATION_4; |
elmot | 1:d0dfbce63a89 | 192 | LCDHandle.Init.HighDrive = LCD_HIGHDRIVE_DISABLE; |
elmot | 1:d0dfbce63a89 | 193 | LCDHandle.Init.BlinkMode = LCD_BLINKMODE_OFF; |
elmot | 1:d0dfbce63a89 | 194 | LCDHandle.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV32; |
elmot | 1:d0dfbce63a89 | 195 | LCDHandle.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE; |
elmot | 1:d0dfbce63a89 | 196 | |
elmot | 1:d0dfbce63a89 | 197 | /* Initialize the LCD */ |
elmot | 1:d0dfbce63a89 | 198 | LCD_MspInit(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 199 | HAL_LCD_Init(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 200 | |
elmot | 1:d0dfbce63a89 | 201 | BSP_LCD_GLASS_Clear(); |
elmot | 1:d0dfbce63a89 | 202 | } |
elmot | 1:d0dfbce63a89 | 203 | |
elmot | 1:d0dfbce63a89 | 204 | /** |
elmot | 1:d0dfbce63a89 | 205 | * @brief DeInitialize the LCD GLASS relative GPIO port IOs and LCD peripheral. |
elmot | 1:d0dfbce63a89 | 206 | * @retval None |
elmot | 1:d0dfbce63a89 | 207 | */ |
elmot | 1:d0dfbce63a89 | 208 | void BSP_LCD_GLASS_DeInit(void) |
elmot | 1:d0dfbce63a89 | 209 | { |
elmot | 1:d0dfbce63a89 | 210 | /* De-Initialize the LCD */ |
elmot | 1:d0dfbce63a89 | 211 | LCD_MspDeInit(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 212 | HAL_LCD_DeInit(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 213 | } |
elmot | 1:d0dfbce63a89 | 214 | |
elmot | 1:d0dfbce63a89 | 215 | |
elmot | 1:d0dfbce63a89 | 216 | /** |
elmot | 1:d0dfbce63a89 | 217 | * @brief Configure the LCD Blink mode and Blink frequency. |
elmot | 1:d0dfbce63a89 | 218 | * @param BlinkMode: specifies the LCD blink mode. |
elmot | 1:d0dfbce63a89 | 219 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 220 | * @arg LCD_BLINKMODE_OFF: Blink disabled |
elmot | 1:d0dfbce63a89 | 221 | * @arg LCD_BLINKMODE_SEG0_COM0: Blink enabled on SEG[0], COM[0] (1 pixel) |
elmot | 1:d0dfbce63a89 | 222 | * @arg LCD_BLINKMODE_SEG0_ALLCOM: Blink enabled on SEG[0], all COM (up to 8 |
elmot | 1:d0dfbce63a89 | 223 | * pixels according to the programmed duty) |
elmot | 1:d0dfbce63a89 | 224 | * @arg LCD_BLINKMODE_ALLSEG_ALLCOM: Blink enabled on all SEG and all COM |
elmot | 1:d0dfbce63a89 | 225 | * (all pixels) |
elmot | 1:d0dfbce63a89 | 226 | * @param BlinkFrequency: specifies the LCD blink frequency. |
elmot | 1:d0dfbce63a89 | 227 | * @arg LCD_BLINKFREQUENCY_DIV8: The Blink frequency = fLcd/8 |
elmot | 1:d0dfbce63a89 | 228 | * @arg LCD_BLINKFREQUENCY_DIV16: The Blink frequency = fLcd/16 |
elmot | 1:d0dfbce63a89 | 229 | * @arg LCD_BLINKFREQUENCY_DIV32: The Blink frequency = fLcd/32 |
elmot | 1:d0dfbce63a89 | 230 | * @arg LCD_BLINKFREQUENCY_DIV64: The Blink frequency = fLcd/64 |
elmot | 1:d0dfbce63a89 | 231 | * @arg LCD_BLINKFREQUENCY_DIV128: The Blink frequency = fLcd/128 |
elmot | 1:d0dfbce63a89 | 232 | * @arg LCD_BLINKFREQUENCY_DIV256: The Blink frequency = fLcd/256 |
elmot | 1:d0dfbce63a89 | 233 | * @arg LCD_BLINKFREQUENCY_DIV512: The Blink frequency = fLcd/512 |
elmot | 1:d0dfbce63a89 | 234 | * @arg LCD_BLINKFREQUENCY_DIV1024: The Blink frequency = fLcd/1024 |
elmot | 1:d0dfbce63a89 | 235 | * @retval None |
elmot | 1:d0dfbce63a89 | 236 | */ |
elmot | 1:d0dfbce63a89 | 237 | void BSP_LCD_GLASS_BlinkConfig(uint32_t BlinkMode, uint32_t BlinkFrequency) |
elmot | 1:d0dfbce63a89 | 238 | { |
elmot | 1:d0dfbce63a89 | 239 | __HAL_LCD_BLINK_CONFIG(&LCDHandle, BlinkMode, BlinkFrequency); |
elmot | 1:d0dfbce63a89 | 240 | } |
elmot | 1:d0dfbce63a89 | 241 | |
elmot | 1:d0dfbce63a89 | 242 | /** |
elmot | 1:d0dfbce63a89 | 243 | * @brief Configure the LCD contrast. |
elmot | 1:d0dfbce63a89 | 244 | * @param Contrast: specifies the LCD contrast value. |
elmot | 1:d0dfbce63a89 | 245 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 246 | * @arg LCD_CONTRASTLEVEL_0: Maximum Voltage = 2.60V |
elmot | 1:d0dfbce63a89 | 247 | * @arg LCD_CONTRASTLEVEL_1: Maximum Voltage = 2.73V |
elmot | 1:d0dfbce63a89 | 248 | * @arg LCD_CONTRASTLEVEL_2: Maximum Voltage = 2.86V |
elmot | 1:d0dfbce63a89 | 249 | * @arg LCD_CONTRASTLEVEL_3: Maximum Voltage = 2.99V |
elmot | 1:d0dfbce63a89 | 250 | * @arg LCD_CONTRASTLEVEL_4: Maximum Voltage = 3.12V |
elmot | 1:d0dfbce63a89 | 251 | * @arg LCD_CONTRASTLEVEL_5: Maximum Voltage = 3.25V |
elmot | 1:d0dfbce63a89 | 252 | * @arg LCD_CONTRASTLEVEL_6: Maximum Voltage = 3.38V |
elmot | 1:d0dfbce63a89 | 253 | * @arg LCD_CONTRASTLEVEL_7: Maximum Voltage = 3.51V |
elmot | 1:d0dfbce63a89 | 254 | * @retval None |
elmot | 1:d0dfbce63a89 | 255 | */ |
elmot | 1:d0dfbce63a89 | 256 | void BSP_LCD_GLASS_Contrast(uint32_t Contrast) |
elmot | 1:d0dfbce63a89 | 257 | { |
elmot | 1:d0dfbce63a89 | 258 | __HAL_LCD_CONTRAST_CONFIG(&LCDHandle, Contrast); |
elmot | 1:d0dfbce63a89 | 259 | } |
elmot | 1:d0dfbce63a89 | 260 | |
elmot | 1:d0dfbce63a89 | 261 | /** |
elmot | 1:d0dfbce63a89 | 262 | * @brief Display one or several bar in LCD frame buffer. |
elmot | 1:d0dfbce63a89 | 263 | * @param BarId: specifies the LCD GLASS Bar to display |
elmot | 1:d0dfbce63a89 | 264 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 265 | * @arg BAR0: LCD GLASS Bar 0 |
elmot | 1:d0dfbce63a89 | 266 | * @arg BAR0: LCD GLASS Bar 1 |
elmot | 1:d0dfbce63a89 | 267 | * @arg BAR0: LCD GLASS Bar 2 |
elmot | 1:d0dfbce63a89 | 268 | * @arg BAR0: LCD GLASS Bar 3 |
elmot | 1:d0dfbce63a89 | 269 | * @retval None |
elmot | 1:d0dfbce63a89 | 270 | */ |
elmot | 1:d0dfbce63a89 | 271 | void BSP_LCD_GLASS_DisplayBar(uint32_t BarId) |
elmot | 1:d0dfbce63a89 | 272 | { |
elmot | 1:d0dfbce63a89 | 273 | uint32_t position = 0; |
elmot | 1:d0dfbce63a89 | 274 | |
elmot | 1:d0dfbce63a89 | 275 | /* Check which bar is selected */ |
elmot | 1:d0dfbce63a89 | 276 | while ((BarId) >> position) |
elmot | 1:d0dfbce63a89 | 277 | { |
elmot | 1:d0dfbce63a89 | 278 | /* Check if current bar is selected */ |
elmot | 1:d0dfbce63a89 | 279 | switch(BarId & (1 << position)) |
elmot | 1:d0dfbce63a89 | 280 | { |
elmot | 1:d0dfbce63a89 | 281 | /* Bar 0 */ |
elmot | 1:d0dfbce63a89 | 282 | case LCD_BAR_0: |
elmot | 1:d0dfbce63a89 | 283 | /* Set BAR0 */ |
elmot | 1:d0dfbce63a89 | 284 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG), LCD_BAR0_SEG); |
elmot | 1:d0dfbce63a89 | 285 | break; |
elmot | 1:d0dfbce63a89 | 286 | |
elmot | 1:d0dfbce63a89 | 287 | /* Bar 1 */ |
elmot | 1:d0dfbce63a89 | 288 | case LCD_BAR_1: |
elmot | 1:d0dfbce63a89 | 289 | /* Set BAR1 */ |
elmot | 1:d0dfbce63a89 | 290 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG), LCD_BAR1_SEG); |
elmot | 1:d0dfbce63a89 | 291 | break; |
elmot | 1:d0dfbce63a89 | 292 | |
elmot | 1:d0dfbce63a89 | 293 | /* Bar 2 */ |
elmot | 1:d0dfbce63a89 | 294 | case LCD_BAR_2: |
elmot | 1:d0dfbce63a89 | 295 | /* Set BAR2 */ |
elmot | 1:d0dfbce63a89 | 296 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR2_SEG), LCD_BAR2_SEG); |
elmot | 1:d0dfbce63a89 | 297 | break; |
elmot | 1:d0dfbce63a89 | 298 | |
elmot | 1:d0dfbce63a89 | 299 | /* Bar 3 */ |
elmot | 1:d0dfbce63a89 | 300 | case LCD_BAR_3: |
elmot | 1:d0dfbce63a89 | 301 | /* Set BAR3 */ |
elmot | 1:d0dfbce63a89 | 302 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR3_SEG), LCD_BAR3_SEG); |
elmot | 1:d0dfbce63a89 | 303 | break; |
elmot | 1:d0dfbce63a89 | 304 | |
elmot | 1:d0dfbce63a89 | 305 | default: |
elmot | 1:d0dfbce63a89 | 306 | break; |
elmot | 1:d0dfbce63a89 | 307 | } |
elmot | 1:d0dfbce63a89 | 308 | position++; |
elmot | 1:d0dfbce63a89 | 309 | } |
elmot | 1:d0dfbce63a89 | 310 | |
elmot | 1:d0dfbce63a89 | 311 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 312 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 313 | } |
elmot | 1:d0dfbce63a89 | 314 | |
elmot | 1:d0dfbce63a89 | 315 | /** |
elmot | 1:d0dfbce63a89 | 316 | * @brief Clear one or several bar in LCD frame buffer. |
elmot | 1:d0dfbce63a89 | 317 | * @param BarId: specifies the LCD GLASS Bar to display |
elmot | 1:d0dfbce63a89 | 318 | * This parameter can be combination of one of the following values: |
elmot | 1:d0dfbce63a89 | 319 | * @arg LCD_BAR_0: LCD GLASS Bar 0 |
elmot | 1:d0dfbce63a89 | 320 | * @arg LCD_BAR_1: LCD GLASS Bar 1 |
elmot | 1:d0dfbce63a89 | 321 | * @arg LCD_BAR_2: LCD GLASS Bar 2 |
elmot | 1:d0dfbce63a89 | 322 | * @arg LCD_BAR_3: LCD GLASS Bar 3 |
elmot | 1:d0dfbce63a89 | 323 | * @retval None |
elmot | 1:d0dfbce63a89 | 324 | */ |
elmot | 1:d0dfbce63a89 | 325 | void BSP_LCD_GLASS_ClearBar(uint32_t BarId) |
elmot | 1:d0dfbce63a89 | 326 | { |
elmot | 1:d0dfbce63a89 | 327 | uint32_t position = 0; |
elmot | 1:d0dfbce63a89 | 328 | |
elmot | 1:d0dfbce63a89 | 329 | /* Check which bar is selected */ |
elmot | 1:d0dfbce63a89 | 330 | while ((BarId) >> position) |
elmot | 1:d0dfbce63a89 | 331 | { |
elmot | 1:d0dfbce63a89 | 332 | /* Check if current bar is selected */ |
elmot | 1:d0dfbce63a89 | 333 | switch(BarId & (1 << position)) |
elmot | 1:d0dfbce63a89 | 334 | { |
elmot | 1:d0dfbce63a89 | 335 | /* Bar 0 */ |
elmot | 1:d0dfbce63a89 | 336 | case LCD_BAR_0: |
elmot | 1:d0dfbce63a89 | 337 | /* Set BAR0 */ |
elmot | 1:d0dfbce63a89 | 338 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG) , 0); |
elmot | 1:d0dfbce63a89 | 339 | break; |
elmot | 1:d0dfbce63a89 | 340 | |
elmot | 1:d0dfbce63a89 | 341 | /* Bar 1 */ |
elmot | 1:d0dfbce63a89 | 342 | case LCD_BAR_1: |
elmot | 1:d0dfbce63a89 | 343 | /* Set BAR1 */ |
elmot | 1:d0dfbce63a89 | 344 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG), 0); |
elmot | 1:d0dfbce63a89 | 345 | break; |
elmot | 1:d0dfbce63a89 | 346 | |
elmot | 1:d0dfbce63a89 | 347 | /* Bar 2 */ |
elmot | 1:d0dfbce63a89 | 348 | case LCD_BAR_2: |
elmot | 1:d0dfbce63a89 | 349 | /* Set BAR2 */ |
elmot | 1:d0dfbce63a89 | 350 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR2_SEG), 0); |
elmot | 1:d0dfbce63a89 | 351 | break; |
elmot | 1:d0dfbce63a89 | 352 | |
elmot | 1:d0dfbce63a89 | 353 | /* Bar 3 */ |
elmot | 1:d0dfbce63a89 | 354 | case LCD_BAR_3: |
elmot | 1:d0dfbce63a89 | 355 | /* Set BAR3 */ |
elmot | 1:d0dfbce63a89 | 356 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR3_SEG), 0); |
elmot | 1:d0dfbce63a89 | 357 | break; |
elmot | 1:d0dfbce63a89 | 358 | |
elmot | 1:d0dfbce63a89 | 359 | default: |
elmot | 1:d0dfbce63a89 | 360 | break; |
elmot | 1:d0dfbce63a89 | 361 | } |
elmot | 1:d0dfbce63a89 | 362 | position++; |
elmot | 1:d0dfbce63a89 | 363 | } |
elmot | 1:d0dfbce63a89 | 364 | |
elmot | 1:d0dfbce63a89 | 365 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 366 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 367 | } |
elmot | 1:d0dfbce63a89 | 368 | |
elmot | 1:d0dfbce63a89 | 369 | /** |
elmot | 1:d0dfbce63a89 | 370 | * @brief Configure the bar level on LCD by writing bar value in LCD frame buffer. |
elmot | 1:d0dfbce63a89 | 371 | * @param BarLevel: specifies the LCD GLASS Battery Level. |
elmot | 1:d0dfbce63a89 | 372 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 373 | * @arg BATTERYLEVEL_OFF: LCD GLASS Battery Empty |
elmot | 1:d0dfbce63a89 | 374 | * @arg BATTERYLEVEL_1_4: LCD GLASS Battery 1/4 Full |
elmot | 1:d0dfbce63a89 | 375 | * @arg BATTERYLEVEL_1_2: LCD GLASS Battery 1/2 Full |
elmot | 1:d0dfbce63a89 | 376 | * @arg BATTERYLEVEL_3_4: LCD GLASS Battery 3/4 Full |
elmot | 1:d0dfbce63a89 | 377 | * @arg BATTERYLEVEL_FULL: LCD GLASS Battery Full |
elmot | 1:d0dfbce63a89 | 378 | * @retval None |
elmot | 1:d0dfbce63a89 | 379 | */ |
elmot | 1:d0dfbce63a89 | 380 | void BSP_LCD_GLASS_BarLevelConfig(uint8_t BarLevel) |
elmot | 1:d0dfbce63a89 | 381 | { |
elmot | 1:d0dfbce63a89 | 382 | switch (BarLevel) |
elmot | 1:d0dfbce63a89 | 383 | { |
elmot | 1:d0dfbce63a89 | 384 | /* BATTERYLEVEL_OFF */ |
elmot | 1:d0dfbce63a89 | 385 | case BATTERYLEVEL_OFF: |
elmot | 1:d0dfbce63a89 | 386 | /* Set BAR0 & BAR2 off */ |
elmot | 1:d0dfbce63a89 | 387 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG | LCD_BAR2_SEG), 0); |
elmot | 1:d0dfbce63a89 | 388 | /* Set BAR1 & BAR3 off */ |
elmot | 1:d0dfbce63a89 | 389 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG | LCD_BAR3_SEG), 0); |
elmot | 1:d0dfbce63a89 | 390 | LCDBar = BATTERYLEVEL_OFF; |
elmot | 1:d0dfbce63a89 | 391 | break; |
elmot | 1:d0dfbce63a89 | 392 | |
elmot | 1:d0dfbce63a89 | 393 | /* BARLEVEL 1/4 */ |
elmot | 1:d0dfbce63a89 | 394 | case BATTERYLEVEL_1_4: |
elmot | 1:d0dfbce63a89 | 395 | /* Set BAR0 on & BAR2 off */ |
elmot | 1:d0dfbce63a89 | 396 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG | LCD_BAR2_SEG), LCD_BAR0_SEG); |
elmot | 1:d0dfbce63a89 | 397 | /* Set BAR1 & BAR3 off */ |
elmot | 1:d0dfbce63a89 | 398 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG | LCD_BAR3_SEG), 0); |
elmot | 1:d0dfbce63a89 | 399 | LCDBar = BATTERYLEVEL_1_4; |
elmot | 1:d0dfbce63a89 | 400 | break; |
elmot | 1:d0dfbce63a89 | 401 | |
elmot | 1:d0dfbce63a89 | 402 | /* BARLEVEL 1/2 */ |
elmot | 1:d0dfbce63a89 | 403 | case BATTERYLEVEL_1_2: |
elmot | 1:d0dfbce63a89 | 404 | /* Set BAR0 on & BAR2 off */ |
elmot | 1:d0dfbce63a89 | 405 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG | LCD_BAR2_SEG), LCD_BAR0_SEG); |
elmot | 1:d0dfbce63a89 | 406 | /* Set BAR1 on & BAR3 off */ |
elmot | 1:d0dfbce63a89 | 407 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG | LCD_BAR3_SEG), LCD_BAR1_SEG); |
elmot | 1:d0dfbce63a89 | 408 | LCDBar = BATTERYLEVEL_1_2; |
elmot | 1:d0dfbce63a89 | 409 | break; |
elmot | 1:d0dfbce63a89 | 410 | |
elmot | 1:d0dfbce63a89 | 411 | /* Battery Level 3/4 */ |
elmot | 1:d0dfbce63a89 | 412 | case BATTERYLEVEL_3_4: |
elmot | 1:d0dfbce63a89 | 413 | /* Set BAR0 & BAR2 on */ |
elmot | 1:d0dfbce63a89 | 414 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG | LCD_BAR2_SEG), (LCD_BAR0_SEG | LCD_BAR2_SEG)); |
elmot | 1:d0dfbce63a89 | 415 | /* Set BAR1 on & BAR3 off */ |
elmot | 1:d0dfbce63a89 | 416 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG | LCD_BAR3_SEG), LCD_BAR1_SEG); |
elmot | 1:d0dfbce63a89 | 417 | LCDBar = BATTERYLEVEL_3_4; |
elmot | 1:d0dfbce63a89 | 418 | break; |
elmot | 1:d0dfbce63a89 | 419 | |
elmot | 1:d0dfbce63a89 | 420 | /* BATTERYLEVEL_FULL */ |
elmot | 1:d0dfbce63a89 | 421 | case BATTERYLEVEL_FULL: |
elmot | 1:d0dfbce63a89 | 422 | /* Set BAR0 & BAR2 on */ |
elmot | 1:d0dfbce63a89 | 423 | HAL_LCD_Write(&LCDHandle, LCD_BAR0_2_COM, ~(LCD_BAR0_SEG | LCD_BAR2_SEG), (LCD_BAR0_SEG | LCD_BAR2_SEG)); |
elmot | 1:d0dfbce63a89 | 424 | /* Set BAR1 on & BAR3 on */ |
elmot | 1:d0dfbce63a89 | 425 | HAL_LCD_Write(&LCDHandle, LCD_BAR1_3_COM, ~(LCD_BAR1_SEG | LCD_BAR3_SEG), (LCD_BAR1_SEG | LCD_BAR3_SEG)); |
elmot | 1:d0dfbce63a89 | 426 | LCDBar = BATTERYLEVEL_FULL; |
elmot | 1:d0dfbce63a89 | 427 | break; |
elmot | 1:d0dfbce63a89 | 428 | |
elmot | 1:d0dfbce63a89 | 429 | default: |
elmot | 1:d0dfbce63a89 | 430 | break; |
elmot | 1:d0dfbce63a89 | 431 | } |
elmot | 1:d0dfbce63a89 | 432 | |
elmot | 1:d0dfbce63a89 | 433 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 434 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 435 | } |
elmot | 1:d0dfbce63a89 | 436 | |
elmot | 1:d0dfbce63a89 | 437 | /** |
elmot | 1:d0dfbce63a89 | 438 | * @brief Write a character in the LCD RAM buffer. |
elmot | 1:d0dfbce63a89 | 439 | * @param ch: The character to display. |
elmot | 1:d0dfbce63a89 | 440 | * @param Point: A point to add in front of char. |
elmot | 1:d0dfbce63a89 | 441 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 442 | * @arg POINT_OFF: No point to add in front of char. |
elmot | 1:d0dfbce63a89 | 443 | * @arg POINT_ON: Add a point in front of char. |
elmot | 1:d0dfbce63a89 | 444 | * @param Colon: Flag indicating if a colon character has to be added in front |
elmot | 1:d0dfbce63a89 | 445 | * of displayed character. |
elmot | 1:d0dfbce63a89 | 446 | * This parameter can be one of the following values: |
elmot | 1:d0dfbce63a89 | 447 | * @arg DOUBLEPOINT_OFF: No colon to add in back of char. |
elmot | 1:d0dfbce63a89 | 448 | * @arg DOUBLEPOINT_ON: Add an colon in back of char. |
elmot | 1:d0dfbce63a89 | 449 | * @param Position: Position in the LCD of the character to write. |
elmot | 1:d0dfbce63a89 | 450 | * This parameter can be any value in range [1:6]. |
elmot | 1:d0dfbce63a89 | 451 | * @retval None |
elmot | 1:d0dfbce63a89 | 452 | * @note Required preconditions: The LCD should be cleared before to start the |
elmot | 1:d0dfbce63a89 | 453 | * write operation. |
elmot | 1:d0dfbce63a89 | 454 | */ |
elmot | 1:d0dfbce63a89 | 455 | void BSP_LCD_GLASS_DisplayChar(uint8_t* ch, Point_Typedef Point, DoublePoint_Typedef Colon, DigitPosition_Typedef Position) |
elmot | 1:d0dfbce63a89 | 456 | { |
elmot | 1:d0dfbce63a89 | 457 | WriteChar(ch, Point, Colon, Position); |
elmot | 1:d0dfbce63a89 | 458 | |
elmot | 1:d0dfbce63a89 | 459 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 460 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 461 | } |
elmot | 1:d0dfbce63a89 | 462 | |
elmot | 1:d0dfbce63a89 | 463 | /** |
elmot | 1:d0dfbce63a89 | 464 | * @brief Write a character string in the LCD RAM buffer. |
elmot | 1:d0dfbce63a89 | 465 | * @param ptr: Pointer to string to display on the LCD Glass. |
elmot | 1:d0dfbce63a89 | 466 | * @retval None |
elmot | 1:d0dfbce63a89 | 467 | */ |
elmot | 1:d0dfbce63a89 | 468 | void BSP_LCD_GLASS_DisplayString(uint8_t* ptr) |
elmot | 1:d0dfbce63a89 | 469 | { |
elmot | 1:d0dfbce63a89 | 470 | DigitPosition_Typedef position = LCD_DIGIT_POSITION_1; |
elmot | 1:d0dfbce63a89 | 471 | |
elmot | 1:d0dfbce63a89 | 472 | /* Send the string character by character on lCD */ |
elmot | 1:d0dfbce63a89 | 473 | while ((*ptr != 0) & (position <= LCD_DIGIT_POSITION_6)) |
elmot | 1:d0dfbce63a89 | 474 | { |
elmot | 1:d0dfbce63a89 | 475 | /* Write one character on LCD */ |
elmot | 1:d0dfbce63a89 | 476 | WriteChar(ptr, POINT_OFF, DOUBLEPOINT_OFF, position); |
elmot | 1:d0dfbce63a89 | 477 | |
elmot | 1:d0dfbce63a89 | 478 | /* Point on the next character */ |
elmot | 1:d0dfbce63a89 | 479 | ptr++; |
elmot | 1:d0dfbce63a89 | 480 | |
elmot | 1:d0dfbce63a89 | 481 | /* Increment the character counter */ |
elmot | 1:d0dfbce63a89 | 482 | position++; |
elmot | 1:d0dfbce63a89 | 483 | } |
elmot | 1:d0dfbce63a89 | 484 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 485 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 486 | } |
elmot | 1:d0dfbce63a89 | 487 | |
elmot | 1:d0dfbce63a89 | 488 | /** |
elmot | 1:d0dfbce63a89 | 489 | * @brief Write a character string with decimal point in the LCD RAM buffer. |
elmot | 1:d0dfbce63a89 | 490 | * @param ptr: Pointer to string to display on the LCD Glass. |
elmot | 1:d0dfbce63a89 | 491 | * @retval None |
elmot | 1:d0dfbce63a89 | 492 | * @note Required preconditions: Char is ASCCI value "ORed" with decimal point or Colon flag |
elmot | 1:d0dfbce63a89 | 493 | */ |
elmot | 1:d0dfbce63a89 | 494 | void BSP_LCD_GLASS_DisplayStrDeci(uint16_t* ptr) |
elmot | 1:d0dfbce63a89 | 495 | { |
elmot | 1:d0dfbce63a89 | 496 | DigitPosition_Typedef index = LCD_DIGIT_POSITION_1; |
elmot | 1:d0dfbce63a89 | 497 | uint8_t tmpchar = 0; |
elmot | 1:d0dfbce63a89 | 498 | |
elmot | 1:d0dfbce63a89 | 499 | /* Send the string character by character on lCD */ |
elmot | 1:d0dfbce63a89 | 500 | while((*ptr != 0) & (index <= LCD_DIGIT_POSITION_6)) |
elmot | 1:d0dfbce63a89 | 501 | { |
elmot | 1:d0dfbce63a89 | 502 | tmpchar = (*ptr) & 0x00FF; |
elmot | 1:d0dfbce63a89 | 503 | |
elmot | 1:d0dfbce63a89 | 504 | switch((*ptr) & 0xF000) |
elmot | 1:d0dfbce63a89 | 505 | { |
elmot | 1:d0dfbce63a89 | 506 | case DOT: |
elmot | 1:d0dfbce63a89 | 507 | /* Write one character on LCD with decimal point */ |
elmot | 1:d0dfbce63a89 | 508 | WriteChar(&tmpchar, POINT_ON, DOUBLEPOINT_OFF, index); |
elmot | 1:d0dfbce63a89 | 509 | break; |
elmot | 1:d0dfbce63a89 | 510 | case DOUBLE_DOT: |
elmot | 1:d0dfbce63a89 | 511 | /* Write one character on LCD with decimal point */ |
elmot | 1:d0dfbce63a89 | 512 | WriteChar(&tmpchar, POINT_OFF, DOUBLEPOINT_ON, index); |
elmot | 1:d0dfbce63a89 | 513 | break; |
elmot | 1:d0dfbce63a89 | 514 | default: |
elmot | 1:d0dfbce63a89 | 515 | WriteChar(&tmpchar, POINT_OFF, DOUBLEPOINT_OFF, index); |
elmot | 1:d0dfbce63a89 | 516 | break; |
elmot | 1:d0dfbce63a89 | 517 | }/* Point on the next character */ |
elmot | 1:d0dfbce63a89 | 518 | ptr++; |
elmot | 1:d0dfbce63a89 | 519 | |
elmot | 1:d0dfbce63a89 | 520 | /* Increment the character counter */ |
elmot | 1:d0dfbce63a89 | 521 | index++; |
elmot | 1:d0dfbce63a89 | 522 | } |
elmot | 1:d0dfbce63a89 | 523 | /* Update the LCD display */ |
elmot | 1:d0dfbce63a89 | 524 | HAL_LCD_UpdateDisplayRequest(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 525 | } |
elmot | 1:d0dfbce63a89 | 526 | |
elmot | 1:d0dfbce63a89 | 527 | /** |
elmot | 1:d0dfbce63a89 | 528 | * @brief Clear the whole LCD RAM buffer. |
elmot | 1:d0dfbce63a89 | 529 | * @retval None |
elmot | 1:d0dfbce63a89 | 530 | */ |
elmot | 1:d0dfbce63a89 | 531 | void BSP_LCD_GLASS_Clear(void) |
elmot | 1:d0dfbce63a89 | 532 | { |
elmot | 1:d0dfbce63a89 | 533 | HAL_LCD_Clear(&LCDHandle); |
elmot | 1:d0dfbce63a89 | 534 | } |
elmot | 1:d0dfbce63a89 | 535 | |
elmot | 1:d0dfbce63a89 | 536 | /** |
elmot | 1:d0dfbce63a89 | 537 | * @brief Display a string in scrolling mode |
elmot | 1:d0dfbce63a89 | 538 | * @param ptr: Pointer to string to display on the LCD Glass. |
elmot | 1:d0dfbce63a89 | 539 | * @param nScroll: Specifies how many time the message will be scrolled |
elmot | 1:d0dfbce63a89 | 540 | * @param ScrollSpeed : Specifies the speed of the scroll, low value gives |
elmot | 1:d0dfbce63a89 | 541 | * higher speed |
elmot | 1:d0dfbce63a89 | 542 | * @retval None |
elmot | 1:d0dfbce63a89 | 543 | * @note Required preconditions: The LCD should be cleared before to start the |
elmot | 1:d0dfbce63a89 | 544 | * write operation. |
elmot | 1:d0dfbce63a89 | 545 | */ |
elmot | 1:d0dfbce63a89 | 546 | void BSP_LCD_GLASS_ScrollSentence(uint8_t* ptr, uint16_t nScroll, uint16_t ScrollSpeed) |
elmot | 1:d0dfbce63a89 | 547 | { |
elmot | 1:d0dfbce63a89 | 548 | uint8_t repetition = 0, nbrchar = 0, sizestr = 0; |
elmot | 1:d0dfbce63a89 | 549 | uint8_t* ptr1; |
elmot | 1:d0dfbce63a89 | 550 | uint8_t str[6] = ""; |
elmot | 1:d0dfbce63a89 | 551 | |
elmot | 1:d0dfbce63a89 | 552 | /* Reset interrupt variable in case key was press before entering function */ |
elmot | 1:d0dfbce63a89 | 553 | bLCDGlass_KeyPressed = 0; |
elmot | 1:d0dfbce63a89 | 554 | |
elmot | 1:d0dfbce63a89 | 555 | if(ptr == 0) |
elmot | 1:d0dfbce63a89 | 556 | { |
elmot | 1:d0dfbce63a89 | 557 | return; |
elmot | 1:d0dfbce63a89 | 558 | } |
elmot | 1:d0dfbce63a89 | 559 | |
elmot | 1:d0dfbce63a89 | 560 | /* To calculate end of string */ |
elmot | 1:d0dfbce63a89 | 561 | for(ptr1 = ptr, sizestr = 0; *ptr1 != 0; sizestr++, ptr1++); |
elmot | 1:d0dfbce63a89 | 562 | |
elmot | 1:d0dfbce63a89 | 563 | ptr1 = ptr; |
elmot | 1:d0dfbce63a89 | 564 | |
elmot | 1:d0dfbce63a89 | 565 | BSP_LCD_GLASS_DisplayString(str); |
elmot | 1:d0dfbce63a89 | 566 | //HAL_Delay(ScrollSpeed); |
elmot | 1:d0dfbce63a89 | 567 | wait_ms(ScrollSpeed); |
elmot | 1:d0dfbce63a89 | 568 | |
elmot | 1:d0dfbce63a89 | 569 | /* To shift the string for scrolling display*/ |
elmot | 1:d0dfbce63a89 | 570 | for (repetition = 0; repetition < nScroll; repetition++) |
elmot | 1:d0dfbce63a89 | 571 | { |
elmot | 1:d0dfbce63a89 | 572 | for(nbrchar = 0; nbrchar < sizestr; nbrchar++) |
elmot | 1:d0dfbce63a89 | 573 | { |
elmot | 1:d0dfbce63a89 | 574 | *(str) =* (ptr1+((nbrchar+1)%sizestr)); |
elmot | 1:d0dfbce63a89 | 575 | *(str+1) =* (ptr1+((nbrchar+2)%sizestr)); |
elmot | 1:d0dfbce63a89 | 576 | *(str+2) =* (ptr1+((nbrchar+3)%sizestr)); |
elmot | 1:d0dfbce63a89 | 577 | *(str+3) =* (ptr1+((nbrchar+4)%sizestr)); |
elmot | 1:d0dfbce63a89 | 578 | *(str+4) =* (ptr1+((nbrchar+5)%sizestr)); |
elmot | 1:d0dfbce63a89 | 579 | *(str+5) =* (ptr1+((nbrchar+6)%sizestr)); |
elmot | 1:d0dfbce63a89 | 580 | BSP_LCD_GLASS_Clear(); |
elmot | 1:d0dfbce63a89 | 581 | BSP_LCD_GLASS_DisplayString(str); |
elmot | 1:d0dfbce63a89 | 582 | |
elmot | 1:d0dfbce63a89 | 583 | /* user button pressed stop the scrolling sentence */ |
elmot | 1:d0dfbce63a89 | 584 | if(bLCDGlass_KeyPressed) |
elmot | 1:d0dfbce63a89 | 585 | { |
elmot | 1:d0dfbce63a89 | 586 | bLCDGlass_KeyPressed = 0; |
elmot | 1:d0dfbce63a89 | 587 | return; |
elmot | 1:d0dfbce63a89 | 588 | } |
elmot | 1:d0dfbce63a89 | 589 | //HAL_Delay(ScrollSpeed); |
elmot | 1:d0dfbce63a89 | 590 | wait_ms(ScrollSpeed); |
elmot | 1:d0dfbce63a89 | 591 | } |
elmot | 1:d0dfbce63a89 | 592 | } |
elmot | 1:d0dfbce63a89 | 593 | } |
elmot | 1:d0dfbce63a89 | 594 | |
elmot | 1:d0dfbce63a89 | 595 | /** |
elmot | 1:d0dfbce63a89 | 596 | * @} |
elmot | 1:d0dfbce63a89 | 597 | */ |
elmot | 1:d0dfbce63a89 | 598 | |
elmot | 1:d0dfbce63a89 | 599 | /** @addtogroup STM32L476G_DISCOVERY_LCD_Private_Functions |
elmot | 1:d0dfbce63a89 | 600 | * @{ |
elmot | 1:d0dfbce63a89 | 601 | */ |
elmot | 1:d0dfbce63a89 | 602 | |
elmot | 1:d0dfbce63a89 | 603 | /** |
elmot | 1:d0dfbce63a89 | 604 | * @brief Initialize the LCD MSP. |
elmot | 1:d0dfbce63a89 | 605 | * @param hlcd: LCD handle |
elmot | 1:d0dfbce63a89 | 606 | * @retval None |
elmot | 1:d0dfbce63a89 | 607 | */ |
elmot | 1:d0dfbce63a89 | 608 | static void LCD_MspInit(LCD_HandleTypeDef *hlcd) |
elmot | 1:d0dfbce63a89 | 609 | { |
elmot | 1:d0dfbce63a89 | 610 | GPIO_InitTypeDef gpioinitstruct = {0}; |
elmot | 1:d0dfbce63a89 | 611 | RCC_OscInitTypeDef oscinitstruct = {0}; |
elmot | 1:d0dfbce63a89 | 612 | RCC_PeriphCLKInitTypeDef periphclkstruct = {0}; |
elmot | 1:d0dfbce63a89 | 613 | |
elmot | 1:d0dfbce63a89 | 614 | /*##-1- Enable PWR peripheral Clock #######################################*/ |
elmot | 1:d0dfbce63a89 | 615 | __HAL_RCC_PWR_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 616 | |
elmot | 1:d0dfbce63a89 | 617 | /*##-2- Configure LSE as RTC clock soucre ###################################*/ |
elmot | 1:d0dfbce63a89 | 618 | oscinitstruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; |
elmot | 1:d0dfbce63a89 | 619 | oscinitstruct.PLL.PLLState = RCC_PLL_NONE; |
elmot | 1:d0dfbce63a89 | 620 | oscinitstruct.LSEState = RCC_LSE_ON; |
elmot | 1:d0dfbce63a89 | 621 | if(HAL_RCC_OscConfig(&oscinitstruct) != HAL_OK) |
elmot | 1:d0dfbce63a89 | 622 | { |
elmot | 1:d0dfbce63a89 | 623 | while(1); |
elmot | 1:d0dfbce63a89 | 624 | } |
elmot | 1:d0dfbce63a89 | 625 | |
elmot | 1:d0dfbce63a89 | 626 | /*##-3- Select LSE as RTC clock source.##########################*/ |
elmot | 1:d0dfbce63a89 | 627 | /* Backup domain management is done in RCC function */ |
elmot | 1:d0dfbce63a89 | 628 | periphclkstruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; |
elmot | 1:d0dfbce63a89 | 629 | periphclkstruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; |
elmot | 1:d0dfbce63a89 | 630 | HAL_RCCEx_PeriphCLKConfig(&periphclkstruct); |
elmot | 1:d0dfbce63a89 | 631 | |
elmot | 1:d0dfbce63a89 | 632 | /*##-4- Enable LCD GPIO Clocks #############################################*/ |
elmot | 1:d0dfbce63a89 | 633 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 634 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 635 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 636 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 637 | |
elmot | 1:d0dfbce63a89 | 638 | |
elmot | 1:d0dfbce63a89 | 639 | /*##-5- Configure peripheral GPIO ##########################################*/ |
elmot | 1:d0dfbce63a89 | 640 | /* Configure Output for LCD */ |
elmot | 1:d0dfbce63a89 | 641 | /* Port A */ |
elmot | 1:d0dfbce63a89 | 642 | gpioinitstruct.Pin = LCD_GPIO_BANKA_PINS; |
elmot | 1:d0dfbce63a89 | 643 | gpioinitstruct.Mode = GPIO_MODE_AF_PP; |
elmot | 1:d0dfbce63a89 | 644 | gpioinitstruct.Pull = GPIO_NOPULL; |
elmot | 1:d0dfbce63a89 | 645 | gpioinitstruct.Speed = GPIO_SPEED_HIGH; |
elmot | 1:d0dfbce63a89 | 646 | gpioinitstruct.Alternate = GPIO_AF11_LCD; |
elmot | 1:d0dfbce63a89 | 647 | HAL_GPIO_Init(GPIOA, &gpioinitstruct); |
elmot | 1:d0dfbce63a89 | 648 | |
elmot | 1:d0dfbce63a89 | 649 | /* Port B */ |
elmot | 1:d0dfbce63a89 | 650 | gpioinitstruct.Pin = LCD_GPIO_BANKB_PINS; |
elmot | 1:d0dfbce63a89 | 651 | HAL_GPIO_Init(GPIOB, &gpioinitstruct); |
elmot | 1:d0dfbce63a89 | 652 | |
elmot | 1:d0dfbce63a89 | 653 | /* Port C*/ |
elmot | 1:d0dfbce63a89 | 654 | gpioinitstruct.Pin = LCD_GPIO_BANKC_PINS; |
elmot | 1:d0dfbce63a89 | 655 | HAL_GPIO_Init(GPIOC, &gpioinitstruct); |
elmot | 1:d0dfbce63a89 | 656 | |
elmot | 1:d0dfbce63a89 | 657 | /* Port D */ |
elmot | 1:d0dfbce63a89 | 658 | gpioinitstruct.Pin = LCD_GPIO_BANKD_PINS; |
elmot | 1:d0dfbce63a89 | 659 | HAL_GPIO_Init(GPIOD, &gpioinitstruct); |
elmot | 1:d0dfbce63a89 | 660 | |
elmot | 1:d0dfbce63a89 | 661 | /* Wait for the external capacitor Cext which is connected to the VLCD pin is charged |
elmot | 1:d0dfbce63a89 | 662 | (approximately 2ms for Cext=1uF) */ |
elmot | 1:d0dfbce63a89 | 663 | //HAL_Delay(2); |
elmot | 1:d0dfbce63a89 | 664 | wait_ms(2); |
elmot | 1:d0dfbce63a89 | 665 | |
elmot | 1:d0dfbce63a89 | 666 | /*##-6- Enable LCD peripheral Clock ########################################*/ |
elmot | 1:d0dfbce63a89 | 667 | __HAL_RCC_LCD_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 668 | } |
elmot | 1:d0dfbce63a89 | 669 | |
elmot | 1:d0dfbce63a89 | 670 | /** |
elmot | 1:d0dfbce63a89 | 671 | * @brief DeInitialize the LCD MSP. |
elmot | 1:d0dfbce63a89 | 672 | * @param hlcd: LCD handle |
elmot | 1:d0dfbce63a89 | 673 | * @retval None |
elmot | 1:d0dfbce63a89 | 674 | */ |
elmot | 1:d0dfbce63a89 | 675 | static void LCD_MspDeInit(LCD_HandleTypeDef *hlcd) |
elmot | 1:d0dfbce63a89 | 676 | { |
elmot | 1:d0dfbce63a89 | 677 | uint32_t gpiopin = 0; |
elmot | 1:d0dfbce63a89 | 678 | |
elmot | 1:d0dfbce63a89 | 679 | /*##-1- Enable LCD GPIO Clocks #############################################*/ |
elmot | 1:d0dfbce63a89 | 680 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 681 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 682 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 683 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
elmot | 1:d0dfbce63a89 | 684 | |
elmot | 1:d0dfbce63a89 | 685 | /*##-1- Configure peripheral GPIO ##########################################*/ |
elmot | 1:d0dfbce63a89 | 686 | /* Configure Output for LCD */ |
elmot | 1:d0dfbce63a89 | 687 | /* Port A */ |
elmot | 1:d0dfbce63a89 | 688 | gpiopin = LCD_GPIO_BANKA_PINS; |
elmot | 1:d0dfbce63a89 | 689 | HAL_GPIO_DeInit(GPIOA, gpiopin); |
elmot | 1:d0dfbce63a89 | 690 | |
elmot | 1:d0dfbce63a89 | 691 | /* Port B */ |
elmot | 1:d0dfbce63a89 | 692 | gpiopin = LCD_GPIO_BANKB_PINS; |
elmot | 1:d0dfbce63a89 | 693 | HAL_GPIO_DeInit(GPIOB, gpiopin); |
elmot | 1:d0dfbce63a89 | 694 | |
elmot | 1:d0dfbce63a89 | 695 | /* Port C*/ |
elmot | 1:d0dfbce63a89 | 696 | gpiopin = LCD_GPIO_BANKC_PINS; |
elmot | 1:d0dfbce63a89 | 697 | HAL_GPIO_DeInit(GPIOC, gpiopin); |
elmot | 1:d0dfbce63a89 | 698 | |
elmot | 1:d0dfbce63a89 | 699 | /* Port D */ |
elmot | 1:d0dfbce63a89 | 700 | gpiopin = LCD_GPIO_BANKD_PINS; |
elmot | 1:d0dfbce63a89 | 701 | HAL_GPIO_DeInit(GPIOD, gpiopin); |
elmot | 1:d0dfbce63a89 | 702 | |
elmot | 1:d0dfbce63a89 | 703 | /*##-5- Enable LCD peripheral Clock ########################################*/ |
elmot | 1:d0dfbce63a89 | 704 | __HAL_RCC_LCD_CLK_DISABLE(); |
elmot | 1:d0dfbce63a89 | 705 | } |
elmot | 1:d0dfbce63a89 | 706 | |
elmot | 1:d0dfbce63a89 | 707 | /** |
elmot | 1:d0dfbce63a89 | 708 | * @brief Convert an ascii char to the a LCD digit. |
elmot | 1:d0dfbce63a89 | 709 | * @param Char: a char to display. |
elmot | 1:d0dfbce63a89 | 710 | * @param Point: a point to add in front of char |
elmot | 1:d0dfbce63a89 | 711 | * This parameter can be: POINT_OFF or POINT_ON |
elmot | 1:d0dfbce63a89 | 712 | * @param Colon : flag indicating if a colon character has to be added in front |
elmot | 1:d0dfbce63a89 | 713 | * of displayed character. |
elmot | 1:d0dfbce63a89 | 714 | * This parameter can be: DOUBLEPOINT_OFF or DOUBLEPOINT_ON. |
elmot | 1:d0dfbce63a89 | 715 | * @retval None |
elmot | 1:d0dfbce63a89 | 716 | */ |
elmot | 1:d0dfbce63a89 | 717 | static void Convert(uint8_t* Char, Point_Typedef Point, DoublePoint_Typedef Colon) |
elmot | 1:d0dfbce63a89 | 718 | { |
elmot | 1:d0dfbce63a89 | 719 | uint16_t ch = 0 ; |
elmot | 1:d0dfbce63a89 | 720 | uint8_t loop = 0, index = 0; |
elmot | 1:d0dfbce63a89 | 721 | |
elmot | 1:d0dfbce63a89 | 722 | switch (*Char) |
elmot | 1:d0dfbce63a89 | 723 | { |
elmot | 1:d0dfbce63a89 | 724 | case ' ' : |
elmot | 1:d0dfbce63a89 | 725 | ch = 0x00; |
elmot | 1:d0dfbce63a89 | 726 | break; |
elmot | 1:d0dfbce63a89 | 727 | |
elmot | 1:d0dfbce63a89 | 728 | case '*': |
elmot | 1:d0dfbce63a89 | 729 | ch = C_STAR; |
elmot | 1:d0dfbce63a89 | 730 | break; |
elmot | 1:d0dfbce63a89 | 731 | |
elmot | 1:d0dfbce63a89 | 732 | case '(' : |
elmot | 1:d0dfbce63a89 | 733 | ch = C_OPENPARMAP; |
elmot | 1:d0dfbce63a89 | 734 | break; |
elmot | 1:d0dfbce63a89 | 735 | |
elmot | 1:d0dfbce63a89 | 736 | case ')' : |
elmot | 1:d0dfbce63a89 | 737 | ch = C_CLOSEPARMAP; |
elmot | 1:d0dfbce63a89 | 738 | break; |
elmot | 1:d0dfbce63a89 | 739 | |
elmot | 1:d0dfbce63a89 | 740 | case 'd' : |
elmot | 1:d0dfbce63a89 | 741 | ch = C_DMAP; |
elmot | 1:d0dfbce63a89 | 742 | break; |
elmot | 1:d0dfbce63a89 | 743 | |
elmot | 1:d0dfbce63a89 | 744 | case 'm' : |
elmot | 1:d0dfbce63a89 | 745 | ch = C_MMAP; |
elmot | 1:d0dfbce63a89 | 746 | break; |
elmot | 1:d0dfbce63a89 | 747 | |
elmot | 1:d0dfbce63a89 | 748 | case 'n' : |
elmot | 1:d0dfbce63a89 | 749 | ch = C_NMAP; |
elmot | 1:d0dfbce63a89 | 750 | break; |
elmot | 1:d0dfbce63a89 | 751 | |
elmot | 1:d0dfbce63a89 | 752 | case 'µ' : |
elmot | 1:d0dfbce63a89 | 753 | ch = C_UMAP; |
elmot | 1:d0dfbce63a89 | 754 | break; |
elmot | 1:d0dfbce63a89 | 755 | |
elmot | 1:d0dfbce63a89 | 756 | case '-' : |
elmot | 1:d0dfbce63a89 | 757 | ch = C_MINUS; |
elmot | 1:d0dfbce63a89 | 758 | break; |
elmot | 1:d0dfbce63a89 | 759 | |
elmot | 1:d0dfbce63a89 | 760 | case '+' : |
elmot | 1:d0dfbce63a89 | 761 | ch = C_PLUS; |
elmot | 1:d0dfbce63a89 | 762 | break; |
elmot | 1:d0dfbce63a89 | 763 | |
elmot | 1:d0dfbce63a89 | 764 | case '/' : |
elmot | 1:d0dfbce63a89 | 765 | ch = C_SLATCH; |
elmot | 1:d0dfbce63a89 | 766 | break; |
elmot | 1:d0dfbce63a89 | 767 | |
elmot | 1:d0dfbce63a89 | 768 | case '°' : |
elmot | 1:d0dfbce63a89 | 769 | ch = C_PERCENT_1; |
elmot | 1:d0dfbce63a89 | 770 | break; |
elmot | 1:d0dfbce63a89 | 771 | case '%' : |
elmot | 1:d0dfbce63a89 | 772 | ch = C_PERCENT_2; |
elmot | 1:d0dfbce63a89 | 773 | break; |
elmot | 1:d0dfbce63a89 | 774 | case 255 : |
elmot | 1:d0dfbce63a89 | 775 | ch = C_FULL; |
elmot | 1:d0dfbce63a89 | 776 | break ; |
elmot | 1:d0dfbce63a89 | 777 | |
elmot | 1:d0dfbce63a89 | 778 | case '0': |
elmot | 1:d0dfbce63a89 | 779 | case '1': |
elmot | 1:d0dfbce63a89 | 780 | case '2': |
elmot | 1:d0dfbce63a89 | 781 | case '3': |
elmot | 1:d0dfbce63a89 | 782 | case '4': |
elmot | 1:d0dfbce63a89 | 783 | case '5': |
elmot | 1:d0dfbce63a89 | 784 | case '6': |
elmot | 1:d0dfbce63a89 | 785 | case '7': |
elmot | 1:d0dfbce63a89 | 786 | case '8': |
elmot | 1:d0dfbce63a89 | 787 | case '9': |
elmot | 1:d0dfbce63a89 | 788 | ch = NumberMap[*Char - ASCII_CHAR_0]; |
elmot | 1:d0dfbce63a89 | 789 | break; |
elmot | 1:d0dfbce63a89 | 790 | |
elmot | 1:d0dfbce63a89 | 791 | default: |
elmot | 1:d0dfbce63a89 | 792 | /* The character Char is one letter in upper case*/ |
elmot | 1:d0dfbce63a89 | 793 | if ( (*Char < ASCII_CHAR_LEFT_OPEN_BRACKET) && (*Char > ASCII_CHAR_AT_SYMBOL) ) |
elmot | 1:d0dfbce63a89 | 794 | { |
elmot | 1:d0dfbce63a89 | 795 | ch = CapLetterMap[*Char - 'A']; |
elmot | 1:d0dfbce63a89 | 796 | } |
elmot | 1:d0dfbce63a89 | 797 | /* The character Char is one letter in lower case*/ |
elmot | 1:d0dfbce63a89 | 798 | if ( (*Char < ASCII_CHAR_LEFT_OPEN_BRACE) && ( *Char > ASCII_CHAR_APOSTROPHE) ) |
elmot | 1:d0dfbce63a89 | 799 | { |
elmot | 1:d0dfbce63a89 | 800 | ch = CapLetterMap[*Char - 'a']; |
elmot | 1:d0dfbce63a89 | 801 | } |
elmot | 1:d0dfbce63a89 | 802 | break; |
elmot | 1:d0dfbce63a89 | 803 | } |
elmot | 1:d0dfbce63a89 | 804 | |
elmot | 1:d0dfbce63a89 | 805 | /* Set the digital point can be displayed if the point is on */ |
elmot | 1:d0dfbce63a89 | 806 | if (Point == POINT_ON) |
elmot | 1:d0dfbce63a89 | 807 | { |
elmot | 1:d0dfbce63a89 | 808 | ch |= 0x0002; |
elmot | 1:d0dfbce63a89 | 809 | } |
elmot | 1:d0dfbce63a89 | 810 | |
elmot | 1:d0dfbce63a89 | 811 | /* Set the "COL" segment in the character that can be displayed if the colon is on */ |
elmot | 1:d0dfbce63a89 | 812 | if (Colon == DOUBLEPOINT_ON) |
elmot | 1:d0dfbce63a89 | 813 | { |
elmot | 1:d0dfbce63a89 | 814 | ch |= 0x0020; |
elmot | 1:d0dfbce63a89 | 815 | } |
elmot | 1:d0dfbce63a89 | 816 | |
elmot | 1:d0dfbce63a89 | 817 | for (loop = 12,index=0 ;index < 4; loop -= 4,index++) |
elmot | 1:d0dfbce63a89 | 818 | { |
elmot | 1:d0dfbce63a89 | 819 | Digit[index] = (ch >> loop) & 0x0f; /*To isolate the less significant digit */ |
elmot | 1:d0dfbce63a89 | 820 | } |
elmot | 1:d0dfbce63a89 | 821 | } |
elmot | 1:d0dfbce63a89 | 822 | |
elmot | 1:d0dfbce63a89 | 823 | /** |
elmot | 1:d0dfbce63a89 | 824 | * @brief Write a character in the LCD frame buffer. |
elmot | 1:d0dfbce63a89 | 825 | * @param ch: the character to display. |
elmot | 1:d0dfbce63a89 | 826 | * @param Point: a point to add in front of char |
elmot | 1:d0dfbce63a89 | 827 | * This parameter can be: POINT_OFF or POINT_ON |
elmot | 1:d0dfbce63a89 | 828 | * @param Colon: flag indicating if a colon character has to be added in front |
elmot | 1:d0dfbce63a89 | 829 | * of displayed character. |
elmot | 1:d0dfbce63a89 | 830 | * This parameter can be: DOUBLEPOINT_OFF or DOUBLEPOINT_ON. |
elmot | 1:d0dfbce63a89 | 831 | * @param Position: position in the LCD of the character to write [1:6] |
elmot | 1:d0dfbce63a89 | 832 | * @retval None |
elmot | 1:d0dfbce63a89 | 833 | */ |
elmot | 1:d0dfbce63a89 | 834 | static void WriteChar(uint8_t* ch, Point_Typedef Point, DoublePoint_Typedef Colon, DigitPosition_Typedef Position) |
elmot | 1:d0dfbce63a89 | 835 | { |
elmot | 1:d0dfbce63a89 | 836 | uint32_t data =0x00; |
elmot | 1:d0dfbce63a89 | 837 | /* To convert displayed character in segment in array digit */ |
elmot | 1:d0dfbce63a89 | 838 | Convert(ch, (Point_Typedef)Point, (DoublePoint_Typedef)Colon); |
elmot | 1:d0dfbce63a89 | 839 | |
elmot | 1:d0dfbce63a89 | 840 | switch (Position) |
elmot | 1:d0dfbce63a89 | 841 | { |
elmot | 1:d0dfbce63a89 | 842 | /* Position 1 on LCD (Digit1)*/ |
elmot | 1:d0dfbce63a89 | 843 | case LCD_DIGIT_POSITION_1: |
elmot | 1:d0dfbce63a89 | 844 | data = ((Digit[0] & 0x1) << LCD_SEG0_SHIFT) | (((Digit[0] & 0x2) >> 1) << LCD_SEG1_SHIFT) |
elmot | 1:d0dfbce63a89 | 845 | | (((Digit[0] & 0x4) >> 2) << LCD_SEG22_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG23_SHIFT); |
elmot | 1:d0dfbce63a89 | 846 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT1_COM0, LCD_DIGIT1_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 847 | |
elmot | 1:d0dfbce63a89 | 848 | data = ((Digit[1] & 0x1) << LCD_SEG0_SHIFT) | (((Digit[1] & 0x2) >> 1) << LCD_SEG1_SHIFT) |
elmot | 1:d0dfbce63a89 | 849 | | (((Digit[1] & 0x4) >> 2) << LCD_SEG22_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG23_SHIFT); |
elmot | 1:d0dfbce63a89 | 850 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT1_COM1, LCD_DIGIT1_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 851 | |
elmot | 1:d0dfbce63a89 | 852 | data = ((Digit[2] & 0x1) << LCD_SEG0_SHIFT) | (((Digit[2] & 0x2) >> 1) << LCD_SEG1_SHIFT) |
elmot | 1:d0dfbce63a89 | 853 | | (((Digit[2] & 0x4) >> 2) << LCD_SEG22_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG23_SHIFT); |
elmot | 1:d0dfbce63a89 | 854 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT1_COM2, LCD_DIGIT1_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 855 | |
elmot | 1:d0dfbce63a89 | 856 | data = ((Digit[3] & 0x1) << LCD_SEG0_SHIFT) | (((Digit[3] & 0x2) >> 1) << LCD_SEG1_SHIFT) |
elmot | 1:d0dfbce63a89 | 857 | | (((Digit[3] & 0x4) >> 2) << LCD_SEG22_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG23_SHIFT); |
elmot | 1:d0dfbce63a89 | 858 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT1_COM3, LCD_DIGIT1_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 859 | break; |
elmot | 1:d0dfbce63a89 | 860 | |
elmot | 1:d0dfbce63a89 | 861 | /* Position 2 on LCD (Digit2)*/ |
elmot | 1:d0dfbce63a89 | 862 | case LCD_DIGIT_POSITION_2: |
elmot | 1:d0dfbce63a89 | 863 | data = ((Digit[0] & 0x1) << LCD_SEG2_SHIFT) | (((Digit[0] & 0x2) >> 1) << LCD_SEG3_SHIFT) |
elmot | 1:d0dfbce63a89 | 864 | | (((Digit[0] & 0x4) >> 2) << LCD_SEG20_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG21_SHIFT); |
elmot | 1:d0dfbce63a89 | 865 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT2_COM0, LCD_DIGIT2_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 866 | |
elmot | 1:d0dfbce63a89 | 867 | data = ((Digit[1] & 0x1) << LCD_SEG2_SHIFT) | (((Digit[1] & 0x2) >> 1) << LCD_SEG3_SHIFT) |
elmot | 1:d0dfbce63a89 | 868 | | (((Digit[1] & 0x4) >> 2) << LCD_SEG20_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG21_SHIFT); |
elmot | 1:d0dfbce63a89 | 869 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT2_COM1, LCD_DIGIT2_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 870 | |
elmot | 1:d0dfbce63a89 | 871 | data = ((Digit[2] & 0x1) << LCD_SEG2_SHIFT) | (((Digit[2] & 0x2) >> 1) << LCD_SEG3_SHIFT) |
elmot | 1:d0dfbce63a89 | 872 | | (((Digit[2] & 0x4) >> 2) << LCD_SEG20_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG21_SHIFT); |
elmot | 1:d0dfbce63a89 | 873 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT2_COM2, LCD_DIGIT2_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 874 | |
elmot | 1:d0dfbce63a89 | 875 | data = ((Digit[3] & 0x1) << LCD_SEG2_SHIFT) | (((Digit[3] & 0x2) >> 1) << LCD_SEG3_SHIFT) |
elmot | 1:d0dfbce63a89 | 876 | | (((Digit[3] & 0x4) >> 2) << LCD_SEG20_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG21_SHIFT); |
elmot | 1:d0dfbce63a89 | 877 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT2_COM3, LCD_DIGIT2_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 878 | break; |
elmot | 1:d0dfbce63a89 | 879 | |
elmot | 1:d0dfbce63a89 | 880 | /* Position 3 on LCD (Digit3)*/ |
elmot | 1:d0dfbce63a89 | 881 | case LCD_DIGIT_POSITION_3: |
elmot | 1:d0dfbce63a89 | 882 | data = ((Digit[0] & 0x1) << LCD_SEG4_SHIFT) | (((Digit[0] & 0x2) >> 1) << LCD_SEG5_SHIFT) |
elmot | 1:d0dfbce63a89 | 883 | | (((Digit[0] & 0x4) >> 2) << LCD_SEG18_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG19_SHIFT); |
elmot | 1:d0dfbce63a89 | 884 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT3_COM0, LCD_DIGIT3_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 885 | |
elmot | 1:d0dfbce63a89 | 886 | data = ((Digit[1] & 0x1) << LCD_SEG4_SHIFT) | (((Digit[1] & 0x2) >> 1) << LCD_SEG5_SHIFT) |
elmot | 1:d0dfbce63a89 | 887 | | (((Digit[1] & 0x4) >> 2) << LCD_SEG18_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG19_SHIFT); |
elmot | 1:d0dfbce63a89 | 888 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT3_COM1, LCD_DIGIT3_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 889 | |
elmot | 1:d0dfbce63a89 | 890 | data = ((Digit[2] & 0x1) << LCD_SEG4_SHIFT) | (((Digit[2] & 0x2) >> 1) << LCD_SEG5_SHIFT) |
elmot | 1:d0dfbce63a89 | 891 | | (((Digit[2] & 0x4) >> 2) << LCD_SEG18_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG19_SHIFT); |
elmot | 1:d0dfbce63a89 | 892 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT3_COM2, LCD_DIGIT3_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 893 | |
elmot | 1:d0dfbce63a89 | 894 | data = ((Digit[3] & 0x1) << LCD_SEG4_SHIFT) | (((Digit[3] & 0x2) >> 1) << LCD_SEG5_SHIFT) |
elmot | 1:d0dfbce63a89 | 895 | | (((Digit[3] & 0x4) >> 2) << LCD_SEG18_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG19_SHIFT); |
elmot | 1:d0dfbce63a89 | 896 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT3_COM3, LCD_DIGIT3_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 897 | break; |
elmot | 1:d0dfbce63a89 | 898 | |
elmot | 1:d0dfbce63a89 | 899 | /* Position 4 on LCD (Digit4)*/ |
elmot | 1:d0dfbce63a89 | 900 | case LCD_DIGIT_POSITION_4: |
elmot | 1:d0dfbce63a89 | 901 | data = ((Digit[0] & 0x1) << LCD_SEG6_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG17_SHIFT); |
elmot | 1:d0dfbce63a89 | 902 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM0, LCD_DIGIT4_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 903 | |
elmot | 1:d0dfbce63a89 | 904 | data = (((Digit[0] & 0x2) >> 1) << LCD_SEG7_SHIFT) | (((Digit[0] & 0x4) >> 2) << LCD_SEG16_SHIFT); |
elmot | 1:d0dfbce63a89 | 905 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM0_1, LCD_DIGIT4_COM0_1_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 906 | |
elmot | 1:d0dfbce63a89 | 907 | data = ((Digit[1] & 0x1) << LCD_SEG6_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG17_SHIFT); |
elmot | 1:d0dfbce63a89 | 908 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM1, LCD_DIGIT4_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 909 | |
elmot | 1:d0dfbce63a89 | 910 | data = (((Digit[1] & 0x2) >> 1) << LCD_SEG7_SHIFT) | (((Digit[1] & 0x4) >> 2) << LCD_SEG16_SHIFT); |
elmot | 1:d0dfbce63a89 | 911 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM1_1, LCD_DIGIT4_COM1_1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 912 | |
elmot | 1:d0dfbce63a89 | 913 | data = ((Digit[2] & 0x1) << LCD_SEG6_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG17_SHIFT); |
elmot | 1:d0dfbce63a89 | 914 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM2, LCD_DIGIT4_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 915 | |
elmot | 1:d0dfbce63a89 | 916 | data = (((Digit[2] & 0x2) >> 1) << LCD_SEG7_SHIFT) | (((Digit[2] & 0x4) >> 2) << LCD_SEG16_SHIFT); |
elmot | 1:d0dfbce63a89 | 917 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM2_1, LCD_DIGIT4_COM2_1_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 918 | |
elmot | 1:d0dfbce63a89 | 919 | data = ((Digit[3] & 0x1) << LCD_SEG6_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG17_SHIFT); |
elmot | 1:d0dfbce63a89 | 920 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM3, LCD_DIGIT4_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 921 | |
elmot | 1:d0dfbce63a89 | 922 | data = (((Digit[3] & 0x2) >> 1) << LCD_SEG7_SHIFT) | (((Digit[3] & 0x4) >> 2) << LCD_SEG16_SHIFT); |
elmot | 1:d0dfbce63a89 | 923 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT4_COM3_1, LCD_DIGIT4_COM3_1_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 924 | break; |
elmot | 1:d0dfbce63a89 | 925 | |
elmot | 1:d0dfbce63a89 | 926 | /* Position 5 on LCD (Digit5)*/ |
elmot | 1:d0dfbce63a89 | 927 | case LCD_DIGIT_POSITION_5: |
elmot | 1:d0dfbce63a89 | 928 | data = (((Digit[0] & 0x2) >> 1) << LCD_SEG9_SHIFT) | (((Digit[0] & 0x4) >> 2) << LCD_SEG14_SHIFT); |
elmot | 1:d0dfbce63a89 | 929 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM0, LCD_DIGIT5_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 930 | |
elmot | 1:d0dfbce63a89 | 931 | data = ((Digit[0] & 0x1) << LCD_SEG8_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG15_SHIFT); |
elmot | 1:d0dfbce63a89 | 932 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM0_1, LCD_DIGIT5_COM0_1_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 933 | |
elmot | 1:d0dfbce63a89 | 934 | data = (((Digit[1] & 0x2) >> 1) << LCD_SEG9_SHIFT) | (((Digit[1] & 0x4) >> 2) << LCD_SEG14_SHIFT); |
elmot | 1:d0dfbce63a89 | 935 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM1, LCD_DIGIT5_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 936 | |
elmot | 1:d0dfbce63a89 | 937 | data = ((Digit[1] & 0x1) << LCD_SEG8_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG15_SHIFT); |
elmot | 1:d0dfbce63a89 | 938 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM1_1, LCD_DIGIT5_COM1_1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 939 | |
elmot | 1:d0dfbce63a89 | 940 | data = (((Digit[2] & 0x2) >> 1) << LCD_SEG9_SHIFT) | (((Digit[2] & 0x4) >> 2) << LCD_SEG14_SHIFT); |
elmot | 1:d0dfbce63a89 | 941 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM2, LCD_DIGIT5_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 942 | |
elmot | 1:d0dfbce63a89 | 943 | data = ((Digit[2] & 0x1) << LCD_SEG8_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG15_SHIFT); |
elmot | 1:d0dfbce63a89 | 944 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM2_1, LCD_DIGIT5_COM2_1_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 945 | |
elmot | 1:d0dfbce63a89 | 946 | data = (((Digit[3] & 0x2) >> 1) << LCD_SEG9_SHIFT) | (((Digit[3] & 0x4) >> 2) << LCD_SEG14_SHIFT); |
elmot | 1:d0dfbce63a89 | 947 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM3, LCD_DIGIT5_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 948 | |
elmot | 1:d0dfbce63a89 | 949 | data = ((Digit[3] & 0x1) << LCD_SEG8_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG15_SHIFT); |
elmot | 1:d0dfbce63a89 | 950 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT5_COM3_1, LCD_DIGIT5_COM3_1_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 951 | break; |
elmot | 1:d0dfbce63a89 | 952 | |
elmot | 1:d0dfbce63a89 | 953 | /* Position 6 on LCD (Digit6)*/ |
elmot | 1:d0dfbce63a89 | 954 | case LCD_DIGIT_POSITION_6: |
elmot | 1:d0dfbce63a89 | 955 | data = ((Digit[0] & 0x1) << LCD_SEG10_SHIFT) | (((Digit[0] & 0x2) >> 1) << LCD_SEG11_SHIFT) |
elmot | 1:d0dfbce63a89 | 956 | | (((Digit[0] & 0x4) >> 2) << LCD_SEG12_SHIFT) | (((Digit[0] & 0x8) >> 3) << LCD_SEG13_SHIFT); |
elmot | 1:d0dfbce63a89 | 957 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT6_COM0, LCD_DIGIT6_COM0_SEG_MASK, data); /* 1G 1B 1M 1E */ |
elmot | 1:d0dfbce63a89 | 958 | |
elmot | 1:d0dfbce63a89 | 959 | data = ((Digit[1] & 0x1) << LCD_SEG10_SHIFT) | (((Digit[1] & 0x2) >> 1) << LCD_SEG11_SHIFT) |
elmot | 1:d0dfbce63a89 | 960 | | (((Digit[1] & 0x4) >> 2) << LCD_SEG12_SHIFT) | (((Digit[1] & 0x8) >> 3) << LCD_SEG13_SHIFT); |
elmot | 1:d0dfbce63a89 | 961 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT6_COM1, LCD_DIGIT6_COM1_SEG_MASK, data) ; /* 1F 1A 1C 1D */ |
elmot | 1:d0dfbce63a89 | 962 | |
elmot | 1:d0dfbce63a89 | 963 | data = ((Digit[2] & 0x1) << LCD_SEG10_SHIFT) | (((Digit[2] & 0x2) >> 1) << LCD_SEG11_SHIFT) |
elmot | 1:d0dfbce63a89 | 964 | | (((Digit[2] & 0x4) >> 2) << LCD_SEG12_SHIFT) | (((Digit[2] & 0x8) >> 3) << LCD_SEG13_SHIFT); |
elmot | 1:d0dfbce63a89 | 965 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT6_COM2, LCD_DIGIT6_COM2_SEG_MASK, data) ; /* 1Q 1K 1Col 1P */ |
elmot | 1:d0dfbce63a89 | 966 | |
elmot | 1:d0dfbce63a89 | 967 | data = ((Digit[3] & 0x1) << LCD_SEG10_SHIFT) | (((Digit[3] & 0x2) >> 1) << LCD_SEG11_SHIFT) |
elmot | 1:d0dfbce63a89 | 968 | | (((Digit[3] & 0x4) >> 2) << LCD_SEG12_SHIFT) | (((Digit[3] & 0x8) >> 3) << LCD_SEG13_SHIFT); |
elmot | 1:d0dfbce63a89 | 969 | HAL_LCD_Write(&LCDHandle, LCD_DIGIT6_COM3, LCD_DIGIT6_COM3_SEG_MASK, data) ; /* 1H 1J 1DP 1N */ |
elmot | 1:d0dfbce63a89 | 970 | break; |
elmot | 1:d0dfbce63a89 | 971 | |
elmot | 1:d0dfbce63a89 | 972 | default: |
elmot | 1:d0dfbce63a89 | 973 | break; |
elmot | 1:d0dfbce63a89 | 974 | } |
elmot | 1:d0dfbce63a89 | 975 | } |
elmot | 1:d0dfbce63a89 | 976 | |
elmot | 1:d0dfbce63a89 | 977 | /** |
elmot | 1:d0dfbce63a89 | 978 | * @} |
elmot | 1:d0dfbce63a89 | 979 | */ |
elmot | 1:d0dfbce63a89 | 980 | |
elmot | 1:d0dfbce63a89 | 981 | /** |
elmot | 1:d0dfbce63a89 | 982 | * @} |
elmot | 1:d0dfbce63a89 | 983 | */ |
elmot | 1:d0dfbce63a89 | 984 | |
elmot | 1:d0dfbce63a89 | 985 | /** |
elmot | 1:d0dfbce63a89 | 986 | * @} |
elmot | 1:d0dfbce63a89 | 987 | */ |
elmot | 1:d0dfbce63a89 | 988 | |
elmot | 1:d0dfbce63a89 | 989 | /** |
elmot | 1:d0dfbce63a89 | 990 | * @} |
elmot | 1:d0dfbce63a89 | 991 | */ |
elmot | 1:d0dfbce63a89 | 992 | |
elmot | 1:d0dfbce63a89 | 993 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |