This project has moved. For the latest updates, please go here.


This chip is used on the vast majority of LCD displays of different sizes. ATL implements several template classes to work with the LCD display.

Currently the implementation of the necessary delays for controlling the LCD is synchronous - meaning that execution is halted for the duration of the delay. The HD44780_Profile class implements a couple of static methods that perform the actual delay. To allow you to customize / optimize these delays for your specific situation you can specify your own version of this timing profile class in the template parameters of the Driver and the Controller classes.


There are two driver classes available. The HD44780_Driver class works directly on the Arduino board pins while the HD44780_DriverSerial3Wire class works with the Serial3WireOutput class using shift registers.

These driver classes both assume a 4-bit data transfer for a write-only (R/W is connected to ground) display.

The HD44780_DriverSerial3Wire class has a setDataRegister(BitArrayT) method that needs to be called before the display is initialized. The BitArray that is passed contains the bits for the output pins of the shift registers and is shared among all classes that interface through them.


The HD44780_Controller class implements the protocol for communicating with the LCD display. It implements the basic functions the display can perform.

The Controller class has an Initialize method that needs to be called in the setup() stage of the Sketch which puts the LCD through its initialization sequence.


The HD44780_View class implements a method for positioning the cursor and writing text. It also implements the method necessary to be an OutputStream and can therefor be used with a TextWriter class - which makes writing string to the display very easy.

The current Cursor position is maintained by the class and kept in-sync during any of the operations that can be performed on the LCD display.


The HD44780_ViewPort class is a very slim layer on top of the View that implements scrolling the display content left or right.

Last edited Jan 6, 2015 at 12:24 PM by obiwanjacobi, version 3