displaylib_1bit_PICO 2.0.0
1-bit colour graphic display library, Rpi PICO RP2040 library
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
NOKIA_5110 Class Reference

Class Controls SPI comms and LCD functionality. More...

#include <nokia5110.hpp>

Inheritance diagram for NOKIA_5110:
Inheritance graph
[legend]
Collaboration diagram for NOKIA_5110:
Collaboration graph
[legend]

Public Member Functions

 NOKIA_5110 (int16_t width, int16_t height)
 init the LCD class object
 
virtual void drawPixel (int16_t x, int16_t y, uint8_t color) override
 Set a single pixel in the buffer.
 
DisplayRet::Ret_Codes_e LCDSPISetup (spi_inst_t *spi, uint32_t spiBaudRate, int8_t cd, int8_t rst, int8_t cs, int8_t sclk, int8_t din)
 initialise LCD pinmodes and SPI setup
 
void LCDInit (bool Inverse, uint8_t Contrast, uint8_t Bias)
 Init the LCD command sequence, called from begin This sends the commands to the PCD8544 to init LCD.
 
DisplayRet::Ret_Codes_e LCDSetBufferPtr (uint8_t width, uint8_t height, std::span< uint8_t > buffer)
 sets the buffer pointer to the users screen data buffer
 
DisplayRet::Ret_Codes_e LCDupdate (void)
 updates the LCD i.e. writes the shared buffer to the active screen pointed to by ActiveBuffer
 
DisplayRet::Ret_Codes_e LCDclearBuffer (void)
 clears the buffer of the active screen pointed to by ActiveBuffer
 
void LCDBuffer (std::span< uint8_t > data)
 Draw an array to the screen.
 
void LCDenableSleep (void)
 Turn on sleep mode.
 
void LCDdisableSleep (void)
 Turn off sleep mode.
 
bool LCDIsSleeping (void)
 LCDisSleeping.
 
void LCDSPIoff (void)
 End SPI operations.
 
void LCDPowerDown (void)
 Powerdown procedure for LCD see datasheet P40.
 
void LCDSetContrast (uint8_t con)
 Function to set contrast passed a byte.
 
void LCDfillScreen (uint8_t fill=0xFF)
 Writes the buffer (with pattern) to the LCD.
 
void LCDinvertDisplay (bool inv)
 inverts color on display
 
void LCDgotoXY (uint8_t x, uint8_t y)
 LCDgotoXY gotoXY routine to position cursor (x,y)
 
void LCDfillBlock (uint8_t FillData=0xFF, uint8_t RowBlockNum=0)
 LCDFillBlock Clears one of the 6 row blocks(one byte height) on LCD.
 
- Public Member Functions inherited from displaylib_graphics
 displaylib_graphics (int16_t w, int16_t h)
 init the OLED Graphics class object constructor
 
void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color)
 draws a line from (x0,y0) to (x1,y1).
 
void drawFastVLine (int16_t x, int16_t y, int16_t h, uint8_t color)
 Draws a vertical line starting at (x,y) with height h.
 
void drawFastHLine (int16_t x, int16_t y, int16_t w, uint8_t color)
 Draws a horizontal line starting at (x,y) with width w.
 
void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color)
 draws rectangle at (x,y) where h is height and w is width of the rectangle.
 
void fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t color)
 fills a rectangle starting from coordinates (x,y) with width of w and height of h.
 
void fillScreen (uint8_t color)
 Fills the whole screen with a given color.
 
void drawCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color)
 Draws a circle with center coordinates (centerX, centerY) and a given radius.
 
void fillCircle (int16_t x0, int16_t y0, int16_t r, uint8_t color)
 fills a circle where (x0,y0) are center coordinates an r is circle radius.
 
void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color)
 draws a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2).
 
void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint8_t color)
 Fills a triangle defined by the coordinates (x0, y0), (x1, y1), and (x2, y2).
 
void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color)
 draws a rectangle with rounded edges
 
void fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint8_t color)
 Fills a rectangle with rounded edges.
 
void setCursor (int16_t x, int16_t y)
 set the cursor position
 
virtual size_t write (uint8_t)
 write method used in the print class when user calls print
 
DisplayRet::Ret_Codes_e writeChar (int16_t x, int16_t y, char value)
 Write 1 character on OLED.
 
DisplayRet::Ret_Codes_e writeCharString (int16_t x, int16_t y, char *text)
 Write Text character array on OLED.
 
void setTextWrap (bool w)
 turn on or off screen _textwrap of the text (fonts 1-6)
 
void setDrawBitmapAddr (bool mode)
 sets the data addressing mode in drawBitmap function.
 
DisplayRet::Ret_Codes_e drawBitmap (int16_t x, int16_t y, std::span< const uint8_t > bitmap, int16_t w, int16_t h, uint8_t color, uint8_t bg)
 Draw a 1-bit color bitmap.
 
int16_t height (void) const
 Gets the height of the display (per current _rotation)
 
int16_t width (void) const
 Gets the width of the display (per current _rotation)
 
display_rotate_e getRotation (void)
 Gets the _rotation of the display.
 
void setRotation (display_rotate_e r)
 Sets the _rotation of the display.
 
void drawLineAngle (int16_t x, int16_t y, int angle, uint8_t start, uint8_t length, int offset, uint8_t color)
 Draws a line using an angle and length as parameters. This function draws a line starting from (x, y), extending in the direction specified by angle, with a given length. The function also allows applying an offset to the angle before computing the line’s end coordinates.
 
void drawQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color)
 Draws a quadrilateral (four-sided polygon) by connecting four points with lines. This function draws a quadrilateral by drawing four lines between the given vertices. The lines are drawn in the order: (x0, y0) to (x1, y1), (x1, y1) to (x2, y2), (x2, y2) to (x3, y3), and finally (x3, y3) back to (x0, y0).
 
void fillQuadrilateral (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3, uint8_t color)
 Fills a quadrilateral with the specified color using triangles. This function fills a quadrilateral by dividing it into triangles and filling them individually. The quadrilateral is filled by calling the fillTriangle function three times with appropriate vertex coordinates. The useTriangleSplit parameter determines whether the quadrilateral is divided into two triangles or if only one triangle is used.
 
DisplayRet::Ret_Codes_e drawPolygon (int16_t x, int16_t y, uint8_t sides, int16_t diameter, float rotation, bool fill, uint8_t color)
 Draws a polygon with a specified number of sides, diameter, rotation, and color. This function draws a regular polygon by connecting points equally spaced around a circle, with each point having a distance defined by the diameter. The polygon is rotated by the given angle (in degrees) before being drawn. The number of sides is enforced to be at least 3.
 
void drawArc (uint16_t cx, uint16_t cy, uint16_t radius, uint16_t thickness, float startAngle, float endAngle, uint8_t color)
 Draw an arc on the TFT display. This function draws an arc between two angles (start and end) on a circle with a given radius.
 
void drawSimpleArc (int16_t cx, int16_t cy, int16_t radius, float startAngle, float endAngle, uint8_t color)
 Draw a simple arc of one pixel on the display( no offsets , thickness or maximum arc calculations) This function draws an arc between two angles (start and end) on a circle with a given radius.
 
void drawEllipse (int16_t cx, int16_t cy, int16_t semiMajorAxis, int16_t semiMinorAxis, bool fill, uint8_t color)
 Draw an ellipse on the display. This function uses the midpoint ellipse algorithm to efficiently draw an ellipse centered at (cx, cy) with the given semi-major (horizontal) and semi-minor (vertical) axes.
 
DisplayRet::Ret_Codes_e drawDotGrid (int16_t x, int16_t y, int16_t w, int16_t h, uint8_t DotGridGap, uint8_t color)
 Draws a grid of dots on the screen starting from the given coordinates. This function draws a grid of pixels with a specified gap between them. It checks that the provided coordinates and dimensions are within the screen bounds and adjusts them if necessary. It also validates The grid of dots gap value and defaults it to 2 if invalid.
 
