Zbotic Logo Zbotic Logo
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

  • Shop
  • About Us
  • Contact Us
  • Reseller
  • Blogs
020 69134444
1800 209 0998
[email protected]
Help Desk
Facebook Twitter Instagram Linkedin YouTube
Zbotic Logo Zbotic Logo
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

All departments
  • 3D Print Service
  • 3D Printer
  • Batteries & Chargers
  • Development Boards
  • Drone Parts
  • EBike parts
  • Sensor Modules
  • Electronic Components
  • Electronic Modules
  • IoT and Wireless
  • Mechanical Parts and Workbench Tools
  • Motors & Drivers & Pumps & Actuators
  • DIY and Robot Kits
  • Show more
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
Return to previous page
Home Display Modules & Screens

16×2 LCD I2C: Custom Characters and Menu System

16×2 LCD I2C: Custom Characters and Menu System

April 1, 2026 /Posted by / 0
Table of Contents

  1. Understanding the 16×2 LCD with I2C Backpack
  2. Wiring and Initial Setup
  3. Creating Custom Characters
  4. Building a Multi-Page Menu System
  5. Using Rotary Encoder for Navigation
  6. Displaying Sensor Data with Custom Icons
  7. Common Troubleshooting Tips
  8. Recommended LCD Modules from Zbotic

The 16×2 character LCD is arguably the most widely used display in the maker community — and for good reason. It is affordable, easy to programme, and displays text clearly. Adding an I2C backpack reduces the wiring from 12+ pins to just 4 wires. In this guide, we go beyond the basics to cover custom character creation and building a proper menu navigation system.

Understanding the 16×2 LCD with I2C Backpack

The 16×2 LCD based on the HD44780 controller displays 2 lines of 16 characters each. The I2C backpack (PCF8574 or PCF8574T) sits on the back and converts the parallel interface to I2C:

  • Only 4 wires needed: VCC, GND, SDA, SCL
  • Default I2C address: 0x27 (some modules use 0x3F)
  • Backlight control: Managed via I2C — no extra pin needed
  • Contrast adjustment: Small potentiometer on the I2C board

This combination of simplicity and capability makes it the default choice for projects that need text output — from temperature displays to 3D printer controllers.

Wiring and Initial Setup

LCD I2C Pin Arduino Uno
VCC 5V
GND GND
SDA A4
SCL A5

Install the LiquidCrystal_I2C library and run this test:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Hello, Zbotic!");
  lcd.setCursor(0, 1);
  lcd.print("Made in India");
}

If you see a blank screen with backlight on, adjust the contrast potentiometer with a small screwdriver.

Creating Custom Characters

The HD44780 controller supports up to 8 custom characters (5×8 pixels each), stored in CGRAM. Here is how to create them:

// Heart symbol
byte heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, heart);
  lcd.setCursor(0, 0);
  lcd.write(byte(0)); // Display the heart
}

Useful custom characters for Indian projects:

  • Rupee symbol (₹) — essential for billing/pricing displays
  • Temperature icon — thermometer shape for weather stations
  • Battery level indicators — empty, quarter, half, three-quarter, full
  • Arrow symbols — for menu navigation indicators
  • Lock/unlock icons — for security systems

Use online tools like LCD Character Creator to design your custom characters visually.

Building a Multi-Page Menu System

A menu system transforms a simple LCD into an interactive user interface. Here is the architecture:

const char* menuItems[] = {
  "1. Temperature",
  "2. Humidity",
  "3. Set Alarm",
  "4. WiFi Config",
  "5. About"
};
int menuIndex = 0;
int totalItems = 5;

void displayMenu() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(">");
  lcd.print(menuItems[menuIndex]);
  lcd.setCursor(0, 1);
  if (menuIndex + 1 < totalItems) {
    lcd.print(" ");
    lcd.print(menuItems[menuIndex + 1]);
  }
}

Use two buttons (Up/Down) or a rotary encoder to navigate. The “>” cursor indicates the currently selected item. Press a “Select” button to enter a sub-menu or execute an action.

Using Rotary Encoder for Navigation

A rotary encoder with a built-in push button is the most elegant navigation solution:

  • Rotate clockwise — move down the menu
  • Rotate anti-clockwise — move up the menu
  • Press the knob — select/enter the current item
  • Long press — go back to the previous menu level

This gives you a professional-feeling interface with just a single knob — similar to car infotainment systems or 3D printer controllers. Use the Encoder library with interrupt-driven reading for smooth, debounce-free rotation detection.

Displaying Sensor Data with Custom Icons

Combine custom characters with sensor readings for a polished dashboard:

  • Line 1: [thermometer icon] 28.5°C [droplet] 65%
  • Line 2: [clock icon] 14:30 [bell] Alarm ON

This approach packs maximum information into 32 characters while remaining highly readable. Update the display every 2 seconds to keep readings current without causing LCD flicker.

