- /* Define to prevent recursive inclusion -------------------------------------*/
- #ifndef __LCD_H
- #define __LCD_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes ------------------------------------------------------------------*/
- #include <stdint.h>
-
- /** @addtogroup BSP
- * @{
- */
- /** @addtogroup Components
- * @{
- */
- /** @addtogroup LCD
- * @{
- */
-
- /** @defgroup LCD_Exported_Types
- * @{
- */
- /** @defgroup LCD_Driver_structure LCD Driver structure
- * @{
- */
- typedef struct
- {
- void (*Init)(void);
- uint16_t (*ReadID)(void);
- void (*DisplayOn)(void);
- void (*DisplayOff)(void);
- void (*SetCursor)(uint16_t, uint16_t);
- void (*WritePixel)(uint16_t, uint16_t, uint16_t);
- uint16_t (*ReadPixel)(uint16_t, uint16_t);
-
- /* Optimized operation */
- void (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t);
- void (*DrawHLine)(uint16_t, uint16_t, uint16_t, uint16_t);
- void (*DrawVLine)(uint16_t, uint16_t, uint16_t, uint16_t);
-
- uint16_t (*GetLcdPixelWidth)(void);
- uint16_t (*GetLcdPixelHeight)(void);
- void (*DrawBitmap)(uint16_t, uint16_t, uint8_t*);
- void (*DrawRGBImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*);
- }LCD_DrvTypeDef;
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __LCD_H */
-
- /* Define to prevent recursive inclusion -------------------------------------*/
- #ifndef __st7789v_H
- #define __st7789v_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes ------------------------------------------------------------------*/
- #include "lcd.h"
- /** @addtogroup BSP
- * @{
- */
- /** @addtogroup Components
- * @{
- */
-
- /** @addtogroup st7789v
- * @{
- */
- /** @defgroup st7789v_Exported_Types
- * @{
- */
-
- /**
- * @}
- */
- /** @defgroup st7789v_Exported_Constants
- * @{
- */
-
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] st7789v Size
- */
- #define st7789v_LCD_PIXEL_WIDTH ((uint16_t)128)
- #define st7789v_LCD_PIXEL_HEIGHT ((uint16_t)160)
- /**
- * @brief LCD Lines depending on the chosen fonts.
- */
- #define LCD_LINE_0 LINE(0)
- #define LCD_LINE_1 LINE(1)
- #define LCD_LINE_2 LINE(2)
- #define LCD_LINE_3 LINE(3)
- #define LCD_LINE_4 LINE(4)
- #define LCD_LINE_5 LINE(5)
- #define LCD_LINE_6 LINE(6)
- #define LCD_LINE_7 LINE(7)
- #define LCD_LINE_8 LINE(8)
- #define LCD_LINE_9 LINE(9)
- #define LCD_LINE_10 LINE(10)
- #define LCD_LINE_11 LINE(11)
- #define LCD_LINE_12 LINE(12)
- #define LCD_LINE_13 LINE(13)
- #define LCD_LINE_14 LINE(14)
- #define LCD_LINE_15 LINE(15)
- #define LCD_LINE_16 LINE(16)
- #define LCD_LINE_17 LINE(17)
- #define LCD_LINE_18 LINE(18)
- #define LCD_LINE_19 LINE(19)
-
- /**
- * @}
- */
- /** @defgroup ADAFRUIT_SPI_LCD_Exported_Functions
- * @{
- */
- void st7789v_Init(void);
- uint16_t st7789v_ReadID(void);
- void st7789v_DisplayOn(void);
- void st7789v_DisplayOff(void);
- void st7789v_SetCursor(uint16_t Xpos, uint16_t Ypos);
- void st7789v_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
- void st7789v_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue);
- uint8_t st7789v_ReadReg(uint8_t LCDReg);
- void st7789v_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
- void st7789v_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
- void st7789v_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
- uint16_t st7789v_GetLcdPixelWidth(void);
- uint16_t st7789v_GetLcdPixelHeight(void);
- void st7789v_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp);
- /* LCD driver structure */
- extern LCD_DrvTypeDef st7789v_drv;
- /* LCD IO functions */
- void LCD_IO_Init(void);
- void LCD_IO_WriteMultipleData(uint8_t *pData, uint32_t Size);
- void LCD_IO_WriteReg(uint8_t Reg);
- void LCD_Delay(uint32_t delay);
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __st7789v_H */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
-
- /* Includes ------------------------------------------------------------------*/
- #include "st7789v.h"
- /** @addtogroup BSP
- * @{
- */
- /** @addtogroup Components
- * @{
- */
- /** @addtogroup st7789v
- * @brief This file provides a set of functions needed to drive the
- * st7789v LCD.
- * @{
- */
- /** @defgroup st7789v_Private_TypesDefinitions
- * @{
- */
- /**
- * @}
- */
- /** @defgroup st7789v_Private_Defines
- * @{
- */
- /**
- * @}
- */
- /** @defgroup st7789v_Private_Macros
- * @{
- */
- /**
- * @}
- */
- /** @defgroup st7789v_Private_Variables
- * @{
- */
- LCD_DrvTypeDef st7789v_drv =
- {
- st7789v_Init,
- 0,
- st7789v_DisplayOn,
- st7789v_DisplayOff,
- st7789v_SetCursor,
- st7789v_WritePixel,
- 0,
- st7789v_SetDisplayWindow,
- st7789v_DrawHLine,
- st7789v_DrawVLine,
- st7789v_GetLcdPixelWidth,
- st7789v_GetLcdPixelHeight,
- st7789v_DrawBitmap,
- };
- static uint16_t ArrayRGB[320] = {0};
- /**
- * @}
- */
- /** @defgroup st7789v_Private_FunctionPrototypes
- * @{
- */
- /**
- * @}
- */
- /** @defgroup st7789v_Private_Functions
- * @{
- */
-
- /**
- * @brief Writes to the selected LCD register.
- * @param LCDReg: Address of the selected register.
- * @param LCDRegValue: value to write to the selected register.
- * @retval None
- */
- void st7789v_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue)
- {
- LCD_IO_WriteReg(LCDReg);
- LCD_IO_WriteMultipleData(&LCDRegValue, 1);
- }
- /**
- * @brief Initialize the st7789v LCD Component.
- * @param None
- * @retval None
- */
- void st7789v_Init(void)
- {
-
- /* Initialize st7789v low level bus layer -----------------------------------*/
- LCD_IO_Init();
- /* Out of sleep mode, 0 args, no delay */
- st7789v_WriteReg(0x11, 0x00);
- /**/
-
- st7789v_WriteReg(0x36, 0x00);
- st7789v_WriteReg(0x3A, 0x06);
- st7789v_WriteReg(0xB2, 0x0C);
- st7789v_WriteReg(0xB2, 0x0C);
- st7789v_WriteReg(0xB2, 0x00);
- st7789v_WriteReg(0xB2, 0x33);
- st7789v_WriteReg(0xB2, 0x33);
- st7789v_WriteReg(0xB7, 0x35); //VGH=13.26V, VGL=-10.43V
- st7789v_WriteReg(0xBB, 0x38); //VCOM
- st7789v_WriteReg(0xC0, 0x2C);
- st7789v_WriteReg(0xC2, 0x01);
- st7789v_WriteReg(0xC3, 0x1A); //VAP //5V
- st7789v_WriteReg(0xC4, 0x20);
- st7789v_WriteReg(0xC6, 0x0F);
- st7789v_WriteReg(0xD0, 0xA4);
- st7789v_WriteReg(0xD0, 0xA1);
- st7789v_WriteReg(0xE0 , 0xD0);
- st7789v_WriteReg(0xE0, 0x1E);
- st7789v_WriteReg(0xE0, 0x24);
- st7789v_WriteReg(0xE0, 0x0A);
- st7789v_WriteReg(0xE0 , 0x0A);
- st7789v_WriteReg(0xE0 , 0x26);
- st7789v_WriteReg(0xE0, 0x44);
- st7789v_WriteReg(0xE0, 0x44);
- st7789v_WriteReg(0xE0, 0x57);
- st7789v_WriteReg(0xE0, 0x29);
- st7789v_WriteReg(0xE0 , 0x14);
- st7789v_WriteReg(0xE0, 0x14);
- st7789v_WriteReg(0xE0 , 0x30);
- st7789v_WriteReg(0xE0 , 0x34);
- st7789v_WriteReg(0xE1, 0xD0);
- st7789v_WriteReg(0xE1 , 0x1E);
- st7789v_WriteReg(0xE1, 0x23);
- st7789v_WriteReg(0xE1 , 0x0A);
- st7789v_WriteReg(0xE1, 0x09);
- st7789v_WriteReg(0xE1, 0x25);
- st7789v_WriteReg(0xE1 , 0x43);
- st7789v_WriteReg(0xE1, 0x33);
- st7789v_WriteReg(0xE1, 0x56);
- st7789v_WriteReg(0xE1 , 0x28);
- st7789v_WriteReg(0xE1 , 0x14);
- st7789v_WriteReg(0xE1, 0x14);
- st7789v_WriteReg(0xE1, 0x2F);
- st7789v_WriteReg(0xE1 , 0x34);
- st7789v_WriteReg(0x29,0x00);
- st7789v_WriteReg(0x21, 0x00);
- st7789v_WriteReg(0x2A, 0x00);
- st7789v_WriteReg(0x2A , 0x00);
- st7789v_WriteReg(0x2A , 0x00);
- st7789v_WriteReg(0x2A , 0xEF);
-
- st7789v_WriteReg(0x2B, 0x00);
- st7789v_WriteReg(0x2B , 0x00);
- st7789v_WriteReg(0x2B , 0x00);
- st7789v_WriteReg(0x2B , 0xEF);
- }
- /**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
- void st7789v_DisplayOn(void)
- {
- uint8_t data = 0;
- LCD_IO_WriteReg(0x13);/* Partial off (Normal): NORON */
- LCD_Delay(10);
- LCD_IO_WriteReg(0x29);/* Display on: DISPON */
- LCD_Delay(10);
- LCD_IO_WriteReg(0x36);/* Memory data access control: MADCTL */
- data = 0xC0;
- LCD_IO_WriteMultipleData(&data, 1);
- }
- /**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
- void st7789v_DisplayOff(void)
- {
- uint8_t data = 0;
- LCD_IO_WriteReg(0x13);/* Partial off (Normal): NORON */
- LCD_Delay(10);
- LCD_IO_WriteReg(0x28);/* Display off: DISPOFF */
- LCD_Delay(10);
- LCD_IO_WriteReg(0x36);/* Memory data access control: MADCTL */
- data = 0xC0;
- LCD_IO_WriteMultipleData(&data, 1);
- }
- /**
- * @brief Sets Cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
- void st7789v_SetCursor(uint16_t Xpos, uint16_t Ypos)
- {
- uint8_t data = 0;
- LCD_IO_WriteReg(0x2A);/* Column address set: CASET */
- data = (Xpos) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Xpos) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- LCD_IO_WriteReg(0x2B);/* Row address set: RASET */
- data = (Ypos) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Ypos) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- LCD_IO_WriteReg(0x2C);/* Memory write: RAMWR */
- }
- /**
- * @brief Writes pixel.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param RGBCode: the RGB pixel color
- * @retval None
- */
- void st7789v_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
- {
- uint8_t data = 0;
- if((Xpos >= st7789v_LCD_PIXEL_WIDTH) || (Ypos >= st7789v_LCD_PIXEL_HEIGHT))
- {
- return;
- }
-
- /* Set Cursor */
- st7789v_SetCursor(Xpos, Ypos);
-
- data = RGBCode >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = RGBCode;
- LCD_IO_WriteMultipleData(&data, 1);
- }
- /**
- * @brief Sets a display window
- * @param Xpos: specifies the X bottom left position.
- * @param Ypos: specifies the Y bottom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
- void st7789v_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
- {
- uint8_t data = 0;
- /* Column addr set, 4 args, no delay: XSTART = Xpos, XEND = (Xpos + Width - 1) */
- LCD_IO_WriteReg(0x2A);/* Column address set: CASET */
- data = (Xpos) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Xpos) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Xpos + Width - 1) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Xpos + Width - 1) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- /* Row addr set, 4 args, no delay: YSTART = Ypos, YEND = (Ypos + Height - 1) */
- LCD_IO_WriteReg(0x2B);/* Row address set: RASET */
- data = (Ypos) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Ypos) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Ypos + Height - 1) >> 8;
- LCD_IO_WriteMultipleData(&data, 1);
- data = (Ypos + Height - 1) & 0xFF;
- LCD_IO_WriteMultipleData(&data, 1);
- }
- /**
- * @brief Draws horizontal line.
- * @param RGBCode: Specifies the RGB color
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: specifies the line length.
- * @retval None
- */
- void st7789v_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
- {
- uint8_t counter = 0;
-
- if(Xpos + Length > st7789v_LCD_PIXEL_WIDTH) return;
-
- /* Set Cursor */
- st7789v_SetCursor(Xpos, Ypos);
-
- for(counter = 0; counter < Length; counter++)
- {
- ArrayRGB[counter] = RGBCode;
- }
- LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2);
- }
- /**
- * @brief Draws vertical line.
- * @param RGBCode: Specifies the RGB color
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: specifies the line length.
- * @retval None
- */
- void st7789v_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
- {
- uint8_t counter = 0;
-
- if(Ypos + Length > st7789v_LCD_PIXEL_HEIGHT) return;
- for(counter = 0; counter < Length; counter++)
- {
- st7789v_WritePixel(Xpos, Ypos + counter, RGBCode);
- }
- }
- /**
- * @brief Gets the LCD pixel Width.
- * @param None
- * @retval The Lcd Pixel Width
- */
- uint16_t st7789v_GetLcdPixelWidth(void)
- {
- return st7789v_LCD_PIXEL_WIDTH;
- }
- /**
- * @brief Gets the LCD pixel Height.
- * @param None
- * @retval The Lcd Pixel Height
- */
- uint16_t st7789v_GetLcdPixelHeight(void)
- {
- return st7789v_LCD_PIXEL_HEIGHT;
- }
- /**
- * @brief Displays a bitmap picture loaded in the internal Flash.
- * @param BmpAddress: Bmp picture address in the internal Flash.
- * @retval None
- */
- void st7789v_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp)
- {
- uint32_t index = 0, size = 0;
-
- /* Read bitmap size */
- size = *(volatile uint16_t *) (pbmp + 2);
- size |= (*(volatile uint16_t *) (pbmp + 4)) << 16;
- /* Get bitmap data address offset */
- index = *(volatile uint16_t *) (pbmp + 10);
- index |= (*(volatile uint16_t *) (pbmp + 12)) << 16;
- size = (size - index)/2;
- pbmp += index;
-
- /* Set GRAM write direction and BGR = 0 */
- /* Memory access control: MY = 0, MX = 1, MV = 0, ML = 0 */
- st7789v_WriteReg(0x36, 0x40);// LCD_REG_54 0x36 /* Memory data access control: MADCTL */
- /* Set Cursor */
- st7789v_SetCursor(Xpos, Ypos);
-
- LCD_IO_WriteMultipleData((uint8_t*)pbmp, size*2);
-
- /* Set GRAM write direction and BGR = 0 */
- /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */
- st7789v_WriteReg(0x36, 0xC0);/* Memory data access control: MADCTL */
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
-
- /* Includes ------------------------------------------------------------------*/
- #include "st7735.h"
- /** @addtogroup BSP
- * @{
- */
- /** @addtogroup Components
- * @{
- */
- /** @addtogroup ST7735
- * @brief This file provides a set of functions needed to drive the
- * ST7735 LCD.
- * @{
- */
- /** @defgroup ST7735_Private_TypesDefinitions
- * @{
- */
- /**
- * @}
- */
- /** @defgroup ST7735_Private_Defines
- * @{
- */
- /**
- * @}
- */
- /** @defgroup ST7735_Private_Macros
- * @{
- */
- /**
- * @}
- */
- /** @defgroup ST7735_Private_Variables
- * @{
- */
- LCD_DrvTypeDef st7735_drv =
- {
- st7735_Init,
- 0,
- st7735_DisplayOn,
- st7735_DisplayOff,
- st7735_SetCursor,
- st7735_WritePixel,
- 0,
- st7735_SetDisplayWindow,
- st7735_DrawHLine,
- st7735_DrawVLine,
- st7735_GetLcdPixelWidth,
- st7735_GetLcdPixelHeight,
- st7735_DrawBitmap,
- };
- static uint16_t ArrayRGB[320] = {0};
- /**
- * @}
- */
- /** @defgroup ST7735_Private_FunctionPrototypes
- * @{
- */
- /**
- * @}
- */
- /** @defgroup ST7735_Private_Functions
- * @{
- */
- /**
- * @brief Initialize the ST7735 LCD Component.
- * @param None
- * @retval None
- */
- void st7735_Init(void)
- {
-
- /* Initialize ST7735 low level bus layer -----------------------------------*/
- LCD_IO_Init();
-
- LCD_HW_RESET();
-
- /* Out of sleep mode*/
- LCD_IO_WriteReg(0x11);
- LCD_Delay(120);//120ms
- /* Frame rate ctrl - normal mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D)*/
- LCD_IO_WriteReg(0xB1);
- LCD_IO_WriteData(0x01);
- LCD_IO_WriteData(0x2C);
- LCD_IO_WriteData(0x2D);
- /* Frame rate control - idle mode, 3 args:Rate = fosc/(1x2+40) * (LINE+2C+2D) */
- LCD_IO_WriteReg(0xB2);
- LCD_IO_WriteData(0x01);
- LCD_IO_WriteData(0x2C);
- LCD_IO_WriteData(0x2D);
- /* Frame rate ctrl - partial mode, 6 args: Dot inversion mode, Line inversion mode */
- LCD_IO_WriteReg(0xB3);
- LCD_IO_WriteData(0x01);
- LCD_IO_WriteData(0x2C);
- LCD_IO_WriteData(0x2D);
- LCD_IO_WriteData(0x01);
- LCD_IO_WriteData(0x2C);
- LCD_IO_WriteData(0x2D);
- /* Display inversion ctrl, 1 arg, no delay: No inversion */
- st7735_WriteReg(0xB4, 0x07);
- /* Power control, 3 args, no delay: -4.6V , AUTO mode */
- LCD_IO_WriteReg(0xC0);
- LCD_IO_WriteData(0xA2);
- LCD_IO_WriteData(0x02);
- LCD_IO_WriteData(0x84);
- /* Power control, 1 arg, no delay: VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD */
- st7735_WriteReg(0xC1, 0xC5);
- /* Power control, 2 args, no delay: Opamp current small, Boost frequency */
- LCD_IO_WriteReg(0xC2);
- LCD_IO_WriteData(0x0A);
- LCD_IO_WriteData(0x00);
- /* Power control, 2 args, no delay: BCLK/2, Opamp current small & Medium low */
- LCD_IO_WriteReg(0xC3);
- LCD_IO_WriteData(0x8A);
- LCD_IO_WriteData(0x2A);
- /* Power control, 2 args, no delay */
- LCD_IO_WriteReg(0xC4);
- LCD_IO_WriteData(0x8A);
- LCD_IO_WriteData(0xEE);
- /* Power control, 1 arg, no delay */
- st7735_WriteReg(0xC5, 0x0E);
- /* Don't invert display, no args, no delay */
- LCD_IO_WriteReg(0x20);
- /* Set color mode, 1 arg, no delay: 16-bit color */
- st7735_WriteReg(0x3A, 0x05);
- /* Column addr set, 4 args, no delay: XSTART = 0, XEND = 127 */
- LCD_IO_WriteReg(0x2A);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x7F);
- /* Row addr set, 4 args, no delay: YSTART = 0, YEND = 159 */
- LCD_IO_WriteReg(0x2B);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x9F);
- /* Magical unicorn dust, 16 args, no delay */
- LCD_IO_WriteReg(0xE0);
- LCD_IO_WriteData(0x02);
- LCD_IO_WriteData(0x1c);
- LCD_IO_WriteData(0x07);
- LCD_IO_WriteData(0x12);
- LCD_IO_WriteData(0x37);
- LCD_IO_WriteData(0x32);
- LCD_IO_WriteData(0x29);
- LCD_IO_WriteData(0x2d);
- LCD_IO_WriteData(0x29);
- LCD_IO_WriteData(0x25);
- LCD_IO_WriteData(0x2B);
- LCD_IO_WriteData(0x39);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x01);
- LCD_IO_WriteData(0x03);
- LCD_IO_WriteData(0x10);
- /* Sparkles and rainbows, 16 args, no delay */
- LCD_IO_WriteReg(0xE0);
- LCD_IO_WriteData(0x03);
- LCD_IO_WriteData(0x1d);
- LCD_IO_WriteData(0x07);
- LCD_IO_WriteData(0x06);
- LCD_IO_WriteData(0x2E);
- LCD_IO_WriteData(0x2C);
- LCD_IO_WriteData(0x29);
- LCD_IO_WriteData(0x2D);
- LCD_IO_WriteData(0x2E);
- LCD_IO_WriteData(0x2E);
- LCD_IO_WriteData(0x37);
- LCD_IO_WriteData(0x3F);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x00);
- LCD_IO_WriteData(0x02);
- LCD_IO_WriteData(0x10);
- /* Normal display on, no args, no delay */
- st7735_WriteReg(0x13, 0x00);
- /* Main screen turn on, no delay */
- st7735_WriteReg(0x29, 0x00);
- /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */
- st7735_WriteReg(0x36, 0xC0);
- }
- /**
- * @brief Enables the Display.
- * @param None
- * @retval None
- */
- void st7735_DisplayOn(void)
- {
- LCD_IO_WriteReg(0x13);
- LCD_Delay(10);
- LCD_IO_WriteReg(0x29);
- LCD_Delay(10);
- LCD_IO_WriteReg(0x36);
- LCD_IO_WriteData(0xC0);
- }
- /**
- * @brief Disables the Display.
- * @param None
- * @retval None
- */
- void st7735_DisplayOff(void)
- {
- LCD_IO_WriteReg(0x13);
- LCD_Delay(10);
- LCD_IO_WriteReg(0x28);
- LCD_Delay(10);
- LCD_IO_WriteReg(0x36);
- LCD_IO_WriteData(0xC0);
- }
- /**
- * @brief Sets Cursor position.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @retval None
- */
- void st7735_SetCursor(uint16_t Xpos, uint16_t Ypos)
- {
- LCD_IO_WriteReg(0x2A);
- LCD_IO_WriteData((Xpos) >> 8);
- LCD_IO_WriteData((Xpos) & 0xFF);
- LCD_IO_WriteReg(0x2B);
- LCD_IO_WriteData((Ypos) >> 8);
- LCD_IO_WriteData((Ypos) & 0xFF);
- LCD_IO_WriteReg(0x2C);
- }
- /**
- * @brief Writes pixel.
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param RGBCode: the RGB pixel color
- * @retval None
- */
- void st7735_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode)
- {
- if((Xpos >= ST7735_LCD_PIXEL_WIDTH) || (Ypos >= ST7735_LCD_PIXEL_HEIGHT))
- {
- return;
- }
-
- /* Set Cursor */
- st7735_SetCursor(Xpos, Ypos);
- LCD_IO_WriteData(RGBCode >> 8);
- LCD_IO_WriteData(RGBCode);
- }
- /**
- * @brief Writes to the selected LCD register.
- * @param LCDReg: Address of the selected register.
- * @param LCDRegValue: value to write to the selected register.
- * @retval None
- */
- void st7735_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue)
- {
- LCD_IO_WriteReg(LCDReg);
- LCD_IO_WriteData(LCDRegValue);
- }
- /**
- * @brief Sets a display window
- * @param Xpos: specifies the X bottom left position.
- * @param Ypos: specifies the Y bottom left position.
- * @param Height: display window height.
- * @param Width: display window width.
- * @retval None
- */
- void st7735_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
- {
- /* Column addr set, 4 args, no delay: XSTART = Xpos, XEND = (Xpos + Width - 1) */
- LCD_IO_WriteReg(0x2A);
- LCD_IO_WriteData((Xpos) >> 8);
- LCD_IO_WriteData((Xpos) & 0xFF);
- LCD_IO_WriteData((Xpos + Width - 1) >> 8);
- LCD_IO_WriteData((Xpos + Width - 1) & 0xFF);
- /* Row addr set, 4 args, no delay: YSTART = Ypos, YEND = (Ypos + Height - 1) */
- LCD_IO_WriteReg(0x2B);
- LCD_IO_WriteData((Ypos) >> 8 );
- LCD_IO_WriteData((Ypos) & 0xFF );
- LCD_IO_WriteData((Ypos + Height - 1) >> 8 );
- LCD_IO_WriteData((Ypos + Height - 1) & 0xFF );
- }
- /**
- * @brief Draws horizontal line.
- * @param RGBCode: Specifies the RGB color
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: specifies the line length.
- * @retval None
- */
- void st7735_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
- {
- uint8_t counter = 0;
-
- if(Xpos + Length > ST7735_LCD_PIXEL_WIDTH) return;
-
- /* Set Cursor */
- st7735_SetCursor(Xpos, Ypos);
-
- for(counter = 0; counter < Length; counter++)
- {
- ArrayRGB[counter] = RGBCode;
- }
- LCD_IO_WriteMultipleData((uint8_t*)&ArrayRGB[0], Length * 2);
- }
- /**
- * @brief Draws vertical line.
- * @param RGBCode: Specifies the RGB color
- * @param Xpos: specifies the X position.
- * @param Ypos: specifies the Y position.
- * @param Length: specifies the line length.
- * @retval None
- */
- void st7735_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
- {
- uint8_t counter = 0;
-
- if(Ypos + Length > ST7735_LCD_PIXEL_HEIGHT) return;
- for(counter = 0; counter < Length; counter++)
- {
- st7735_WritePixel(Xpos, Ypos + counter, RGBCode);
- }
- }
- /**
- * @brief Gets the LCD pixel Width.
- * @param None
- * @retval The Lcd Pixel Width
- */
- uint16_t st7735_GetLcdPixelWidth(void)
- {
- return ST7735_LCD_PIXEL_WIDTH;
- }
- /**
- * @brief Gets the LCD pixel Height.
- * @param None
- * @retval The Lcd Pixel Height
- */
- uint16_t st7735_GetLcdPixelHeight(void)
- {
- return ST7735_LCD_PIXEL_HEIGHT;
- }
- /**
- * @brief Displays a bitmap picture loaded in the internal Flash.
- * @param BmpAddress: Bmp picture address in the internal Flash.
- * @retval None
- */
- void st7735_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp)
- {
- uint32_t index = 0, size = 0;
-
- /* Read bitmap size */
- size = *(volatile uint16_t *) (pbmp + 2);
- size |= (*(volatile uint16_t *) (pbmp + 4)) << 16;
- /* Get bitmap data address offset */
- index = *(volatile uint16_t *) (pbmp + 10);
- index |= (*(volatile uint16_t *) (pbmp + 12)) << 16;
- size = (size - index)/2;
- pbmp += index;
-
- /* Set GRAM write direction and BGR = 0 */
- /* Memory access control: MY = 0, MX = 1, MV = 0, ML = 0 */
- st7735_WriteReg(0x36, 0x40);
- /* Set Cursor */
- st7735_SetCursor(Xpos, Ypos);
-
- LCD_IO_WriteMultipleData((uint8_t*)pbmp, size*2);
-
- /* Set GRAM write direction and BGR = 0 */
- /* Memory access control: MY = 1, MX = 1, MV = 0, ML = 0 */
- st7735_WriteReg(0x36, 0xC0);
- }
- #ifndef __ST7735_H
- #define __ST7735_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Includes ------------------------------------------------------------------*/
- #include "../Common/lcd.h"
- #include "stm32f1xx_board.h"
- /** @addtogroup BSP
- * @{
- */
- /** @addtogroup Components
- * @{
- */
-
- /** @addtogroup ST7735
- * @{
- */
- /** @defgroup ST7735_Exported_Types
- * @{
- */
-
- /**
- * @}
- */
- /** @defgroup ST7735_Exported_Constants
- * @{
- */
-
- /**
- * @brief ST7735 Size
- */
- #define ST7735_LCD_PIXEL_WIDTH ((uint16_t)128)
- #define ST7735_LCD_PIXEL_HEIGHT ((uint16_t)160)
-
- /**
- * @brief LCD Lines depending on the chosen fonts.
- */
- #define LCD_LINE_0 LINE(0)
- #define LCD_LINE_1 LINE(1)
- #define LCD_LINE_2 LINE(2)
- #define LCD_LINE_3 LINE(3)
- #define LCD_LINE_4 LINE(4)
- #define LCD_LINE_5 LINE(5)
- #define LCD_LINE_6 LINE(6)
- #define LCD_LINE_7 LINE(7)
- #define LCD_LINE_8 LINE(8)
- #define LCD_LINE_9 LINE(9)
- #define LCD_LINE_10 LINE(10)
- #define LCD_LINE_11 LINE(11)
- #define LCD_LINE_12 LINE(12)
- #define LCD_LINE_13 LINE(13)
- #define LCD_LINE_14 LINE(14)
- #define LCD_LINE_15 LINE(15)
- #define LCD_LINE_16 LINE(16)
- #define LCD_LINE_17 LINE(17)
- #define LCD_LINE_18 LINE(18)
- #define LCD_LINE_19 LINE(19)
-
- /**
- * @}
- */
- /** @defgroup ADAFRUIT_SPI_LCD_Exported_Functions
- * @{
- */
- void st7735_Init(void);
- uint16_t st7735_ReadID(void);
- void st7735_DisplayOn(void);
- void st7735_DisplayOff(void);
- void st7735_SetCursor(uint16_t Xpos, uint16_t Ypos);
- void st7735_WritePixel(uint16_t Xpos, uint16_t Ypos, uint16_t RGBCode);
- void st7735_WriteReg(uint8_t LCDReg, uint8_t LCDRegValue);
- uint8_t st7735_ReadReg(uint8_t LCDReg);
- void st7735_SetDisplayWindow(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
- void st7735_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
- void st7735_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length);
- uint16_t st7735_GetLcdPixelWidth(void);
- uint16_t st7735_GetLcdPixelHeight(void);
- void st7735_DrawBitmap(uint16_t Xpos, uint16_t Ypos, uint8_t *pbmp);
- /* LCD driver structure */
- extern LCD_DrvTypeDef st7735_drv;
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __ST7735_H */
复制代码
|
|