float getArcAngleMax () const
 Get the current maximum angle of the arc.
 
void setArcAngleMax (float arcAngleMax)
 Set a new maximum angle for the arc.
 
int getArcAngleOffset () const
 Get the current angle offset.
 
void setArcAngleOffset (int arcAngleOffset)
 Set a new angle offset.
 
- Public Member Functions inherited from displaylib_fonts
 displaylib_fonts ()
 init the OLED font class object constructor
 
DisplayRet::Ret_Codes_e setFont (std::span< const uint8_t > font)
 SSD1306_SetFont.
 
void setInvertFont (bool invertStatus)
 setInvertFont
 
bool getInvertFont (void)
 getInvertFont
 
- Public Member Functions inherited from Print
int getWriteError ()
 gets the error flag status, zero no error
 
void clearWriteError ()
 clears the errof flag by setting it to zero
 
size_t write (const char *str)
 
virtual size_t write (const uint8_t *buffer, size_t size)
 
size_t write (const char *buffer, size_t size)
 
virtual int availableForWrite ()
 
size_t print (const char[])
 
size_t print (char)
 
size_t print (int, int=DEC)
 
size_t print (unsigned int, int=DEC)
 
size_t print (long, int=DEC)
 
size_t print (unsigned long, int=DEC)
 
size_t print (double, int=2)
 
size_t print (const std::string &)
 
size_t println (const char[])
 
size_t println (char)
 
size_t println (int, int=DEC)
 
size_t println (unsigned int, int=DEC)
 
size_t println (long, int=DEC)
 
size_t println (unsigned long, int=DEC)
 
size_t println (double, int=2)
 
size_t println (void)
 
size_t println (const std::string &s)
 

Private Member Functions

void LCDWriteData (uint8_t data)
 Writes a byte to the PCD8544.
 
void LCDWriteCommand (uint8_t command)
 Writes a command byte to the PCD8544.
 

Private Attributes

int8_t _display_CS
 
int8_t _display_CD
 
int8_t _display_RST
 
int8_t _display_SCLK
 
int8_t _display_DIN
 
spi_inst_t * _spiInterface
 
uint8_t _contrast
 
uint8_t _bias
 
bool _inverse = false
 
bool _sleep
 
int16_t _LCD_WIDTH = 84
 
int16_t _LCD_HEIGHT = 48
 
int8_t _LCD_PAGE_NUM = (_LCD_HEIGHT / 8)
 
int16_t _LCD_Display_size = (_LCD_WIDTH * _LCD_PAGE_NUM)
 
std::span< uint8_t > _LCDbuffer
 

Static Private Attributes

static constexpr uint8_t LCD_FUNCTIONSET = 0x20
 
static constexpr uint8_t LCD_POWERDOWN = 0x04
 
static constexpr uint8_t LCD_ENTRYMODE = 0x02
 
static constexpr uint8_t LCD_EXTENDEDINSTRUCTION = 0x01
 
static constexpr uint8_t LCD_DISPLAYCONTROL = 0x08
 
static constexpr uint8_t LCD_DISPLAYBLANK = 0x00
 
static constexpr uint8_t LCD_DISPLAYNORMAL = 0x04
 
static constexpr uint8_t LCD_DISPLAYALLON = 0x01
 
static constexpr uint8_t LCD_DISPLAYINVERTED = 0x05
 
static constexpr uint8_t LCD_SETYADDR = 0x40
 
static constexpr uint8_t LCD_SETXADDR = 0x80
 
static constexpr uint8_t LCD_SETTEMP = 0x04
 
static constexpr uint8_t LCD_CONTRAST = 0xB0
 
static constexpr uint8_t LCD_BIAS = 0x13
 

Additional Inherited Members

- Public Types inherited from displaylib_graphics
enum  PixelColor : uint8_t { BG_COLOR = 0 , FG_COLOR = 1 , INVERSE = 2 }
 Display Pixel colours definition. More...
 
