The 16×2 character LCD on every electronics shelf in the world runs the Hitachi HD44780 protocol. It was published in 1985. It's still in use because it does one thing well: it has its own ROM containing the alphabet, so you don't have to draw pixels; you just send ASCII bytes and they appear.

It's a tiny computer with its own commands

The HD44780 has its own little controller. You send it bytes that are either data (characters to display) or commands (clear screen, move cursor, set blink). One pin (RS, register select) tells the controller which kind. Another pin (EN, enable) tells it to latch the data. Up to eight data pins carry the byte itself — but most projects use a "4-bit mode" that halves the wiring at the cost of sending each byte as two nibbles.

The Arduino library LiquidCrystal hides all this. lcd.print("hello") sends five data bytes; lcd.clear() sends a clear command. But under the hood it's still bit-banging RS and EN with carefully timed pulses, just like 1985.

The annoying truth about timing

The HD44780 needs ~50 µs between most operations and ~2 ms after a clear. The library inserts these delays for you. If you write your own driver and skip them, characters skip, garble, or land in wrong cells. Older boards (16C500-series PIC adaptations) sometimes need extra delays. The protocol survives because the timing margins are forgiving — but they exist.