Hitachi HD44780 LCD controller
The Hitachi HD44780 LCD controller is a commonly used alphanumeric dot matrix liquid crystal display (LCD) controller developed by Hitachi. The control interface and protocol is a de-facto standard for this type of display.[1] 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.[2]
Architecture
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.[3] 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.
Character LCDs may have a backlight, which may be LED, fluorescent, or electroluminescent.
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. The pinout is as follows:
- Ground
- 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. The operation mode must always be set using the Function Set command, it is not defined at power-up whether the chip is in 8-bit or 4-bit mode. For this reason, in 4-bit mode a command is sent in two operations. To enable 4-bit mode the Function Set command must be sent three times. Once in 4-bit mode, character and control data are transferred as pairs of 4-bit "nibbles" on the upper data pins, D4-D7.
Instruction set
The HD44780 instruction set is shown below:[4]
Instruction | Code | Description | Execution time (max) (when fcp = 270 kHz) | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
RS | R/W | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | |||
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 & address counter |
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 DDRAM |
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. |
Font
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.
There is a Japanese version of the ROM which includes kana characters (HD44780UA00), and a European version which includes Cyrillic and Western European characters (HD44780UA02).[5]
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.
See also
- LCD Smartie - Open source display driver for Microsoft Windows
References
- ↑ Wilmshurst 2010, p. 228
- ↑ Sanchez & Canton 2007, p. 275
- ↑
- ↑ Huang 2009, p. 326
- ↑ "HD44780U datasheet" (PDF).
Further reading
- Huang, Han-Way (2009). The HCS12 / 9S12: An Introduction to Software and Hardware Interfacing (2nd ed.). Delmar Cengage Learning. ISBN 978-1-4354-2742-6.
- Sanchez, Julio; Canton, Maria P. (2007). Microcontroller Programming: the Microchip PIC. CRC Press. ISBN 978-0-8493-7189-9.
- Wilmshurst, Tim (2010). Designing Embedded Systems with PIC Microcontrollers: Principles and Applications. Elsevier. ISBN 978-1-85617-750-4.
External links
- 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
- 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
- Using an HD44780 alphanumeric LCD screen
- HD44780 16x2 character LCD Example with code
- Generating custom fonts on HD44780 LCD
- HD44780 LCD interfacing with TI MSP430 Microcontroller
- HD44780 LCD interfacing with PIC Microcontroller
- Convert Normal HD44780 LCD Display into Serial (two wire) LCD