Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.

Nokia 5110 LCD with Arduino Uno — 3.3 V safe wiring and contrast tuning

Wire a Nokia 5110 (PCD8544) to an Arduino Uno R3 safely: 3.3 V power, 1 kΩ / 2 kΩ dividers on five lines, hardware SPI, and contrast set from Serial.

Arduino C++Verified — core avr 1.8.8, Adafruit PCD8544 Nokia 5110 LCD library 2.0.3, 3 Nov 2026Compile-only

Community draft — report a mistake

The Nokia 5110 LCD is a ₹200 84×48 monochrome screen with a backlight, good for small menus and battery gadgets. Its controller, the PCD8544, is a 3.3 V chip — the one detail that decides how you wire it to an Uno.

Power it from the Uno’s 3.3V pin, and pass each of the five signal lines through a 1 kΩ / 2 kΩ divider: RST on D9, CE on D10, DC on D8, and hardware SPI on D11 (DIN) and D13 (CLK). The sketch shows an uptime counter in large digits and lets you tune the contrast from the Serial Monitor — the most common reason a new 5110 shows nothing.

Wiring

Arduino Uno R3Only the pins used are shown · 5 V logicNokia 5110 LCD (84×48, PCD8544)330 Ω1k│2k1k│2k1k│2k1k│2k1k│2k3.3VGNDD8D9D10D11D13RSTCEDCDINCLKVCCBLGND
Also needed: 5 × 1 kΩ and 5 × 2 kΩ resistors (or a 74HC4050 buffer powered from 3.3 V), 330 Ω resistor for the backlight.
Every connection
Arduino Uno R3Nokia 5110 LCD (84×48, PCD8544)WireNotes
D9RSTorangeVia 1 kΩ / 2 kΩ divider
D10CEpurpleVia 1 kΩ / 2 kΩ divider — Chip select (SCE on blue boards).
D8DCblueVia 1 kΩ / 2 kΩ divider
D11DINgreenVia 1 kΩ / 2 kΩ divider — Hardware SPI MOSI.
D13CLKyellowVia 1 kΩ / 2 kΩ divider — Hardware SPI SCK.
3.3VVCCredNever 5V — the PCD8544 is a 3.3 V chip. It draws well under 1 mA.
GNDBLblackVia 330 Ω — Red boards light the backlight with BL to GND. Blue boards: BL through 330 Ω to 3.3V instead.
GNDGNDblack

3.3 V (2.7–3.3 V) part, 5 V board. The PCD8544 is a 3.3 V chip and its inputs are not 5 V tolerant. ESP32 and Pico connect directly. On an Uno power it from 3.3 V and drop the five signal lines through a level shifter (or 10 kΩ series resistors on RST, DC, DIN, CLK and 1 kΩ on CE as a quick fix).

Board quirks

  • The PCD8544’s inputs are not 5 V tolerant. Each of the five lines from the Uno gets a 1 kΩ / 2 kΩ divider, so 5 V arrives as 3.3 V. The often-quoted shortcut — 10 kΩ series resistors — relies on the chip’s protection diodes and is a quick hack, not a fix.
  • Power goes to the Uno’s 3.3V pin. The 5 V pin damages the display, sometimes slowly.
  • The frame buffer is 84 × 48 / 8 = 504 bytes — a quarter of the Uno’s RAM, but it fits. That is why the sketch can draw everything and send it with one display() call.
  • Contrast differs between modules and with temperature. Open the Serial Monitor at 9600 baud and send + or - until the text is crisp, then put that number in contrast.
  • Hardware SPI uses D11 and D13. The red board and the blue board print their pins in a different order and switch the backlight differently (BL to GND vs to 3.3V) — follow the labels on your board, not a photo.

Code

nokia5110-uno.inoArduino C++Open in PlaygroundOpen in PlaygroundFlash
// Nokia 5110 LCD (PCD8544) on an Arduino Uno R3 — hardware SPI through dividers, contrast from Serial.
// CLK ← D13, DIN ← D11, CE ← D10, DC ← D8, RST ← D9 — each through a 1 kΩ / 2 kΩ divider (3.3 V chip).
// VCC → 3.3V, GND → GND, BL → 330 Ω → GND (red boards; blue boards: BL via 330 Ω to 3.3V).
// Type + or - in the Serial Monitor to find the right contrast for your module.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

const int8_t LCD_DC = 8, LCD_CE = 10, LCD_RST = 9;
Adafruit_PCD8544 lcd(LCD_DC, LCD_CE, LCD_RST);  // 3-pin constructor = hardware SPI on D11/D13
uint8_t contrast = 50;

void drawScreen() {
  lcd.clearDisplay();
  lcd.setTextSize(1);
  lcd.setCursor(0, 0);
  lcd.println(F("Uno + 5110"));
  lcd.print(F("Contrast "));
  lcd.println(contrast);
  lcd.setTextSize(2);
  lcd.setCursor(0, 22);
  lcd.print(millis() / 1000);
  lcd.print('s');
  lcd.display();  // the whole 504-byte frame goes out in one go
}

void setup() {
  Serial.begin(9600);
  lcd.begin(contrast);
  Serial.println(F("Nokia 5110 ready. Send + or - to change contrast."));
}

void loop() {
  while (Serial.available()) {
    char c = Serial.read();
    if (c == '+' && contrast < 127) contrast++;
    if (c == '-' && contrast > 0) contrast--;
    if (c == '+' || c == '-') {
      lcd.setContrast(contrast);
      Serial.print(F("Contrast "));
      Serial.println(contrast);
    }
  }
  drawScreen();
  delay(250);
}

Library: Adafruit PCD8544 Nokia 5110 LCD library (Adafruit (also install Adafruit GFX Library)) — compiled with Adafruit PCD8544 Nokia 5110 LCD library 2.0.3.

Expected serial output

Serial Monitor · 9600Output
Nokia 5110 ready. Send + or - to change contrast.
Contrast 51
Contrast 52
Contrast 53

Common errors

Screen all black or all blank

Contrast. Send + or - in the Serial Monitor until text appears (40–65 suits most modules).

Backlight on, no text, contrast makes no difference

No data: a divider with its resistors swapped (1 kΩ belongs on the Uno side), DIN/CLK not on D11/D13, or RST floating.

Display worked on 5 V, now shows faint lines

Over-voltage damage. Move VCC to 3.3V and add the dividers; a damaged glass may not recover.

↑↓ to move · Enter to open