Audience: engineers, makers, and product teams building prototypes or embedded devices. This tutorial walks you from hardware selection to wiring, libraries, sample code, troubleshooting, and production-grade tips—using components you can source directly from Longtech.
Need a specific size, pinout, or custom icon set? Explore semi-custom & custom LCD options at Custom Display and shorten your time-to-market with engineering-ready modules.

What You’ll Learn
- Pick the right LCD type for your project (Character, Graphic, Segment, TFT, OLED)
- Understand I2C vs SPI trade-offs and when to choose each
- Wire an I2C Character LCD to Arduino and print text in minutes
- Wire a SPI Graphic LCD and render crisp text/graphics with U8g2
- Diagnose the top 10 issues (blank screen, garbled text, dim backlight, etc.)
- Apply industrial best practices (wide temperature, EMI, contrast, backlight uniformity)
Looking for product families first? Browse:
Character LCD • Graphic LCD • Segment LCD • TFT LCD • OLED Modules
Hardware & Software Checklist
Hardware
- Arduino UNO/Nano/MEGA (5 V) or 3.3 V boards (e.g., SAMD/ESP32)
- Longtech Character (COB/COG) or Graphic LCD module
- Level shifting (if voltage domains differ)
- Jumper wires, breadboard
- Optional: I2C backpack (for Character LCDs)
Software/Libraries
- Arduino IDE
- I2C Character LCD
- For Graphic LCD:
U8g2(supports many controllers incl. ST7565/SSD1306, etc.)
Tip: If you’re selecting modules for production, see our engineering lineup: Character LCD, Graphic LCD. For color UI or deep blacks, compare TFT and OLED.
Picking the Right LCD Type
Character LCD (Alphanumeric)
- Best for menus, status text, numeric values
- Fast setup, minimal code, extremely robust
- Start here if you need immediate readability without graphics
→ Explore sizes (8×1 to 40×4): Character LCD
Graphic LCD (Dot-Matrix)
- Best for icons, curves, small graphs, multi-language fonts
- Controlled via SPI/I2C; U8g2 library makes rendering simple
→ Pixel ranges (e.g., 128×64, 240×128): Graphic LCD
Segment LCD (Ultra-Low Power)
- Fixed icons/segments, microamp-level consumption
- Ideal for meters, appliances, wearables
→ Learn more: Segment LCD
TFT LCD (Color) & OLED (Monochrome/Color)
- Rich color UI, images, animations (TFT)
- High contrast and deep blacks (OLED)
→ Compare: TFT LCD vs OLED Modules

Need iconized characters, custom logos, or non-standard outlines? Request a semi-custom variant via Custom Display.
I2C vs SPI for LCDs (What to Choose?)
| Attribute | I2C | SPI |
|---|---|---|
| Pins (not incl. power) | 2 (SDA, SCL) | Typically 4 (MOSI, MISO*, SCK, CS) |
| Typical Speed | Medium | High |
| MCU Pin Usage | Very low | Moderate |
| Cable Length Robustness | Good with proper pull-ups | Good; often more tolerant at higher speeds with short runs |
| Best Use Cases | Simple UI, few pins available | Graphics-heavy UIs, faster updates |
*Many graphic LCDs don’t use MISO. Check your datasheet.
- If your design is pin-constrained, start with I2C.
- If you need snappy graphics, choose SPI.
- For production reliability (temp, vibration, EMI), see Quality & Testing.

Wiring an I2C Character LCD to Arduino (Fastest Path)
Pin Mapping (typical backpack)
- VCC → 5 V (or 3.3 V variant as specified)
- GND → GND
- SDA → A4 on UNO (or board’s SDA)
- SCL → A5 on UNO (or board’s SCL)
If the display is blank/dim, adjust the contrast trimmer on the I2C backpack. For 3.3 V boards, ensure the module/backpack supports 3.3 V logic or add a level shifter.
I2C Address Scanner (find your LCD address)
#include <Wire.h>
void setup() {
Serial.begin(9600);
Wire.begin();
Serial.println("Scanning I2C...");
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Found I2C device at 0x");
Serial.println(addr, HEX);
}
}
Serial.println("Done.");
}
void loop() {}
Minimal “Hello Longtech!” with I2C Character LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Replace 0x27 with the address you found from the scanner if different
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // initialize the LCD
lcd.backlight(); // turn on backlight
lcd.setCursor(0,0);
lcd.print("Hello Longtech!");
lcd.setCursor(0,1);
lcd.print("I2C Character LCD");
}
void loop() {}
Looking for 20×4, 40×4, or wide-temp versions? See Character LCD. For semi-custom pinouts/bezels, visit Custom Display.

