Paul Stinson / LCD_DISCO_L152C
Committer:
Stinno
Date:
Fri Jun 09 22:21:57 2017 +0000
Revision:
0:86d2c60451ff
Library for using LCD on stm32l152c-disco development board.

Who changed what in which revision?

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