Hitachi HD44780 LCD controller
The Hitachi HD44780 LCD controller is an alphanumeric dot matrix liquid crystal display (LCD) controller developed by Hitachi that was commonly used during the MCS-51 era. It was made commercially available around year 1987. The character set of the controller includes ASCII characters, Japanese Kana characters, and some symbols in two 28 character lines. Using an extension driver, the device can display up to 80 characters.
The Hitachi HD44780 LCD controller is limited to monochrome text displays and is often used in copiers, fax machines, laser printers, industrial test equipment, networking equipment, such as routers and storage devices.
Compatible LCD screens are manufactured in several standard configurations. Common sizes are one row of eight characters (8x1), and 16×2, 20×2 and 20×4 formats. Larger custom sizes are made with 32, 40 and 80 characters and with 1, 2, 4 or 8 lines. The most commonly manufactured larger configuration is 40x4. characters, which requires two individually addressable HD44780 controllers with expansion chips as a single HD44780 chip can only address up to 80 characters. A common smaller size is 16×2, and this size is readily available as surplus stock for hobbyist and prototyping work.[original research?]
Character LCDs use a 16 contact interface, commonly using pins or card edge connections on 0.1 inch (2.54 mm) centers. Those without backlights may have only 14 pins, omitting the two pins powering the light. This interface was designed to be easily hooked up to the MCS-51 XRAM interface, using only two address pins, which allowed displaying text on LCD using simple MOVX commands, offering cost effective option for adding text display to devices. The pinout is as follows:
- VCC (+3.3 to +5V)
- Contrast adjustment (VO)
- Register Select (RS). RS=0: Command, RS=1: Data
- Read/Write (R/W). R/W=0: Write, R/W=1: Read (This pin is optional due to the fact that most of the time you will only want to write to it and not read. Therefore, in general use, this pin will be permanently connected directly to ground.)
- Clock (Enable). Falling edge triggered
- Bit 0 (Not used in 4-bit operation)
- Bit 1 (Not used in 4-bit operation)
- Bit 2 (Not used in 4-bit operation)
- Bit 3 (Not used in 4-bit operation)
- Bit 4
- Bit 5
- Bit 6
- Bit 7
- Backlight Anode (+) (If applicable)
- Backlight Cathode (-) (If applicable)
The nominal operating voltage for LED backlights is 5V at full brightness, with dimming at lower voltages dependent on the details such as LED color. Non-LED backlights often require higher voltages.
The HD44780 interface supports two modes of operation, 8-bit and 4-bit. Using the 4-bit mode is more complex, but reduces the number of active connections needed. For this reason, in 4-bit mode a command is sent in two operations.
Because the operation mode is not defined at power-up (may be 8-bit or 4-bit), one must always set the operation mode using the Function Set command.
To enable 4-bit mode requires some careful selection of commands. There are two primary limitations. First, with the reduced lines, the D0-D3 lines will always be low when the LCD is in 8-bit mode. Second, the HD44780 may be in one of three states:
- (State1) 8-bit mode
- (State2) 4-bit mode, ready for first set of 4 bits
- (State3) 4-bit mode, already latched 4 bits
State3 may occur, for example, if a prior control was aborted after sending only the first 4 bits of a command, while the LCD was in 4-bit mode.
There is a way to ensure the LCD returns to 4-bit mode of operation, as follows:
- First, set D7..D4 to 0b0011, and toggle the enable bit. From State1, the LCD will see the command as 0b0011_0000, and thus remain in 8-bit mode (State1). From State3, the LCD will see the command as 0b0011_xxxx (where xxxx are unknown bits) -- which still sets the LCD to 8-bit mode (State1). From State2, the bits are simply latched as the values for D3..D0 (State3). Therefore, after this, the HD44780 can only be in State1 or State3.
- Next, set D7..D4 to 0b0011 again, and toggle the enable bit. From State1, the LCD will again remain in 8-bit mode, as noted above. From State2, the LCD will see the command as 0b0011_0011, which sets the LCD to 8-bit mode. Therefore, after second command, the HD44780 is guaranteed to be in 8-bit mode (State1)
- Now that the LCD is ensured to be set to 8-bit mode, it is safe to request that it change to 4-bit mode. To do so, set D7..D4 to 0b0010, and toggle the enable bit. The LCD will see the command as 0b0010_0000, which will change it to use 4-bit command mode. Therefore, after this third command, the HD44780 can only be in 4-bit command mode.
- Finally, it should be noted that this sets the LCD to single-line mode, using standard 5x8 fonts, so additional FUNCTION SET commands may be needed to fully initialize the display.
Once in 4-bit mode, character and control data are transferred as pairs of 4-bit "nibbles" on the upper data pins, D4-D7.
The HD44780 instruction set is shown below:
(when fcp = 270 kHz)
|Clear display||0||0||0||0||0||0||0||0||0||1||Clears display and returns cursor to the home position (address 0).||1.52 ms|
|Cursor home||0||0||0||0||0||0||0||0||1||*||Returns cursor to home position. Also returns display being shifted to the original position. DDRAM content remains unchanged.||1.52 ms|
|Entry mode set||0||0||0||0||0||0||0||1||I/D||S||Sets cursor move direction (I/D); specifies to shift the display (S). These operations are performed during data read/write.||37 μs|
|Display on/off control||0||0||0||0||0||0||1||D||C||B||Sets on/off of all display (D), cursor on/off (C), and blink of cursor position character (B).||37 μs|
|Cursor/display shift||0||0||0||0||0||1||S/C||R/L||*||*||Sets cursor-move or display-shift (S/C), shift direction (R/L). DDRAM content remains unchanged.||37 μs|
|Function set||0||0||0||0||1||DL||N||F||*||*||Sets interface data length (DL), number of display line (N), and character font (F).||37 μs|
|Set CGRAM address||0||0||0||1||CGRAM address||Sets the CGRAM address. CGRAM data are sent and received after this setting.||37 μs|
|Set DDRAM address||0||0||1||DDRAM address||Sets the DDRAM address. DDRAM data are sent and received after this setting.||37 μs|
|Read busy flag &
|0||1||BF||CGRAM/DDRAM address||Reads busy flag (BF) indicating internal operation being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).||0 μs|
|Write CGRAM or
|1||0||Write Data||Write data to CGRAM or DDRAM.||37 μs|
|Read from CG/DDRAM||1||1||Read Data||Read data from CGRAM or DDRAM.||37 μs|
|Instruction bit names —
I/D - 0 = decrement cursor position, 1 = increment cursor position; S - 0 = no display shift, 1 = display shift; D - 0 = display off, 1 = display on; C - 0 = cursor off, 1 = cursor on; B - 0 = cursor blink off, 1 = cursor blink on ; S/C - 0 = move cursor, 1 = shift display; R/L - 0 = shift left, 1 = shift right; DL - 0 = 4-bit interface, 1 = 8-bit interface; N - 0 = 1/8 or 1/11 duty (1 line), 1 = 1/16 duty (2 lines); F - 0 = 5×8 dots, 1 = 5×10 dots; BF - 0 = can accept instruction, 1 = internal operation in progress.
The original HD44780 character generator ROM contains 208 characters in a 5×8 dot matrix, and 32 characters in a 5×10 dot matrix. More recent compatible chips are available with higher resolution, matched to displays with more pixels.
The 7-bit ASCII subset for the Japanese version is non-standard: it supplies a Yen symbol where the backslash character is normally found, and left and right arrow symbols in place of tilde and the rub-out character.
A limited number of custom characters can be programmed into the device in the form of a bitmap using special commands. These characters have to be written to the device each time it is switched on, as they are stored in volatile memory.
- LCD Smartie - Open source display driver for Microsoft Windows
- WiringPi - C based LCD driver for Raspberry Pi
- Pi4J - Java on Raspberry Pi example
- Sanchez & Canton 2007, p. 275
- "WH4004A-Character LCD-WINSTAR Display.-LCD Module & OLED Display Manufacturer". Retrieved 2016-07-16.
- Huang 2009, p. 326
- "HD44780U datasheet" (PDF).
- HD44780 LCD interfacing with TI MSP430 Microcontroller
- HD44780 LCD interfacing with PIC Microcontroller
- HD44780 LCD interfacing with Arduino
- HD44780 LCD interfacing with ATMEL AVR microcontroller
- HD44780 LCD interfacing with 8051 microcontroller
- LCD interfacing with NXP LPC 2124 microcontroller
- Hitachi HD44780U (LCD-II) datasheet
- How to Use Intelligent L.C.D.s part one and part two by Julyan Ilett, Everyday Practical Electronics, 1997
- Beginners guide to the Hitachi HD44780 LCD display
- Generating custom fonts on HD44780 LCD
- Convert Normal HD44780 LCD Display into Serial (two wire) LCD