AudioRecord

Dependencies:   STM32L4xx_HAL_Driver CMSIS_DSP_401

Committer:
EricLew
Date:
Thu Nov 26 22:32:56 2015 +0000
Revision:
3:ec7e3c37fe80
Parent:
0:d4e5ad7ad71c
FFT is currently not working and commented out

Who changed what in which revision?

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