enum  display_rotate_e : uint8_t { rDegrees_0 = 0 , rDegrees_90 = 1 , rDegrees_180 = 2 , rDegrees_270 = 3 }
 
- Public Types inherited from Print
enum  BaseNum : uint8_t { DEC = 10 , HEX = 16 , OCT = 8 , BIN = 2 }
 
- Protected Member Functions inherited from displaylib_graphics
float sineFromDegrees (float angle)
 Computes the sine of an angle given in degrees. This function converts the input angle from degrees to radians and then calculates the sine of that angle using the standard C++ sin function.
 
float cosineFromDegrees (float angle)
 Computes the cosine of an angle given in degrees. This function converts the input angle from degrees to radians and then calculates the cosine of that angle using the standard C++ cos function.
 
void ellipseHelper (uint16_t cx, uint16_t cy, uint16_t x, uint16_t y, uint8_t color)
 
void drawArcHelper (uint16_t cx, uint16_t cy, uint16_t radius, uint16_t thickness, float start, float end, uint8_t color)
 
void drawCircleHelper (int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint8_t color)
 
void fillCircleHelper (int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint8_t color)
 
- Protected Member Functions inherited from Print
void setWriteError (int err=1)
 
- Protected Attributes inherited from displaylib_graphics
const int16_t WIDTH
 
const int16_t HEIGHT
 
display_rotate_e _display_rotate = rDegrees_0
 
int16_t _width
 
int16_t _height
 
int16_t _cursor_x = 0
 
int16_t _cursor_y = 0
 
bool _drawBitmapAddr
 
bool _textwrap = true
 
float _arcAngleMax = 360.0f
 
int _arcAngleOffset = 0
 
- Protected Attributes inherited from displaylib_fonts
std::span< const uint8_t > _FontSelect = pFontDefault
 
uint8_t _Font_X_Size = 0x06
 
uint8_t _Font_Y_Size = 0x08
 
uint8_t _FontOffset = 0x00
 
uint8_t _FontNumChars = 0xFE
 

Detailed Description

Class Controls SPI comms and LCD functionality.

Constructor & Destructor Documentation

◆ NOKIA_5110()

NOKIA_5110::NOKIA_5110 ( int16_t  lcdwidth,
int16_t  lcdheight 
)

init the LCD class object

Parameters
lcdwidthwidth of LCD in pixels
lcdheightheight of LCD in pixels

Member Function Documentation

◆ drawPixel()

void NOKIA_5110::drawPixel ( int16_t  x,
int16_t  y,
uint8_t  color 
)
overridevirtual

Set a single pixel in the buffer.

Parameters
xx coordinate
yy coordinate
colorColor of pixel

Implements displaylib_graphics.

◆ LCDBuffer()

void NOKIA_5110::LCDBuffer ( std::span< uint8_t >  data)

Draw an array to the screen.

Parameters
dataspan to the buffer array
Note
Called by LCDupdate internally to write buffer to screen

◆ LCDclearBuffer()

DisplayRet::Ret_Codes_e NOKIA_5110::LCDclearBuffer ( void  )

clears the buffer of the active screen pointed to by ActiveBuffer

Returns
  1. Success
  2. BufferEmpty if buffer is empty object
Note
Does NOT write to the screen

◆ LCDfillBlock()

void NOKIA_5110::LCDfillBlock ( uint8_t  FillData = 0xFF,
uint8_t  RowBlockNum = 0 
)

LCDFillBlock Clears one of the 6 row blocks(one byte height) on LCD.

Parameters
FillDatadata to write 0-0xFF
RowBlockNumrow block number 0-5

The pattern of data can be reversed by changing filldata i.e 0x0F will half fill a block with ones.

Note
only works in standard 84x48 rotation

◆ LCDfillScreen()

void NOKIA_5110::LCDfillScreen ( uint8_t  Pattern = 0xFF)

Writes the buffer (with pattern) to the LCD.

