Arduino: The Noiasca Liquid Crystal for 4004 displays

On this page I want to show how to use a 40 characters 4 rows display with my Noiasca Liquid Crystal library.

These 4004 LC displays basically consist of two 4002 displays. Therefore they have two enable lines and you will need an additional pin to drive the second enable line. As the library needs to know which logical driver should be used, the library must track which line you are currently using. Dependig on the line either IC 1 or IC2 will be activated.

As always you have to include the library and the respective hardware implementation:

#include <NoiascaLiquidCrystal.h> // use the adopted library downloaded from 
#include <NoiascaHW/lcd_4bit.h> // parallel interface, 4bit

The constructor will need a lot of parameters, so it is a good idea to define some constants:

const byte cols = 40;                   // 40 columns/characters per row (must be correct for the 40x4)
const byte rows = 4;                    // 4 rows
const byte rs = 8;                      // RS pin
const byte rw = 255;                    // RW pin is not used, therefore you must set it to 255
const byte en = 9;                      // enable pin for first IC (upper rows)
const byte en2 = 11;                    // enable pin for second IC (lower rows)
const byte d4 = 4;                      // data pin
const byte d5 = 5;                      // data pin
const byte d6 = 6;                      // data pin
const byte d7 = 7;                      // data pin 
const byte bl = 255;                    // set to 255 if not used
const t_backlightPol blType = POSITIVE; // set to either POSITIVE, NEGATIVE

At the time of the implementation the RW pin is not used. Don't forget to connect the RW pin to GND! If you leave this LCD pin floating, it's very likely that the display isn't showing anything at all.

The type of backlight defines if the backlight pin is HIGH active or LOW active. Currently only POSITIVE is supported.

When you have each parameter defined you can define your LCD object with all 12 parameters:

LiquidCrystal_4bit lcd(rs, rw, en, en2, d4, d5, d6, d7, bl, blType, cols, rows); 

By default, some special characters and the German Umlauts will be printed accordingly. If you want to use another character converter, you can add a callback function:

LiquidCrystal_4bit lcd(rs, rw, en, en2, d4, d5, d6, d7, bl, blType, cols, rows, convert_small); // a converter (Ä gets ä)

If you want to learn more about character converting, you can read here.


Currently only the parallel interface will supports the 40 x 4 LCD. This is due to the additional needed pin I would lose backlight control if you use an 8 channel expander.


With the additional language converters it becomes very easy to print Cyrillic letters in pure ASCII (lower ANSI) on a standard LCD. If you need true Cyrillic support you should consider to buy a specific SPLC780D1 002A LCD - which is also covered by the Noiasca Liquid Crystal library.


*) Disclosure: Some of the links above are affiliate links, meaning, at no additional cost to you I will earn a (little) comission if you click through and make a purchase. I only recommend products I own myself and I'm convinced they are useful for other makers.


First upload: 2021-02-27 | Version: 2021-04-05