The LCD Nokia 5110 is a low-cost, 84x48 pixel monochrome graphic display driven by the PCD8544 controller chip via a 4-wire SPI interface.

Integrating this display into a project changes your circuit by shifting debug output and user feedback from a serial terminal to a standalone visual interface while maintaining microamp-level sleep currents. However, it forces the addition of logic-level translation if your microcontroller runs at 5V. Hobbyists frequently confuse the LCD Nokia 5110 with the I2C-based SSD1306 OLED (which uses a completely different protocol and 4-pin wiring scheme) and incorrectly assume it is 5V tolerant like standard HD44780 character LCDs. It is not; feeding 5V logic into its data pins will permanently destroy the PCD8544 silicon.

The Direct Answer: If you are building an indoor, general-purpose dashboard, buy the SSD1306 128x64 I2C OLED. Choose the LCD Nokia 5110 only when your project requires extreme outdoor sunlight readability, sub-1mA sleep currents for battery operation, or you are working with a strict sub-$3.00 component budget.

Core Architecture: The PCD8544 and SPI Memory Math

The heart of the LCD Nokia 5110 is the Philips PCD8544 controller. Unlike modern I2C displays that handle their own internal memory buffering, the PCD8544 relies on a shift-register architecture. You must clock data in sequentially via the SPI bus (MOSI and SCLK pins), controlled by the Data/Command (D/C) and Chip Enable (SCE) pins.

To understand why this display behaves the way it does on memory-constrained microcontrollers, we need to look at the frame buffer math. This is a critical numeric reality for embedded C/C++ developers:

Frame Buffer Calculation:
84 columns × 48 rows = 4,032 total pixels.
Because it is monochrome (1 bit per pixel), the display requires exactly 504 bytes of RAM (4,032 ÷ 8) to hold a full-screen image.
An ATmega328P (Arduino Uno) has 2,048 bytes of SRAM. A full-screen buffer consumes 24.6% of your total available memory before your application logic even begins.

Furthermore, the PCD8544 organizes these 504 bytes into 6 horizontal banks (rows), each 8 pixels high and 84 columns wide. When you write data to the display, it fills vertically within that 8-pixel bank, column by column. If you attempt to draw a single horizontal line across the screen by manipulating individual bits without a local RAM buffer, you must perform bitwise read-modify-write operations on the fly, which is computationally expensive on an 8-bit AVR chip.

What It Changes in Your Circuit: Voltage and Backlight Realities

Wiring the LCD Nokia 5110 requires strict attention to voltage thresholds. The most common bench failure I see is a melted or bricked display module because a builder plugged the MOSI and SCLK pins directly into a 5V Arduino Uno.

The 3.3V Logic Constraint

The PCD8544 datasheet specifies a maximum logic high voltage ($V_{IH}$) of $V_{DD} + 0.3V$. Since the display's $V_{DD}$ is 3.3V, any voltage above 3.6V on the SCE, RST, D/C, MOSI, or SCLK pins risks destroying the internal gate oxides. If you are using a 5V microcontroller, you must use a level shifter (like a CD4050B non-inverting buffer) or a simple resistor voltage divider (e.g., 10kΩ series, 15kΩ to ground) on every data line. If you are using an ESP32, Raspberry Pi Pico, or a 3.3V Arduino Pro Mini, you can wire them directly.

The Backlight LED Pin

The 8th pin on the breakout board is marked 'LED' or 'BL'. This is not a logic pin; it is the anode for the backlight LEDs. Do not tie the LED pin directly to 5V or 3.3V without a current-limiting resistor. The forward voltage of the blue/white backlight is typically around 3.0V to 3.2V. Connecting it to 3.3V via a 100Ω to 330Ω resistor limits the current to a safe ~15mA, preventing thermal runaway and blown traces on cheap clone PCBs.

Where You Meet This in Practice

While OLEDs have largely taken over the indoor hobbyist market, the LCD Nokia 5110 remains highly relevant in specific field-deployed scenarios:

  • Solar-Powered Dataloggers: The PCD8544 draws roughly 1mA to 3mA during active SPI writes, but when the display is static and the chip enable (SCE) is pulled high, the sleep current drops to microamps. This is vastly superior to the quiescent current of many cheap TFT displays.
  • Outdoor Weather Stations: The reflective nature of the LCD (especially when the backlight is turned off) makes it highly readable in direct, harsh sunlight—a scenario where standard SSD1306 OLEDs wash out and become unreadable.
  • Low-Cost Educational Kits: At roughly $2.50 to $3.50 per unit in bulk, it remains one of the cheapest graphic displays available for teaching SPI protocols and bitwise operations to trade students and hobbyists.

Decision Tree: Nokia 5110 vs. SSD1306 vs. ST7735

Choosing a display shouldn't be an open-ended 'it depends' scenario. Use this decision matrix to select the exact part number for your BOM.

Criteria LCD Nokia 5110 (PCD8544) SSD1306 128x64 OLED (I2C) ST7735 1.8" TFT (SPI)
Resolution & Color 84x48 Monochrome 128x64 Monochrome 160x128 RGB Color
Interface 4-wire SPI I2C (or SPI) 4-wire SPI
Sunlight Readability Excellent (Reflective) Poor (Washes out) Fair (Transflective variants)
Active Current Draw ~2mA (Backlight off) ~15mA - 20mA ~40mA - 80mA
Memory Overhead 504 bytes 1024 bytes 20,480+ bytes
Typical 2026 Price $2.50 - $3.50 $3.50 - $5.00 $6.00 - $9.00
The Final Pick: For 90% of new builds, purchase the 0.96-inch SSD1306 I2C OLED. It requires only 4 wires, has built-in charge pumps (no negative voltage generation needed), and uses the ubiquitous U8g2 or Adafruit_SSD1306 libraries.

Override to LCD Nokia 5110 ONLY if: Your device will sit in direct sunlight, OR your power budget requires the display to consume less than 3mA continuously on a coin-cell battery.

Debugging Ghosting, Contrast, and Initialization

If you have wired the display correctly but the screen is completely black, entirely white, or showing 'ghost' artifacts from previous frames, the issue is almost always in the initialization sequence—specifically the VOP (Voltage Operating) command.

The PCD8544 requires an internal charge pump to generate the high voltage needed to twist the liquid crystals. This is controlled by the VOP register. According to the Adafruit PCD8544 documentation, the VOP command is sent as a byte starting with 1000 0000 (0x80), followed by a 7-bit contrast value.

For original Philips displays, a contrast value around 0x90 to 0xA0 was standard. However, the vast majority of displays sold today are third-party clones with different LCD glass characteristics. These clones typically require a much higher VOP setting, usually between 0xB0 and 0xBF.

Fixing Ghosting: If old text remains faintly visible after drawing new text, your code is likely failing to clear the display buffer before writing new data, or you are not sending the full 504 bytes to overwrite the previous shift-register state. Always push a full 504-byte array of zeros to the display before rendering a new frame, or use a library like Arduino's native SPI library paired with a dedicated PCD8544 graphics buffer class to handle the bitwise clearing automatically.

Frequently Asked Questions

Can I use software SPI (bit-banging) instead of hardware SPI?
Yes. The PCD8544 does not require the high clock speeds of modern TFTs. A clock speed of 1 MHz to 4 MHz is plenty. You can safely bit-bang the protocol on any GPIO pins if your hardware SPI bus is already occupied by an SD card or RF module. Just ensure your software delays respect the setup and hold times outlined in the datasheet.

Why does my display show horizontal lines instead of my text?
This happens when the D/C (Data/Command) pin is miswired or left floating. The PCD8544 uses the D/C pin to distinguish between configuration commands (D/C = LOW) and pixel data (D/C = HIGH). If the pin floats, the controller interprets your pixel data as memory-addressing commands, scrambling the internal pointers and resulting in horizontal line artifacts.

Do I need a capacitor on the VCC pin?
Yes. Place a 0.1µF (100nF) ceramic decoupling capacitor as close to the VCC and GND pins on the breakout board as possible. The internal charge pump generates high-frequency switching noise; without local decoupling, this noise will couple into your microcontroller's ADC lines, ruining analog sensor readings.