Wiring a SPI Graphic LCD to Arduino (with U8g2)
Typical SPI Pinout
- VCC → per datasheet (often 3.3 V; use level shifting if driving from 5 V)
- GND → GND
- SCK → D13 (UNO)
- MOSI → D11 (UNO)
- CS → e.g., D10
- DC (A0) → e.g., D9
- RST → e.g., D8
Always confirm your controller (e.g., ST7565, ST7920) and voltage requirements in the datasheet provided on the module page: Graphic LCD.
Quickstart Code (U8g2, example for ST7565 128×64)
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
// Software SPI example constructor for ST7565 128x64 module.
// If you use hardware SPI, pick a corresponding U8g2 *_HW_SPI constructor.
U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2(
U8G2_R0,
/* clock=*/ 13, // SCK
/* data=*/ 11, // MOSI
/* cs=*/ 10, // CS
/* dc=*/ 9, // D/C
/* reset=*/ 8 // RST
);
void setup() {
u8g2.begin();
}
void loop() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.drawStr(0, 12, "Hello Longtech!");
u8g2.drawHLine(0, 16, 128);
u8g2.drawStr(0, 30, "SPI Graphic LCD");
// Simple gauge demo
static uint8_t x = 0;
u8g2.drawFrame(0, 40, 128, 20);
u8g2.drawBox(2, 42, x, 16);
u8g2.sendBuffer();
x = (x + 4) % 124;
delay(60);
}
Performance Tips
- Prefer HW SPI constructors for speed.
- Keep wires short and neat; add a series resistor (22–47 Ω) on SCK/MOSI if ringing appears on long leads.
- For fonts/icons, U8g2 bundles many options; pick the smallest font that meets readability.
Need a 240×128 module or sunlight-readable option? Check Graphic LCD. For color UI, compare TFT LCD.
Troubleshooting (Top 10 Issues)
| Symptom | Likely Cause | Quick Fix |
|---|---|---|
| Absolutely nothing on screen | Wrong power/contrast | Verify VCC/GND; adjust trimmer (Character LCD); confirm backlight supply |
| Random blocks or garbled text | Wrong controller/library or init | Check the driver IC; use a matching U8g2 constructor or correct LiquidCrystal settings |
| “Hello” prints, but very dim | Backlight under-driven or contrast off | Drive BL per spec; adjust contrast; check series resistor |
| I2C shows no response | Wrong address/pull-ups | Run I2C scanner; ensure 4.7–10 k pull-ups to VCC if needed |
| Intermittent glitches | Loose wires/EMI | Re-seat jumpers; twist GND with signal; add small series resistors |
| SPI flicker or tearing | Over-clocked SPI / long wiring | Lower SPI speed; shorten cables; add ground reference |
| Display shifts/ghosting at temp extremes | Module not wide-temp | Choose wide-temp variants; see Quality |
| Works at 5 V breadboard, fails in 3.3 V design | Logic-level mismatch | Level shift logic lines or select 3.3 V-ready module |
| Icons clipped / text off-grid | Wrong font/coordinates | Confirm screen size and font baseline; test with bounding boxes |
| You’re stuck after hours | Integration edge case | Ping our engineers via Contact with your wiring and controller model |
Explore deeper fixes and best practices in our upcoming I2C vs SPI guide and LCD Troubleshooting series in the Blog.
Industrial-Grade Tips (For Products, Not Just Prototypes)
- Temperature Range: Select -30 °C to +80 °C modules for outdoor/industrial. Contrast compensation (Vop) matters.
- Backlight Uniformity: Validate luminance uniformity; avoid hotspots. We can tailor LED string & diffuser.
- EMI/ESD Robustness: Add TVS diodes on external connectors; keep high-slew lines short; provide solid ground return.
- Connector & Mounting: Define pin pitch, FFC vs. pin header, and bezel/frame mounting early to avoid re-spins.
- Supply & Lifecycle: Confirm controller IC longevity and second-source strategy.
- Documentation: Lock down datasheets, 3D, STEP, and test reports.
→ See our process and inspections: Quality & Testing
→ When standard SKUs don’t fit, Custom Display accelerates DFM and pilot runs.

Real Projects You Can Build Next
- Data Logger / DMM / Bench Tool — low-glare Character LCD for crisp digits → Character LCD
- Portable Sensor Reader — compact Graphic LCD with icons & trend lines → Graphic LCD
- Smart Thermostat / HVAC Panel — ultra-low power Segment LCD → Segment LCD
- Wearable / Handheld UI — color TFT or high-contrast OLED → TFT LCD • OLED
Need small tweaks (mounting holes, legends, custom symbols)? Custom Display.
Download Datasheets & Next Steps
- Browse all Longtech LCD categories and download datasheets from product pages: Character / Graphic / Segment / TFT / OLED
- Unsure which controller fits your MCU/SBC? Talk to an engineer: Contact
- Planning certification or environmental tests? Review Quality and request sample COAs.
FAQs (Quick Answers)
Q1: Can I run a 5 V Character LCD on a 3.3 V MCU?
A: Many character modules expect 5 V for logic/backlight. Use a 3.3 V-compatible variant or level shifters; match the contrast circuit to VDD.
Q2: I2C or SPI for a battery product?
A: If you need fewer pins and simple UI, I2C is fine. For smooth graphics at lower CPU duty, SPI often wins. Keep wires short and frequency modest.
Q3: Why is my screen OK at room temp but fades in the cold?
A: Contrast and response time shift with temperature. Choose wide-temp modules or add temp compensation in firmware/hardware. See Quality.
Q4: Can Longtech add custom icons or a specific bezel?
A: Yes—logo, icon matrix, backlight CCT, FFC pinout, mounting holes, and coatings are available via Custom Display.
Conclusion
You’ve wired an I2C Character LCD in minutes, brought up a SPI Graphic LCD with U8g2, and learned how to pick the right display for your use case—plus how to debug the usual pitfalls. For prototypes that are headed to production, engage early on temperature, EMI, optics, and lifecycle to save months down the road.
Ready to move from prototype to product?
- Request a Custom LCD Quote → Custom Display
- Talk to an Engineer → Contact
More engineering guides are coming—bookmark the Blog and check back for “I2C vs SPI for LCDs” and “LCD Troubleshooting: The Complete Guide.”