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.
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:
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 |
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.






