An LCD with 2 lines, 16 characters per line.
The LCD1602 comes in 2 possible configurations: I2C configuration and standard configuration. The I2C configuration is usually simpler to use.
The following table summarizes the key differences:
|Number of Arduino I/O pins||7*||2 (SCL)/SDA|
* Controlling the backlight requires another I/O pin.
You can select the desired configuration by setting the
pins attribute. Set it to "i2c" for the I2C configuration, or "full" for the standard configuration (the default).
|SDA||I2C data line|
|SCL||I2C clock line|
The default I2C address of the LCD1602 module is 0x27.
Note: The I2C configuration simulates a PCF8574T chip that controls the LCD module. Normally, you wouldn't have to worry about this as the LiquidCrystal_I2C library takes care of the communication with the chip.
|V0||Contrast adjustment (not simulated)|
|RW||Read/Write. Connect to Ground.||GND.1|
|D0||Parallel data 0 (optional) †|
|D1||Parallel data 1 (optional) †|
|D2||Parallel data 2 (optional) †|
|D3||Parallel data 3 (optional) †|
|D4||Parallel data 4||10|
|D5||Parallel data 5||9|
|D6||Parallel data 6||8|
|D7||Parallel data 7||7|
|A||Backlight anode||5V / 6‡|
* These are just example pin numbers, they are not mandatory. You need can use any digital/analog pin, but make sure to update the code accordingly!
† Normally, you'd configure the chip in 4-bit parallel mode, which means you only need to connect RS, E, D4, D5, D6, and D7 pins to Arduino.
‡ If you need to control the backlight, connect the anode to an I/O pin. Otherwise, connect it to the supply voltage. For a real circuit, you'd also need a current-limiting resistor, but you may skip it in the simulation environment.
When you initialize the LiquidCrystal library in your code, you need to pass the pin numbers to the constructor.
The following example uses pin numbers that match the table above:
You can also try this example on Wokwi.
|pins||Set to "i2c" for I2C configuration||"full"|
|i2c-address||I2C address (I2C configuration)||"0x27"|
|color||The color of the text||"black"|
|background||The color of the backlight||"green"|
The LCD1602 uses the Hitachi HD44780 LCD Controller chip. The chip comes with a built-in font, as well as the ability to define up to 8 custom characters.
There are two versions of the chip's ROM with two different fonts: HD44780UA00, which includes Japanese katakana characters, and HD44780UA02, which includes Western European characters.
Wokwi simulates the HD44780UA00 variant. It has a total of 256 characters:
|0-7||User defined characters|
|32-127||Standard ASCII characters|
|161-255||Japanese katankana and symbols|
ASCII character glyphs:
High characters glyphs:
You can define custom characters using the createChar method of the LiquidCrsytal (or LiquidCrystal_I2C) library. The custom characters are the first 8 characters in the font, with indexes from 0 to 7. You can print them to the LCD
display using the
write() method, or using C string escape sequence, such as
The following code example defines a heart shaped character, stores it at index 3, and then uses it to display the text "I (heart) Arduino":
You can also run this example on Wokwi.
You can modify any custom character while the program is running. This method is useful for
creating simple animations. For example, change
loop() in the code sample above to slowly
reveal the heart icon, line-by-line: