LCD
This API provides functions to interact with the LCD and VRAM, allowing direct memory access, getter/setter methods, and palette-based drawing.
Changes to VRAM are not automatically rendered on the LCD and must be explicitly refreshed using LCD_Refresh
.
Available methods are:
- LCD_ClearScreen: Clears the screen by filling VRAM with white.
- LCD_GetPixel: Retrieves the color of a pixel from VRAM.
- LCD_GetSize: Retrieves the dimensions of the LCD.
- LCD_GetVRAMAddress: Returns a pointer to the VRAM.
- LCD_Refresh: Pushes the content of the VRAM to the LCD.
- LCD_SetPixel: Sets the color of a pixel in VRAM.
- LCD_SetPixelFromPalette: Sets the color of a pixel using a predefined palette.
- LCD_VRAMBackup: Backs up the current contents of VRAM.
- LCD_VRAMRestore: Restores the backed-up contents of VRAM.
Palette Colors
Section titled “Palette Colors”The following colors can be used with LCD_SetPixelFromPalette
:
const uint8_t PALETTE_BLACK = 0;const uint8_t PALETTE_BLUE = 1;const uint8_t PALETTE_GREEN = 2;const uint8_t PALETTE_CYAN = 3;const uint8_t PALETTE_RED = 4;const uint8_t PALETTE_MAGENTA = 5;const uint8_t PALETTE_YELLOW = 6;const uint8_t PALETTE_WHITE = 7;
RGB565 Color Conversion Macros
Section titled “RGB565 Color Conversion Macros”- RGB_TO_RGB565: Converts RGB values to RGB565 format.
- RGB565_TO_R: Extracts the red component from an RGB565 value.
- RGB565_TO_G: Extracts the green component from an RGB565 value.
- RGB565_TO_B: Extracts the blue component from an RGB565 value.
Methods
Section titled “Methods”Clear Screen
Section titled “Clear Screen”extern "C"void LCD_ClearScreen();
Clears the LCD by filling VRAM with white.
Get Pixel
Section titled “Get Pixel”extern "C"uint16_t LCD_GetPixel(int x, int y);
Returns the color of a pixel in VRAM.
- Parameters:
x
,y
: Coordinates of the pixel.
- Returns: The color of the pixel in RGB565 format.
Get LCD Size
Section titled “Get LCD Size”extern "C"void LCD_GetSize(int *width, int *height);
Retrieves the size of the LCD.
- Parameters:
width
,height
: Pointers to store the dimensions of the LCD.
Get VRAM Address
Section titled “Get VRAM Address”Returns a pointer to the VRAM.
extern "C"uint16_t *LCD_GetVRAMAddress();
Refresh LCD
Section titled “Refresh LCD”Pushes the content of the VRAM to the LCD.
extern "C"void LCD_Refresh();
Call this after doing any Debug_Printf
or drawing on screen to view the changes.
Set Pixel
Section titled “Set Pixel”Sets the color of a pixel in VRAM.
extern "C"void LCD_SetPixel(int x, int y, uint16_t color);
- Parameters:
x
,y
: Coordinates of the pixel.color
: The color to set in RGB565 format.
Set Pixel (From Palette)
Section titled “Set Pixel (From Palette)”Sets the color of a pixel using a predefined palette.
extern "C"void LCD_SetPixelFromPalette(int x, int y, uint8_t index);
- Parameters:
x
,y
: Coordinates of the pixel.index
: Index of the color in the palette.
VRAM Backup
Section titled “VRAM Backup”Backs up the current contents of VRAM.
extern "C"void LCD_VRAMBackup();
VRAM Restore
Section titled “VRAM Restore”Restores the backed-up contents of VRAM.
extern "C"void LCD_VRAMRestore();
Drawing a purple rectangle
Section titled “Drawing a purple rectangle”The following code draws a 30x50 Rectangle at (10, 20) in Purple
#include <sdk/os/lcd.hpp>
void example_draw_rectangle() { uint16_t *vram = LCD_GetVRAMAddress(); int width, height; LCD_GetSize(&width, &height);
for (int y = 0; y < 50; ++y) { for (int x = 0; x < 30; ++x) { vram[(x + 10) + (y + 20) * width] = RGB_TO_RGB565(0xFF, 0x00, 0xFF); } }
// Put our changes on the display LCD_Refresh();}
// call example_draw_rectangle in your main
Random Pixel Changes
Section titled “Random Pixel Changes”#include <sdk/os/lcd.hpp>
static uint32_t seed = 12345; // You can change this seed to any value
int rand() { seed = (1103515245 * seed + 12345) & 0x7fffffff; return seed;}
void random_pixels() { uint16_t *vram = LCD_GetVRAMAddress(); int width, height; LCD_GetSize(&width, &height);
for (int y = 0; y < 20; ++y) { for (int x = 0; x < width; ++x) { vram[(x) + (y)*width] = RGB_TO_RGB565(my_rand() % 32, my_rand() % 64, my_rand() % 32); } }
// Put our changes on the display LCD_Refresh();}