TUKS MCU Introductory course / TUKS-COURSE-2-LED
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?

UserRevisionLine numberNew 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>&copy; 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****/