Parameters
PatternThe pattern to send 0x00 to 0xFF

◆ LCDgotoXY()

void NOKIA_5110::LCDgotoXY ( uint8_t  x,
uint8_t  y 
)

LCDgotoXY gotoXY routine to position cursor (x,y)

Parameters
xrange: 0 to 83 (0 to 0x53)
yrange: 0 to 5 (6 blocks one byte each 6*8 = 48)
Note
only works in standard 84x48 rotation

◆ LCDInit()

void NOKIA_5110::LCDInit ( bool  Inverse,
uint8_t  Contrast,
uint8_t  Bias 
)

Init the LCD command sequence, called from begin This sends the commands to the PCD8544 to init LCD.

Parameters
Inversefalse normal mode true display inverted
ContrastSet LCD VOP contrast range 0xB1-BF
BiasLCD Bias mode 1:48 0x12 to 0x14

◆ LCDinvertDisplay()

void NOKIA_5110::LCDinvertDisplay ( bool  invert)

inverts color on display

Parameters
invertTrue = Inverted mode , False = Display control mode normal

◆ LCDIsSleeping()

bool NOKIA_5110::LCDIsSleeping ( void  )

LCDisSleeping.

Returns
value of _sleep, if true LCD is in sleep mode.

◆ LCDSetBufferPtr()

DisplayRet::Ret_Codes_e NOKIA_5110::LCDSetBufferPtr ( uint8_t  width,
uint8_t  height,
std::span< uint8_t >  buffer 
)

sets the buffer pointer to the users screen data buffer

Parameters
widthwidth of buffer in pixels
heightheight of buffer in pixels
bufferthe buffer array which decays to pointer
Returns
Will return:
  1. 0. Success
  2. 2. Buffer size calculations are incorrect BufferSize = w * (h/8),
  3. 3. Not a valid pointer object.

◆ LCDSetContrast()

void NOKIA_5110::LCDSetContrast ( uint8_t  contrast)

Function to set contrast passed a byte.

Parameters
contrastSet LCD VOP Contrast B0 to BF

◆ LCDSPISetup()

DisplayRet::Ret_Codes_e NOKIA_5110::LCDSPISetup ( spi_inst_t *  spiType,
uint32_t  spiSpeedKhz,
int8_t  cd,
int8_t  rst,
int8_t  cs,
int8_t  sclk,
int8_t  din 
)

initialise LCD pinmodes and SPI setup

Parameters
spiTypeSPi instance to initialize
spiSpeedKhzSPI baud rate in Khz
cdGPIO data or command
rstGPIO reset
csGPIO Chip select
sclkGPIO SPI Clock
dinGPIO MOSI
Returns
At present just success.

◆ LCDupdate()

DisplayRet::Ret_Codes_e NOKIA_5110::LCDupdate ( void  )

updates the LCD i.e. writes the shared buffer to the active screen pointed to by ActiveBuffer

Returns
  1. Success
  2. BufferEmpty if buffer is empty object

◆ LCDWriteCommand()

void NOKIA_5110::LCDWriteCommand ( uint8_t  command)
private

Writes a command byte to the PCD8544.

Parameters
commandThe command byte to send

◆ LCDWriteData()

void NOKIA_5110::LCDWriteData ( uint8_t  dataByte)
private

Writes a byte to the PCD8544.

Parameters
dataBytebyte will be sent as command or data depending on status of DC line

Member Data Documentation

◆ _bias

uint8_t NOKIA_5110::_bias
private

LCD bias

◆ _contrast

uint8_t NOKIA_5110::_contrast
private

LCD contrast

◆ _display_CD

int8_t NOKIA_5110::_display_CD
private

GPIO Data or command line

◆ _display_CS

int8_t NOKIA_5110::_display_CS
private

GPIO Chip select line

◆ _display_DIN

int8_t NOKIA_5110::_display_DIN
private

GPIO MOSI Line , Tied to SPI interface

◆ _display_RST

