Search Results for

    Show / Hide Table of Contents

    LCD

    These functions allow for graphics on multiple display types, including B&W and color display.

    B&W Displays

    LCD Graphics supports SSD1306 128x64 B&W I2C, which work on all BrainPad boards. This display is found on the BrainPad Pulse by default, and can be added to the I2C channel on all of the other boards. These displays are available in multiple sizes but most common is 0.96". The LcdConfig() function (documented below) can be used to configure the system to work with an externally connected display.

    SSD1306

    Tip

    We have tested 2.42" displays that use SSD1309 and seemed to work perfectly.

    SSD1309

    Caution

    Displays with knock-off controller SSH1106 that is supposed to be compatible with SSD1306 did not work as expected.

    Color Displays

    ColorDisplays

    Support for color displays includes ILI9342, ILI9341, and ST7735. These color displays only work on boards with SC13 chipset. The LcdConfig() function (documented below) can be used to configure the system to work with an externally connected display.

    Display Configuration

    • LcdConfig(address, config, cs, dc) Configures a connected display.
      address: Display's address or type. 0 = on-board display.
      config: external LCD configuration.
      cs: Chip select pin.
      dc: Data control pin.
    Tip

    This function is not needed to use the on-board display.

    address: For I2C displays: This is the 7-bit I2C device's address of the connected SSD1306 display. All other arguments are ignored. For SPI displays: This is the SPI display's type 0x08: ILI9342, 0x81: ILI9341, 0x82: ST7735.

    config: these values can be added together to make up the desired configuration.

    value (bits) Function Value
    1 (bit0) Orientation 0: Landscape, 1: Portrait
    2 (bit1) Flip Horizontal 0: None, 1: Flip
    4 (bit2) Flip Vertical 0: None, 1: Flip
    8 (bit3) RGB 0: None, 1: BGR
    16 (bit4) Swap Byte Endianness 0: None, 1: Swap
    32 (bit5) Reserved
    64 (bit6) Reserved
    128 (bit7) Reserved
    bits[8..11] Window x Special config
    bits[12..15] Window y Special config

    cs: The pin connected to the display's Chip select signal.

    dc: The pin connected to the display's Data Control signal.

    This example will set the system to use the color display adapter from Waveshare, which uses ST7735 1.8" display. The display's chip select is on pin 16 and data control is on pin 12. There is also a backlight on pin 1 and reset on pin 8 that need to be controlled manually.

    The display on adapter needs to be flipped horizontally (config value 2) and also requires this value added, 0x2100. This sets the drawing window.

    ST7735

    DWrite(1,1)#turn on the back-light
    DWrite(8,1)# release reset 
    
    LcdConfig (0x82,2+0x2100,16,12)
    LcdClear(0)
    LcdTextS("DUE has Color",0x00FF00,0,0,2,3)
    
    for c in range(2,200)
        LcdLine(c,c,40,c,60)
        LcdLine(c<<8,200-c,60,200-c,80)
        LcdLine(c<<16,c,80,c,100)
    next
    
    LCDShow() 
    

    To set the display to portrait mode, change the config line to LcdConfig (0x82, 1+0x2100, 16, 12). Flip is not needed in this case.

    ST7735

    This example below will direct graphics to an external 2.42" display with address 0x3C, wired to the 2.42" SSD1309 display showing in the image above. Tip: A resistor on the back of the display needs to be moved to change its bus from SPI to I2C.

    LcdConfig(0x3C,0,0,0)
    LcdClear(0)
    LcdText("Hello World",1,10,10)
    LcdShow()
    

    Graphical Memory

    All LCD functions process the graphics commands in an internal memory. It starts with LcdClear(), which clears up the entire graphics memory to a specific color. When the user is ready, the graphical memory is transferred to the display using LcdShow().

    • LcdShow() Sends the display buffer to the LCD.

    • LcdClear(color) Clears the entire screen to black or white
      color: Color value

    LcdClear(0)
    LcdShow()
    

    Color Value

    The system supports Color and B&W displays. To keep uniformity, 0 is always black and 1 is always white. Any other value is considered a standard RGB color formatted 0xRRGGBB. For example, GHI Electronics blue is 0x0977aa.

    Draw Line

    • LcdLine(color, x1,y1,x2,y2)
      color: Color value
      x1: Starting x point
      y1: Starting y point
      x2: Ending x point
      y2: Ending y point
    LcdClear(0)
    LcdLine(1,0,0,128,64)
    LcdShow()
    

    Set Pixel

    • LcdPixel(color, x, y)
      color: Color value
      x: x pixel value
      y: y pixel value
    LcdClear(0)
    LcdPixel(1,64,32)
    LcdShow()
    

    Draw Circle

    • LcdCircle(color, x,y,radius)
      color: Color value
      x: x position of circle's center
      y: y position of circle's center
      radius: radius of the circle
    LcdClear(0)
    LcdCircle(1,64,32,31)
    LcdShow()
    

    Draw Rectangle

    • LcdRect(color, x, y, width, height)
      color: Color value
      x: Starting x point
      y: Starting y point
      width: Rectangle width
      height: Rectangle height
    LcdClear(0)
    LcdRect(1,10,10,118,54)
    LcdShow()
    

    Draw Filled Rectangle

    • LcdFill(color, x, y, width, height)
      color: Color value
      x: Starting x point
      y: Starting y point
      width: Rectangle width
      height: Rectangle height
    LcdClear(0)
    LcdFill(1,10,10,118,54)
    LcdShow()
    

    Draw Text

    • LcdText("text", color, x, y)
      text: String message in double quotes.
      Str(): is used to convert variables to strings
      color: Color value
      x: x position
      y: x position
    LcdClear(0)
    LcdText("Hello World",1,10,10)
    LcdShow()
    x=100
    LcdClear(0)
    LcdText(Str(x),1,0,0)
    LcdShow
    

    Draw Tiny Text

    Displays tiny 5px text.

    • LcdTextT("text", color, x, y)
      text: String message in double quotes.
      Str(): is used to convert variables to strings
      color: Color value
      x: x position
      y: x position

    Draw Scaled Text

    Works exactly the same as LcdText() but adds scaling.

    • LcdTextS("text", color, x, y, scaleWidth, scaleHeight)
      text: String message in double quotes.
      Str(): is used to convert variables to strings
      color: Color value
      x: x position
      y: x position
      scaleWidth: Width scale multiplier
      scaleHeight: Height scale multiplier
    LcdClear(0)
    LcdTextS("Hello",1,0,0,2,2)
    LcdShow()
    Wait(1000)
    x=100
    LcdClear(0)
    LcdTextS(Str(x),1,0,0,2,2)
    LcdShow()
    
    Tip

    Scale is multiplier for the pixel in width and height to make the font larger ()

    Draw Image

    • LcdImg(array, x, y, transform)
      array: Image array (see below).
      x: x position on screen.
      y: y position on screen.
      transform: transform modifier.

    There are cases where images need to be added to the screen. Of course, we are taking about basic simple images, more like a tiny sprite in a game.

    The image is an array of pixels. This arrays must start with 2 elements that contain the image's width and height. We will place the array on multi line to help us visualize what the image might look like, but placing everything on a single line has the same effect

    Image Array formatting:

    Dim a[2+(8*8)] = [8,8,
    0, 0, 0, 1, 1, 0, 0, 0,
    0, 0, 1, 1, 1, 1, 0, 0,
    0, 1, 1, 1, 1, 1, 1, 0,
    1, 1, 0, 1, 1, 0, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1,
    0, 0, 1, 0, 0, 1, 0, 0,
    0, 1, 0, 1, 1, 0, 1, 0,
    1, 0, 1, 0, 0, 1, 0, 1]
    

    The following example displays the image array on the screen.

    Dim a[2+(8*8)] = [8,8,
    0, 0, 0, 1, 1, 0, 0, 0,
    0, 0, 1, 1, 1, 1, 0, 0,
    0, 1, 1, 1, 1, 1, 1, 0,
    1, 1, 0, 1, 1, 0, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1,
    0, 0, 1, 0, 0, 1, 0, 0,
    0, 1, 0, 1, 1, 0, 1, 0,
    1, 0, 1, 0, 0, 1, 0, 1]
    LcdClear(0)
    LcdImg(a,60,30,0)
    LcdShow()
    

    Transformation modifiers:

    Value Transformation
    0 No transform
    1 Flip image horizontally
    2 Flip image vertically
    3 Rotate image 90 degrees
    4 Rotate image 180 degrees
    5 Rotate the image 270 degrees(same as -90 degrees)

    Draw Scaled Image

    Works the same as LcdImg() but adds scaling.

    • LcdImgS(array, x, y, scaleWidth, scaleHeight, transform)
      array: Image array (see below).
      x: x position on screen.
      y: y position on screen.
      scaleWidth: Width scale multiplier
      scaleHeight: Height scale multiplier
      transform: transform modifier. (see above)

    LCD Stream

    Stream is used to send the entire LCD update.

    Note

    Streams are not coded directly using DUE Script, see Streams

    • LcdStream(colorDepth)
      ColorDepth: This lets the stream know what is the format of the incoming data stream. B&W displays only support 1. Color displays support 4 (palette), 8, and 16 bits.

    The command is followed by the data stream. The stream size is determined by the used screen size and the color depth. For example, Pulse uses a 128x64 display with 1bpp. This results in 128x64/8 = 1KBytes.

    Tip

    On 1bpp display, the data is organized as 8bit columns going left to right and then wrapping around to the next row.

    Palette

    • Palette(index, colorValue) - Sets the desired color for a palette.
      index: Index number of color
      colorValue: A standard HEX value of the RGB color.

    The palette is used when 4bpp color depth is used with streams. The palette table is used as a lookup table to set the color for each one of the 16 possibilities. The default colors are below; however, the user can change it to whatever they desire. For example, they can be set to 16 shades of green to show a forest scene that needs different shades of green.

    Default colors:

    Index Color Value Color
    0 0x000000 Black
    1 0xFFFFFF White
    2 0xFF0000 Red
    3 0x32CD32 Lime
    4 0x0000FF Blue
    5 0xFFFF00 Yellow
    6 0x00FFFF Cyan
    7 0xFF00FF Magenta
    8 0xC0C0C0 Silver
    9 0x808080 Gray
    10 0x800000 Maroon
    11 0xBAB86C Olive
    12 0x00FF00 Green
    13 0xA020F0 Purple
    14 0x008080 Teal
    15 0x000080 Navy

    Example code to set a pixel at 10x10

    int x=10;
    int y=10;
    
    buffer[(y >> 3) * 128 + x] |= (byte)(1 << (y & 7));
    
    Note

    LCD Stream automatically calls LcdShow() internally.

    • Improve this Doc
    In This Article
    Back to top Copyright © 2023 GHI Electronics, LLC
    Generated by DocFX