Common Troubleshooting Tips

  • Blank screen with backlight: Adjust the contrast potentiometer; try I2C address 0x3F
  • Garbled characters: Check wiring, especially SDA and SCL; run an I2C scanner to verify address
  • Flickering display: Add a 100 µF capacitor across VCC and GND near the LCD
  • I2C address conflicts: If using multiple I2C devices, ensure no address overlap; some PCF8574 boards have solder jumpers to change address
  • Custom characters disappearing: You must call createChar() in setup, and characters are lost after lcd.clear() on some libraries — recreate them after clearing

Recommended LCD Modules from Zbotic

These are our best-selling LCD modules for your next project:

JHD 16×2 Character LCD Display (Blue Backlight)
₹96 | Buy on Zbotic.in →
LCD1602 Parallel Display (Blue Backlight)
₹60 | Buy on Zbotic.in →
LCD1602 with I2C Interface
₹140 | Buy on Zbotic.in →
LCD1602 Display (Yellow Backlight)
₹102 | Buy on Zbotic.in →
16×2 LCD Keypad Shield for Arduino
₹175 | Buy on Zbotic.in →

Frequently Asked Questions

Can I use a 16×2 LCD without the I2C backpack?

Yes, but it requires 6-10 data pins on your Arduino. The I2C backpack reduces this to just 2 pins (SDA and SCL), freeing up GPIO for sensors and other peripherals.

How many custom characters can the 16×2 LCD store?

The HD44780 controller supports up to 8 custom characters (numbered 0-7). Each character is 5 pixels wide by 8 pixels tall.

What is the difference between 0x27 and 0x3F I2C addresses?

It depends on the PCF8574 variant. PCF8574 uses 0x27 by default, while PCF8574T uses 0x3F. Run an I2C scanner sketch to determine your module’s address.

Can I display Devanagari or other Indian scripts on a 16×2 LCD?

You can create up to 8 custom characters, which limits you to 8 unique symbols at a time. For full Devanagari support, consider a graphical OLED or TFT display instead.

Shop Display Modules at Zbotic.in

India’s trusted source for OLED, LCD, TFT, LED matrices, and more. Fast shipping across India.

Browse All Display Modules →

Tags: 16x2, Arduino, display, Display Modules, I2C, lcd, menu system
Share Post
  • Facebook
  • Linkedin
  • Whatsapp
FPV Simulator Training: Veloci...
blog fpv simulator training velocidrone and liftoff guide 613875
blog lipo battery care charging storage and safety 613878
LiPo Battery Care: Charging, S...

Related posts

Svg%3E
Read more

Multi-Display Sync: Run Same Content on Multiple Screens

April 1, 2026 0
Table of Contents When You Need Multiple Synchronised Displays Communication Protocols for Display Sync I2C Multi-Display Architecture SPI Daisy-Chain Approach... Continue reading
Svg%3E
Read more

Display Brightness Control: Ambient Light Auto-Adjust

April 1, 2026 0
Table of Contents Why Auto-Brightness Matters Light Sensors: LDR, BH1750, TSL2561 PWM Brightness Control Basics Implementing Auto-Brightness for OLED Auto-Brightness... Continue reading
Svg%3E
Read more

LCD Menu System: Multi-Level Navigation with Encoder

April 1, 2026 0
Table of Contents Why Build a Menu System Hardware: LCD + Rotary Encoder Menu Architecture Design Implementing the Menu Engine... Continue reading
Svg%3E
Read more

LED Running Text: Single Line Scrolling Marquee

April 1, 2026 0
Table of Contents Applications for Scrolling Marquee Displays Hardware Options: Dot Matrix vs LED Panel Building with MAX7219 Cascaded Modules... Continue reading
Svg%3E
Read more

Prayer Time Display: Mosque and Temple Timer India

April 1, 2026 0
Table of Contents The Need for Automated Prayer Time Displays Calculating Prayer Times Programmatically Display Options for Places of Worship... Continue reading

Add comment Cancel reply

Your email address will not be published. Required fields are marked

Facebook Twitter Instagram Pinterest Linkedin Youtube

Get the latest deals and more.

Download on Google Play Download on the App Store

Call us: 020 69134444 / 1800 209 0998

Monday - Saturday 09:30 AM - 06:00 PM
For Technical Supports Email: [email protected]
For Sales / Enquiries Email: [email protected]

  • My Account

    • Cart

    • Wishlist

    • Checkout

    • My Orders

    • Track Order

    • My Account

  • Information

    • FAQs

    • Blogs

    • Career

    • About Us

    • Contact Us

    • Payment Options

  • Policies

    • Privacy Policy

    • Terms & Conditions

    • GST Input Tax Credit

    • Shipping Return Policy

    • E-Waste Collection Points

    • Our Sitemap

© Zbotic.in is registered trademark of Moxie Supply Pvt Ltd – All Rights Reserved
Login
Use Phone Number
Use Email Address
Not a member yet? Register Now
Reset Password
Use Phone Number
Use Email Address
Register
Already a member? Login Now