The LCD has 16 (sometimes 18) pins along the top. It looks intimidating until you realise that most of them are doing nothing in your circuit. The Arduino's LiquidCrystal library uses six. The others are either power, contrast, or unused.

The six that matter

VDD goes to 5 V. VSS goes to ground. V0 — the contrast pin — needs a variable voltage; the standard trick is a 10 kΩ pot wired as a divider, wiper to V0. RS picks data vs. command (one Arduino pin). EN latches the byte (another Arduino pin). D4-D7 carry the four high data bits (four Arduino pins). That's six wires from the Arduino, plus the contrast pot.

RW (read/write) you tie permanently to ground because the Arduino only ever writes. D0–D3 are unused in 4-bit mode. The backlight pins (A, K, sometimes labelled BLA/BLK) go to 5 V and ground through a current-limiting resistor — like driving any other LED.

Why 4-bit mode at all

Eight data lines feels natural for an 8-bit byte, but each one is an Arduino pin you can't use for anything else. 4-bit mode sends each byte in two halves (high nibble first, then low). The hardware doesn't mind, the library handles the framing, and you save four pins for sensors, buttons, or another LCD. The trade-off is roughly half the throughput — irrelevant for character displays that update a few times per second.