Senior Design: Sound Monitor / BSP

Dependencies:   CMSIS_STM32L4xx CMSIS_DSP_401 STM32L4xx_HAL_Driver

Dependents:   DiscoAudioRecord

Committer:
EricLew
Date:
Thu Nov 12 20:53:23 2015 +0000
Revision:
2:a9f205b30d61
Parent:
0:ad9dfc0179dc
commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricLew 0:ad9dfc0179dc 1 /**
EricLew 0:ad9dfc0179dc 2 ******************************************************************************
EricLew 0:ad9dfc0179dc 3 * @file st7735.c
EricLew 0:ad9dfc0179dc 4 * @author MCD Application Team
EricLew 0:ad9dfc0179dc 5 * @version V1.1.1
EricLew 0:ad9dfc0179dc 6 * @date 24-November-2014
EricLew 0:ad9dfc0179dc 7 * @brief This file includes the driver for ST7735 LCD mounted on the Adafruit
EricLew 0:ad9dfc0179dc 8 * 1.8" TFT LCD shield (reference ID 802).
EricLew 0:ad9dfc0179dc 9 ******************************************************************************
EricLew 0:ad9dfc0179dc 10 * @attention
EricLew 0:ad9dfc0179dc 11 *
EricLew 0:ad9dfc0179dc 12 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
EricLew 0:ad9dfc0179dc 13 *
EricLew 0:ad9dfc0179dc 14 * Redistribution and use in source and binary forms, with or without modification,
EricLew 0:ad9dfc0179dc 15 * are permitted provided that the following conditions are met:
EricLew 0:ad9dfc0179dc 16 * 1. Redistributions of source code must retain the above copyright notice,
EricLew 0:ad9dfc0179dc 17 * this list of conditions and the following disclaimer.
EricLew 0:ad9dfc0179dc 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
EricLew 0:ad9dfc0179dc 19 * this list of conditions and the following disclaimer in the documentation
EricLew 0:ad9dfc0179dc 20 * and/or other materials provided with the distribution.
EricLew 0:ad9dfc0179dc 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
EricLew 0:ad9dfc0179dc 22 * may be used to endorse or promote products derived from this software
EricLew 0:ad9dfc0179dc 23 * without specific prior written permission.
EricLew 0:ad9dfc0179dc 24 *
EricLew 0:ad9dfc0179dc 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
EricLew 0:ad9dfc0179dc 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
EricLew 0:ad9dfc0179dc 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
EricLew 0:ad9dfc0179dc 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
EricLew 0:ad9dfc0179dc 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
EricLew 0:ad9dfc0179dc 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
EricLew 0:ad9dfc0179dc 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
EricLew 0:ad9dfc0179dc 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
EricLew 0:ad9dfc0179dc 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
EricLew 0:ad9dfc0179dc 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
EricLew 0:ad9dfc0179dc 35 *
EricLew 0:ad9dfc0179dc 36 ******************************************************************************
EricLew 0:ad9dfc0179dc 37 */
EricLew 0:ad9dfc0179dc 38
EricLew 0:ad9dfc0179dc 39 /* Includes ------------------------------------------------------------------*/
EricLew 0:ad9dfc0179dc 40 #include "st7735.h"
EricLew 0:ad9dfc0179dc 41
EricLew 0:ad9dfc0179dc 42 /** @addtogroup BSP
EricLew 0:ad9dfc0179dc 43 * @{
EricLew 0:ad9dfc0179dc 44 */
EricLew 0:ad9dfc0179dc 45
EricLew 0:ad9dfc0179dc 46 /** @addtogroup Components
EricLew 0:ad9dfc0179dc 47 * @{
EricLew 0:ad9dfc0179dc 48 */
EricLew 0:ad9dfc0179dc 49
EricLew 0:ad9dfc0179dc 50 /** @addtogroup ST7735
EricLew 0:ad9dfc0179dc 51 * @brief This file provides a set of functions needed to drive the
EricLew 0:ad9dfc0179dc 52 * ST7735 LCD.
EricLew 0:ad9dfc0179dc 53 * @{
EricLew 0:ad9dfc0179dc 54 */
EricLew 0:ad9dfc0179dc 55
EricLew 0:ad9dfc0179dc 56 /** @defgroup ST7735_Private_TypesDefinitions
EricLew 0:ad9dfc0179dc 57 * @{
EricLew 0:ad9dfc0179dc 58 */
EricLew 0:ad9dfc0179dc 59
EricLew 0:ad9dfc0179dc 60 /**
EricLew 0:ad9dfc0179dc 61 * @}
EricLew 0:ad9dfc0179dc 62 */
EricLew 0:ad9dfc0179dc 63
EricLew 0:ad9dfc0179dc 64 /** @defgroup ST7735_Private_Defines
EricLew 0:ad9dfc0179dc 65 * @{
EricLew 0:ad9dfc0179dc 66 */
EricLew 0:ad9dfc0179dc 67
EricLew 0:ad9dfc0179dc 68 /**
EricLew 0:ad9dfc0179dc 69 * @}
EricLew 0:ad9dfc0179dc 70 */
EricLew 0:ad9dfc0179dc 71
EricLew 0:ad9dfc0179dc 72 /** @defgroup ST7735_Private_Macros
EricLew 0:ad9dfc0179dc 73 * @{
EricLew 0:ad9dfc0179dc 74 */
EricLew 0:ad9dfc0179dc 75
EricLew 0:ad9dfc0179dc 76 /**
EricLew 0:ad9dfc0179dc 77 * @}
EricLew 0:ad9dfc0179dc 78 */
EricLew 0:ad9dfc0179dc 79
EricLew 0:ad9dfc0179dc 80 /** @defgroup ST7735_Private_Variables
EricLew 0:ad9dfc0179dc 81 * @{
EricLew 0:ad9dfc0179dc 82 */
EricLew 0:ad9dfc0179dc 83
EricLew 0:ad9dfc0179dc 84
EricLew 0:ad9dfc0179dc 85 LCD_DrvTypeDef st7735_drv =
EricLew 0:ad9dfc0179dc 86 {
EricLew 0:ad9dfc0179dc 87 st7735_Init,
EricLew 0:ad9dfc0179dc 88 0,
EricLew 0:ad9dfc0179dc 89 st7735_DisplayOn,
EricLew 0:ad9dfc0179dc 90 st7735_DisplayOff,
EricLew 0:ad9dfc0179dc 91 st7735_SetCursor,
EricLew 0:ad9dfc0179dc 92 st7735_WritePixel,
EricLew 0:ad9dfc0179dc 93 0,
EricLew 0:ad9dfc0179dc 94 st7735_SetDisplayWindow,
EricLew 0:ad9dfc0179dc 95 st7735_DrawHLine,
EricLew 0:ad9dfc0179dc 96 st7735_DrawVLine,
EricLew 0:ad9dfc0179dc 97 st7735_GetLcdPixelWidth,
EricLew 0:ad9dfc0179dc 98 st7735_GetLcdPixelHeight,
EricLew 0:ad9dfc0179dc 99 st7735_DrawBitmap,
EricLew 0:ad9dfc0179dc 100 };
EricLew 0:ad9dfc0179dc 101
EricLew 0:ad9dfc0179dc 102 static uint16_t ArrayRGB[320] = {0};
EricLew 0:ad9dfc0179dc 103
EricLew 0:ad9dfc0179dc 104 /**
EricLew 0:ad9dfc0179dc 105 * @}
EricLew 0:ad9dfc0179dc 106 */
EricLew 0:ad9dfc0179dc 107
EricLew 0:ad9dfc0179dc 108 /** @defgroup ST7735_Private_FunctionPrototypes
EricLew 0:ad9dfc0179dc 109 * @{
EricLew 0:ad9dfc0179dc 110 */
EricLew 0:ad9dfc0179dc 111
EricLew 0:ad9dfc0179dc 112 /**
EricLew 0:ad9dfc0179dc 113 * @}
EricLew 0:ad9dfc0179dc 114 */
EricLew 0:ad9dfc0179dc 115
EricLew 0:ad9dfc0179dc 116 /** @defgroup ST7735_Private_Functions
EricLew 0:ad9dfc0179dc 117 * @{
EricLew 0:ad9dfc0179dc 118 */
EricLew 0:ad9dfc0179dc 119
EricLew 0:ad9dfc0179dc 120 /**
EricLew 0:ad9dfc0179dc 121 * @brief Initialize the ST7735 LCD Component.
EricLew 0:ad9dfc0179dc 122 * @param None
EricLew 0:ad9dfc0179dc 123 * @retval None
EricLew 0:ad9dfc0179dc 124 */
EricLew 0:ad9dfc0179dc 125 void st7735_Init(void)
EricLew 0:ad9dfc0179dc 126 {
EricLew 0:ad9dfc0179dc 127 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 128
EricLew 0:ad9dfc0179dc 129 /* Initialize ST7735 low level bus layer -----------------------------------*/
EricLew 0:ad9dfc0179dc 130 LCD_IO_Init();
EricLew 0:ad9dfc0179dc 131 /* Out of sleep mode, 0 args, no delay */
EricLew 0:ad9dfc0179dc 132 st7735_WriteReg(LCD_REG_17, 0x00);
EricLew 0:ad9dfc0179dc 133 /* Frame rate ctrl - normal mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)*/
EricLew 0:ad9dfc0179dc 134 LCD_IO_WriteReg(LCD_REG_177);
EricLew 0:ad9dfc0179dc 135 data = 0x01;
EricLew 0:ad9dfc0179dc 136 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 137 data = 0x2C;
EricLew 0:ad9dfc0179dc 138 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 139 data = 0x2D;
EricLew 0:ad9dfc0179dc 140 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 141 /* Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D) */
EricLew 0:ad9dfc0179dc 142 st7735_WriteReg(LCD_REG_178, 0x01);
EricLew 0:ad9dfc0179dc 143 st7735_WriteReg(LCD_REG_178, 0x2C);
EricLew 0:ad9dfc0179dc 144 st7735_WriteReg(LCD_REG_178, 0x2D);
EricLew 0:ad9dfc0179dc 145 /* Frame rate ctrl - partial mode, 6 args: Dot inversion mode, Line inversion mode */
EricLew 0:ad9dfc0179dc 146 st7735_WriteReg(LCD_REG_179, 0x01);
EricLew 0:ad9dfc0179dc 147 st7735_WriteReg(LCD_REG_179, 0x2C);
EricLew 0:ad9dfc0179dc 148 st7735_WriteReg(LCD_REG_179, 0x2D);
EricLew 0:ad9dfc0179dc 149 st7735_WriteReg(LCD_REG_179, 0x01);
EricLew 0:ad9dfc0179dc 150 st7735_WriteReg(LCD_REG_179, 0x2C);
EricLew 0:ad9dfc0179dc 151 st7735_WriteReg(LCD_REG_179, 0x2D);
EricLew 0:ad9dfc0179dc 152 /* Display inversion ctrl, 1 arg, no delay: No inversion */
EricLew 0:ad9dfc0179dc 153 st7735_WriteReg(LCD_REG_180, 0x07);
EricLew 0:ad9dfc0179dc 154 /* Power control, 3 args, no delay: -4.6V , AUTO mode */
EricLew 0:ad9dfc0179dc 155 st7735_WriteReg(LCD_REG_192, 0xA2);
EricLew 0:ad9dfc0179dc 156 st7735_WriteReg(LCD_REG_192, 0x02);
EricLew 0:ad9dfc0179dc 157 st7735_WriteReg(LCD_REG_192, 0x84);
EricLew 0:ad9dfc0179dc 158 /* Power control, 1 arg, no delay: VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD */
EricLew 0:ad9dfc0179dc 159 st7735_WriteReg(LCD_REG_193, 0xC5);
EricLew 0:ad9dfc0179dc 160 /* Power control, 2 args, no delay: Opamp current small, Boost frequency */
EricLew 0:ad9dfc0179dc 161 st7735_WriteReg(LCD_REG_194, 0x0A);
EricLew 0:ad9dfc0179dc 162 st7735_WriteReg(LCD_REG_194, 0x00);
EricLew 0:ad9dfc0179dc 163 /* Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low */
EricLew 0:ad9dfc0179dc 164 st7735_WriteReg(LCD_REG_195, 0x8A);
EricLew 0:ad9dfc0179dc 165 st7735_WriteReg(LCD_REG_195, 0x2A);
EricLew 0:ad9dfc0179dc 166 /* Power control, 2 args, no delay */
EricLew 0:ad9dfc0179dc 167 st7735_WriteReg(LCD_REG_196, 0x8A);
EricLew 0:ad9dfc0179dc 168 st7735_WriteReg(LCD_REG_196, 0xEE);
EricLew 0:ad9dfc0179dc 169 /* Power control, 1 arg, no delay */
EricLew 0:ad9dfc0179dc 170 st7735_WriteReg(LCD_REG_197, 0x0E);
EricLew 0:ad9dfc0179dc 171 /* Don't invert display, no args, no delay */
EricLew 0:ad9dfc0179dc 172 LCD_IO_WriteReg(LCD_REG_32);
EricLew 0:ad9dfc0179dc 173 /* Set color mode, 1 arg, no delay: 16-bit color */
EricLew 0:ad9dfc0179dc 174 st7735_WriteReg(LCD_REG_58, 0x05);
EricLew 0:ad9dfc0179dc 175 /* Column addr set, 4 args, no delay: XSTART = 0, XEND = 127 */
EricLew 0:ad9dfc0179dc 176 LCD_IO_WriteReg(LCD_REG_42);
EricLew 0:ad9dfc0179dc 177 data = 0x00;
EricLew 0:ad9dfc0179dc 178 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 179 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 180 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 181 data = 0x7F;
EricLew 0:ad9dfc0179dc 182 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 183 /* Row addr set, 4 args, no delay: YSTART = 0, YEND = 159 */
EricLew 0:ad9dfc0179dc 184 LCD_IO_WriteReg(LCD_REG_43);
EricLew 0:ad9dfc0179dc 185 data = 0x00;
EricLew 0:ad9dfc0179dc 186 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 187 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 188 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 189 data = 0x9F;
EricLew 0:ad9dfc0179dc 190 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 191 /* Magical unicorn dust, 16 args, no delay */
EricLew 0:ad9dfc0179dc 192 st7735_WriteReg(LCD_REG_224, 0x02);
EricLew 0:ad9dfc0179dc 193 st7735_WriteReg(LCD_REG_224, 0x1c);
EricLew 0:ad9dfc0179dc 194 st7735_WriteReg(LCD_REG_224, 0x07);
EricLew 0:ad9dfc0179dc 195 st7735_WriteReg(LCD_REG_224, 0x12);
EricLew 0:ad9dfc0179dc 196 st7735_WriteReg(LCD_REG_224, 0x37);
EricLew 0:ad9dfc0179dc 197 st7735_WriteReg(LCD_REG_224, 0x32);
EricLew 0:ad9dfc0179dc 198 st7735_WriteReg(LCD_REG_224, 0x29);
EricLew 0:ad9dfc0179dc 199 st7735_WriteReg(LCD_REG_224, 0x2d);
EricLew 0:ad9dfc0179dc 200 st7735_WriteReg(LCD_REG_224, 0x29);
EricLew 0:ad9dfc0179dc 201 st7735_WriteReg(LCD_REG_224, 0x25);
EricLew 0:ad9dfc0179dc 202 st7735_WriteReg(LCD_REG_224, 0x2B);
EricLew 0:ad9dfc0179dc 203 st7735_WriteReg(LCD_REG_224, 0x39);
EricLew 0:ad9dfc0179dc 204 st7735_WriteReg(LCD_REG_224, 0x00);
EricLew 0:ad9dfc0179dc 205 st7735_WriteReg(LCD_REG_224, 0x01);
EricLew 0:ad9dfc0179dc 206 st7735_WriteReg(LCD_REG_224, 0x03);
EricLew 0:ad9dfc0179dc 207 st7735_WriteReg(LCD_REG_224, 0x10);
EricLew 0:ad9dfc0179dc 208 /* Sparkles and rainbows, 16 args, no delay */
EricLew 0:ad9dfc0179dc 209 st7735_WriteReg(LCD_REG_225, 0x03);
EricLew 0:ad9dfc0179dc 210 st7735_WriteReg(LCD_REG_225, 0x1d);
EricLew 0:ad9dfc0179dc 211 st7735_WriteReg(LCD_REG_225, 0x07);
EricLew 0:ad9dfc0179dc 212 st7735_WriteReg(LCD_REG_225, 0x06);
EricLew 0:ad9dfc0179dc 213 st7735_WriteReg(LCD_REG_225, 0x2E);
EricLew 0:ad9dfc0179dc 214 st7735_WriteReg(LCD_REG_225, 0x2C);
EricLew 0:ad9dfc0179dc 215 st7735_WriteReg(LCD_REG_225, 0x29);
EricLew 0:ad9dfc0179dc 216 st7735_WriteReg(LCD_REG_225, 0x2D);
EricLew 0:ad9dfc0179dc 217 st7735_WriteReg(LCD_REG_225, 0x2E);
EricLew 0:ad9dfc0179dc 218 st7735_WriteReg(LCD_REG_225, 0x2E);
EricLew 0:ad9dfc0179dc 219 st7735_WriteReg(LCD_REG_225, 0x37);
EricLew 0:ad9dfc0179dc 220 st7735_WriteReg(LCD_REG_225, 0x3F);
EricLew 0:ad9dfc0179dc 221 st7735_WriteReg(LCD_REG_225, 0x00);
EricLew 0:ad9dfc0179dc 222 st7735_WriteReg(LCD_REG_225, 0x00);
EricLew 0:ad9dfc0179dc 223 st7735_WriteReg(LCD_REG_225, 0x02);
EricLew 0:ad9dfc0179dc 224 st7735_WriteReg(LCD_REG_225, 0x10);
EricLew 0:ad9dfc0179dc 225 /* Normal display on, no args, no delay */
EricLew 0:ad9dfc0179dc 226 st7735_WriteReg(LCD_REG_19, 0x00);
EricLew 0:ad9dfc0179dc 227 /* Main screen turn on, no delay */
EricLew 0:ad9dfc0179dc 228 st7735_WriteReg(LCD_REG_41, 0x00);
EricLew 0:ad9dfc0179dc 229 /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */
EricLew 0:ad9dfc0179dc 230 st7735_WriteReg(LCD_REG_54, 0xC0);
EricLew 0:ad9dfc0179dc 231 }
EricLew 0:ad9dfc0179dc 232
EricLew 0:ad9dfc0179dc 233 /**
EricLew 0:ad9dfc0179dc 234 * @brief Enables the Display.
EricLew 0:ad9dfc0179dc 235 * @param None
EricLew 0:ad9dfc0179dc 236 * @retval None
EricLew 0:ad9dfc0179dc 237 */
EricLew 0:ad9dfc0179dc 238 void st7735_DisplayOn(void)
EricLew 0:ad9dfc0179dc 239 {
EricLew 0:ad9dfc0179dc 240 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 241 LCD_IO_WriteReg(LCD_REG_19);
EricLew 0:ad9dfc0179dc 242 LCD_Delay(10);
EricLew 0:ad9dfc0179dc 243 LCD_IO_WriteReg(LCD_REG_41);
EricLew 0:ad9dfc0179dc 244 LCD_Delay(10);
EricLew 0:ad9dfc0179dc 245 LCD_IO_WriteReg(LCD_REG_54);
EricLew 0:ad9dfc0179dc 246 data = 0xC0;
EricLew 0:ad9dfc0179dc 247 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 248 }
EricLew 0:ad9dfc0179dc 249
EricLew 0:ad9dfc0179dc 250 /**
EricLew 0:ad9dfc0179dc 251 * @brief Disables the Display.
EricLew 0:ad9dfc0179dc 252 * @param None
EricLew 0:ad9dfc0179dc 253 * @retval None
EricLew 0:ad9dfc0179dc 254 */
EricLew 0:ad9dfc0179dc 255 void st7735_DisplayOff(void)
EricLew 0:ad9dfc0179dc 256 {
EricLew 0:ad9dfc0179dc 257 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 258 LCD_IO_WriteReg(LCD_REG_19);
EricLew 0:ad9dfc0179dc 259 LCD_Delay(10);
EricLew 0:ad9dfc0179dc 260 LCD_IO_WriteReg(LCD_REG_40);
EricLew 0:ad9dfc0179dc 261 LCD_Delay(10);
EricLew 0:ad9dfc0179dc 262 LCD_IO_WriteReg(LCD_REG_54);
EricLew 0:ad9dfc0179dc 263 data = 0xC0;
EricLew 0:ad9dfc0179dc 264 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 265 }
EricLew 0:ad9dfc0179dc 266
EricLew 0:ad9dfc0179dc 267 /**
EricLew 0:ad9dfc0179dc 268 * @brief Sets Cursor position.
EricLew 0:ad9dfc0179dc 269 * @param Xpos: specifies the X position.
EricLew 0:ad9dfc0179dc 270 * @param Ypos: specifies the Y position.
EricLew 0:ad9dfc0179dc 271 * @retval None
EricLew 0:ad9dfc0179dc 272 */
EricLew 0:ad9dfc0179dc 273 void st7735_SetCursor(uint16_t Xpos, uint16_t Ypos)
EricLew 0:ad9dfc0179dc 274 {
EricLew 0:ad9dfc0179dc 275 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 276 LCD_IO_WriteReg(LCD_REG_42);
EricLew 0:ad9dfc0179dc 277 data = (Xpos) >> 8;
EricLew 0:ad9dfc0179dc 278 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 279 data = (Xpos) & 0xFF;
EricLew 0:ad9dfc0179dc 280 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 281 LCD_IO_WriteReg(LCD_REG_43);
EricLew 0:ad9dfc0179dc 282 data = (Ypos) >> 8;
EricLew 0:ad9dfc0179dc 283 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 284 data = (Ypos) & 0xFF;
EricLew 0:ad9dfc0179dc 285 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 286 LCD_IO_WriteReg(LCD_REG_44);
EricLew 0:ad9dfc0179dc 287 }
EricLew 0:ad9dfc0179dc 288
EricLew 0:ad9dfc0179dc 289 /**
EricLew 0:ad9dfc0179dc 290 * @brief Writes pixel.
EricLew 0:ad9dfc0179dc 291 * @param Xpos: specifies the X position.
EricLew 0:ad9dfc0179dc 292 * @param Ypos: specifies the Y position.
EricLew 0:ad9dfc0179dc 293 * @param RGBCode: the RGB pixel color
EricLew 0:ad9dfc0179dc 294 * @retval None
EricLew 0:ad9dfc0179dc 295 */
EricLew 0:ad9dfc0179dc 296 void st7735_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
EricLew 0:ad9dfc0179dc 297 {
EricLew 0:ad9dfc0179dc 298 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 299 if((Xpos >= ST7735_LCD_PIXEL_WIDTH) || (Ypos >= ST7735_LCD_PIXEL_HEIGHT))
EricLew 0:ad9dfc0179dc 300 {
EricLew 0:ad9dfc0179dc 301 return;
EricLew 0:ad9dfc0179dc 302 }
EricLew 0:ad9dfc0179dc 303
EricLew 0:ad9dfc0179dc 304 /* Set Cursor */
EricLew 0:ad9dfc0179dc 305 st7735_SetCursor(Xpos, Ypos);
EricLew 0:ad9dfc0179dc 306
EricLew 0:ad9dfc0179dc 307 data = RGBCode >> 8;
EricLew 0:ad9dfc0179dc 308 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 309 data = RGBCode;
EricLew 0:ad9dfc0179dc 310 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 311 }
EricLew 0:ad9dfc0179dc 312
EricLew 0:ad9dfc0179dc 313
EricLew 0:ad9dfc0179dc 314 /**
EricLew 0:ad9dfc0179dc 315 * @brief Writes to the selected LCD register.
EricLew 0:ad9dfc0179dc 316 * @param LCDReg: Address of the selected register.
EricLew 0:ad9dfc0179dc 317 * @param LCDRegValue: value to write to the selected register.
EricLew 0:ad9dfc0179dc 318 * @retval None
EricLew 0:ad9dfc0179dc 319 */
EricLew 0:ad9dfc0179dc 320 void st7735_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue)
EricLew 0:ad9dfc0179dc 321 {
EricLew 0:ad9dfc0179dc 322 LCD_IO_WriteReg(LCDReg);
EricLew 0:ad9dfc0179dc 323 LCD_IO_WriteMultipleData(&LCDRegValue, 1);
EricLew 0:ad9dfc0179dc 324 }
EricLew 0:ad9dfc0179dc 325
EricLew 0:ad9dfc0179dc 326 /**
EricLew 0:ad9dfc0179dc 327 * @brief Sets a display window
EricLew 0:ad9dfc0179dc 328 * @param Xpos: specifies the X bottom left position.
EricLew 0:ad9dfc0179dc 329 * @param Ypos: specifies the Y bottom left position.
EricLew 0:ad9dfc0179dc 330 * @param Height: display window height.
EricLew 0:ad9dfc0179dc 331 * @param Width: display window width.
EricLew 0:ad9dfc0179dc 332 * @retval None
EricLew 0:ad9dfc0179dc 333 */
EricLew 0:ad9dfc0179dc 334 void st7735_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
EricLew 0:ad9dfc0179dc 335 {
EricLew 0:ad9dfc0179dc 336 uint8_t data = 0;
EricLew 0:ad9dfc0179dc 337 /* Column addr set, 4 args, no delay: XSTART = Xpos, XEND = (Xpos + Width - 1) */
EricLew 0:ad9dfc0179dc 338 LCD_IO_WriteReg(LCD_REG_42);
EricLew 0:ad9dfc0179dc 339 data = (Xpos) >> 8;
EricLew 0:ad9dfc0179dc 340 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 341 data = (Xpos) & 0xFF;
EricLew 0:ad9dfc0179dc 342 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 343 data = (Xpos + Width - 1) >> 8;
EricLew 0:ad9dfc0179dc 344 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 345 data = (Xpos + Width - 1) & 0xFF;
EricLew 0:ad9dfc0179dc 346 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 347 /* Row addr set, 4 args, no delay: YSTART = Ypos, YEND = (Ypos + Height - 1) */
EricLew 0:ad9dfc0179dc 348 LCD_IO_WriteReg(LCD_REG_43);
EricLew 0:ad9dfc0179dc 349 data = (Ypos) >> 8;
EricLew 0:ad9dfc0179dc 350 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 351 data = (Ypos) & 0xFF;
EricLew 0:ad9dfc0179dc 352 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 353 data = (Ypos + Height - 1) >> 8;
EricLew 0:ad9dfc0179dc 354 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 355 data = (Ypos + Height - 1) & 0xFF;
EricLew 0:ad9dfc0179dc 356 LCD_IO_WriteMultipleData(&data, 1);
EricLew 0:ad9dfc0179dc 357 }
EricLew 0:ad9dfc0179dc 358
EricLew 0:ad9dfc0179dc 359 /**
EricLew 0:ad9dfc0179dc 360 * @brief Draws horizontal line.
EricLew 0:ad9dfc0179dc 361 * @param RGBCode: Specifies the RGB color
EricLew 0:ad9dfc0179dc 362 * @param Xpos: specifies the X position.
EricLew 0:ad9dfc0179dc 363 * @param Ypos: specifies the Y position.
EricLew 0:ad9dfc0179dc 364 * @param Length: specifies the line length.
EricLew 0:ad9dfc0179dc 365 * @retval None
EricLew 0:ad9dfc0179dc 366 */
EricLew 0:ad9dfc0179dc 367 void st7735_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
EricLew 0:ad9dfc0179dc 368 {
EricLew 0:ad9dfc0179dc 369 uint8_t counter = 0;
EricLew 0:ad9dfc0179dc 370
EricLew 0:ad9dfc0179dc 371 if(Xpos + Length > ST7735_LCD_PIXEL_WIDTH) return;
EricLew 0:ad9dfc0179dc 372
EricLew 0:ad9dfc0179dc 373 /* Set Cursor */
EricLew 0:ad9dfc0179dc 374 st7735_SetCursor(Xpos, Ypos);
EricLew 0:ad9dfc0179dc 375
EricLew 0:ad9dfc0179dc 376 for(counter = 0; counter < Length; counter++)
EricLew 0:ad9dfc0179dc 377 {
EricLew 0:ad9dfc0179dc 378 ArrayRGB[counter] = RGBCode;
EricLew 0:ad9dfc0179dc 379 }
EricLew 0:ad9dfc0179dc 380 LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2);
EricLew 0:ad9dfc0179dc 381 }
EricLew 0:ad9dfc0179dc 382
EricLew 0:ad9dfc0179dc 383 /**
EricLew 0:ad9dfc0179dc 384 * @brief Draws vertical line.
EricLew 0:ad9dfc0179dc 385 * @param RGBCode: Specifies the RGB color
EricLew 0:ad9dfc0179dc 386 * @param Xpos: specifies the X position.
EricLew 0:ad9dfc0179dc 387 * @param Ypos: specifies the Y position.
EricLew 0:ad9dfc0179dc 388 * @param Length: specifies the line length.
EricLew 0:ad9dfc0179dc 389 * @retval None
EricLew 0:ad9dfc0179dc 390 */
EricLew 0:ad9dfc0179dc 391 void st7735_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
EricLew 0:ad9dfc0179dc 392 {
EricLew 0:ad9dfc0179dc 393 uint8_t counter = 0;
EricLew 0:ad9dfc0179dc 394
EricLew 0:ad9dfc0179dc 395 if(Ypos + Length > ST7735_LCD_PIXEL_HEIGHT) return;
EricLew 0:ad9dfc0179dc 396 for(counter = 0; counter < Length; counter++)
EricLew 0:ad9dfc0179dc 397 {
EricLew 0:ad9dfc0179dc 398 st7735_WritePixel(Xpos, Ypos + counter, RGBCode);
EricLew 0:ad9dfc0179dc 399 }
EricLew 0:ad9dfc0179dc 400 }
EricLew 0:ad9dfc0179dc 401
EricLew 0:ad9dfc0179dc 402 /**
EricLew 0:ad9dfc0179dc 403 * @brief Gets the LCD pixel Width.
EricLew 0:ad9dfc0179dc 404 * @param None
EricLew 0:ad9dfc0179dc 405 * @retval The Lcd Pixel Width
EricLew 0:ad9dfc0179dc 406 */
EricLew 0:ad9dfc0179dc 407 uint16_t st7735_GetLcdPixelWidth(void)
EricLew 0:ad9dfc0179dc 408 {
EricLew 0:ad9dfc0179dc 409 return ST7735_LCD_PIXEL_WIDTH;
EricLew 0:ad9dfc0179dc 410 }
EricLew 0:ad9dfc0179dc 411
EricLew 0:ad9dfc0179dc 412 /**
EricLew 0:ad9dfc0179dc 413 * @brief Gets the LCD pixel Height.
EricLew 0:ad9dfc0179dc 414 * @param None
EricLew 0:ad9dfc0179dc 415 * @retval The Lcd Pixel Height
EricLew 0:ad9dfc0179dc 416 */
EricLew 0:ad9dfc0179dc 417 uint16_t st7735_GetLcdPixelHeight(void)
EricLew 0:ad9dfc0179dc 418 {
EricLew 0:ad9dfc0179dc 419 return ST7735_LCD_PIXEL_HEIGHT;
EricLew 0:ad9dfc0179dc 420 }
EricLew 0:ad9dfc0179dc 421
EricLew 0:ad9dfc0179dc 422 /**
EricLew 0:ad9dfc0179dc 423 * @brief Displays a bitmap picture loaded in the internal Flash.
EricLew 0:ad9dfc0179dc 424 * @param BmpAddress: Bmp picture address in the internal Flash.
EricLew 0:ad9dfc0179dc 425 * @retval None
EricLew 0:ad9dfc0179dc 426 */
EricLew 0:ad9dfc0179dc 427 void st7735_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp)
EricLew 0:ad9dfc0179dc 428 {
EricLew 0:ad9dfc0179dc 429 uint32_t index = 0, size = 0;
EricLew 0:ad9dfc0179dc 430
EricLew 0:ad9dfc0179dc 431 /* Read bitmap size */
EricLew 0:ad9dfc0179dc 432 size = *(volatile uint16_t *) (pbmp + 2);
EricLew 0:ad9dfc0179dc 433 size |= (*(volatile uint16_t *) (pbmp + 4)) << 16;
EricLew 0:ad9dfc0179dc 434 /* Get bitmap data address offset */
EricLew 0:ad9dfc0179dc 435 index = *(volatile uint16_t *) (pbmp + 10);
EricLew 0:ad9dfc0179dc 436 index |= (*(volatile uint16_t *) (pbmp + 12)) << 16;
EricLew 0:ad9dfc0179dc 437 size = (size - index)/2;
EricLew 0:ad9dfc0179dc 438 pbmp += index;
EricLew 0:ad9dfc0179dc 439
EricLew 0:ad9dfc0179dc 440 /* Set GRAM write direction and BGR = 0 */
EricLew 0:ad9dfc0179dc 441 /* Memory access control: MY = 0, MX = 1, MV = 0, ML = 0 */
EricLew 0:ad9dfc0179dc 442 st7735_WriteReg(LCD_REG_54, 0x40);
EricLew 0:ad9dfc0179dc 443
EricLew 0:ad9dfc0179dc 444 /* Set Cursor */
EricLew 0:ad9dfc0179dc 445 st7735_SetCursor(Xpos, Ypos);
EricLew 0:ad9dfc0179dc 446
EricLew 0:ad9dfc0179dc 447 LCD_IO_WriteMultipleData((uint8_t*)pbmp, size*2);
EricLew 0:ad9dfc0179dc 448
EricLew 0:ad9dfc0179dc 449 /* Set GRAM write direction and BGR = 0 */
EricLew 0:ad9dfc0179dc 450 /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */
EricLew 0:ad9dfc0179dc 451 st7735_WriteReg(LCD_REG_54, 0xC0);
EricLew 0:ad9dfc0179dc 452 }
EricLew 0:ad9dfc0179dc 453
EricLew 0:ad9dfc0179dc 454 /**
EricLew 0:ad9dfc0179dc 455 * @}
EricLew 0:ad9dfc0179dc 456 */
EricLew 0:ad9dfc0179dc 457
EricLew 0:ad9dfc0179dc 458 /**
EricLew 0:ad9dfc0179dc 459 * @}
EricLew 0:ad9dfc0179dc 460 */
EricLew 0:ad9dfc0179dc 461
EricLew 0:ad9dfc0179dc 462 /**
EricLew 0:ad9dfc0179dc 463 * @}
EricLew 0:ad9dfc0179dc 464 */
EricLew 0:ad9dfc0179dc 465
EricLew 0:ad9dfc0179dc 466 /**
EricLew 0:ad9dfc0179dc 467 * @}
EricLew 0:ad9dfc0179dc 468 */
EricLew 0:ad9dfc0179dc 469
EricLew 0:ad9dfc0179dc 470 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
EricLew 0:ad9dfc0179dc 471
EricLew 0:ad9dfc0179dc 472