int8_t NOKIA_5110::_display_RST
private

GPIO Reset line

◆ _display_SCLK

int8_t NOKIA_5110::_display_SCLK
private

GPIO Clock Line , Tied to SPI interface

◆ _inverse

bool NOKIA_5110::_inverse = false
private

LCD inverted , false for off

◆ _LCD_Display_size

int16_t NOKIA_5110::_LCD_Display_size = (_LCD_WIDTH * _LCD_PAGE_NUM)
private

Size of standard display 84 * 48/6 = 504 bytes

◆ _LCD_HEIGHT

int16_t NOKIA_5110::_LCD_HEIGHT = 48
private

Height of LCD Screen in pixels

◆ _LCD_PAGE_NUM

int8_t NOKIA_5110::_LCD_PAGE_NUM = (_LCD_HEIGHT / 8)
private

Number of byte size pages LCD screen is divided into

◆ _LCD_WIDTH

int16_t NOKIA_5110::_LCD_WIDTH = 84
private

Width of LCD Screen in pixels

◆ _LCDbuffer

std::span<uint8_t> NOKIA_5110::_LCDbuffer
private

Buffer to hold screen data

◆ _sleep

bool NOKIA_5110::_sleep
private

LCD sleep mode

◆ _spiInterface

spi_inst_t* NOKIA_5110::_spiInterface
private

SPI instance spi0 or spi1

◆ LCD_BIAS

constexpr uint8_t NOKIA_5110::LCD_BIAS = 0x13
staticconstexprprivate

LCD Bias mode 1:48 0x12 to 0x14

◆ LCD_CONTRAST

constexpr uint8_t NOKIA_5110::LCD_CONTRAST = 0xB0
staticconstexprprivate

default value set LCD VOP contrast range 0xB1-BF

◆ LCD_DISPLAYALLON

constexpr uint8_t NOKIA_5110::LCD_DISPLAYALLON = 0x01
staticconstexprprivate

all pixels on

◆ LCD_DISPLAYBLANK

constexpr uint8_t NOKIA_5110::LCD_DISPLAYBLANK = 0x00
staticconstexprprivate

Blank display

◆ LCD_DISPLAYCONTROL

constexpr uint8_t NOKIA_5110::LCD_DISPLAYCONTROL = 0x08
staticconstexprprivate

Set display control

◆ LCD_DISPLAYINVERTED

constexpr uint8_t NOKIA_5110::LCD_DISPLAYINVERTED = 0x05
staticconstexprprivate

display inverted

◆ LCD_DISPLAYNORMAL

constexpr uint8_t NOKIA_5110::LCD_DISPLAYNORMAL = 0x04
staticconstexprprivate

normal mode display

◆ LCD_ENTRYMODE

constexpr uint8_t NOKIA_5110::LCD_ENTRYMODE = 0x02
staticconstexprprivate

LCD entry mode

◆ LCD_EXTENDEDINSTRUCTION

constexpr uint8_t NOKIA_5110::LCD_EXTENDEDINSTRUCTION = 0x01
staticconstexprprivate

LCD get into the EXTENDED mode when combined with Function set

◆ LCD_FUNCTIONSET

constexpr uint8_t NOKIA_5110::LCD_FUNCTIONSET = 0x20
staticconstexprprivate

LCD function set

◆ LCD_POWERDOWN

constexpr uint8_t NOKIA_5110::LCD_POWERDOWN = 0x04
staticconstexprprivate

LCD power off

◆ LCD_SETTEMP

constexpr uint8_t NOKIA_5110::LCD_SETTEMP = 0x04
staticconstexprprivate

set temperature coefficient

◆ LCD_SETXADDR

constexpr uint8_t NOKIA_5110::LCD_SETXADDR = 0x80
staticconstexprprivate

X axis address setting

◆ LCD_SETYADDR

constexpr uint8_t NOKIA_5110::LCD_SETYADDR = 0x40
staticconstexprprivate

Y axis address setting


The documentation for this class was generated from the following files: