Difference between revisions of "Arduino: How to control a HD44780 based character LCD"
From Luky-Wiki
Lukas Dzunko (talk | contribs) (→Return Home) |
Lukas Dzunko (talk | contribs) (→Return Home) |
||
Line 17: | Line 17: | ||
| 0 || 0 || || 0 || 0 || 0 || 0 || 0 || 0 || 1 || x || || ~ 1.52 ms | | 0 || 0 || || 0 || 0 || 0 || 0 || 0 || 0 || 1 || x || || ~ 1.52 ms | ||
|} | |} | ||
− | * AC to DDRAM and 0x00 | + | * Set AC to DDRAM and 0x00 |
* Return cursor and display to home (original) postition | * Return cursor and display to home (original) postition | ||
Revision as of 15:17, 9 December 2012
Many characters LCD displays use so called HD44780 based protocol on interface. This is more like standard but i recommend to check datasheet from vendor. There can be small modifications and/or difference in timing. Especially timing is important. If communication rate is too quick, then LCD drop data or misbehave depending on internal state. I recommend to check busy flag if possible. If not then correct delay should be applied between commands. Result of commands can be checked via LCD Simulator prior to programing MCU. For example i like this one: DjLCDSIM.
Contents
Command Set
Clear Display
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ~ 1.52 ms |
- Clear display data by writing 0x20 ("space") to whole DDRAM memory
- Set AC to DDRAM and 0x00
- Set entry mode to increment (I/D = 1)
Return Home
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | x | ~ 1.52 ms |
- Set AC to DDRAM and 0x00
- Return cursor and display to home (original) postition
Entry Mode Set
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | SH | ~ 38 us |
Display ON / OFF Control
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | ~ 38 us |
Cursor or Display Shift
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | x | x | ~ 38 us |
Function set
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | DL | N | F | x | x | ~ 38 us |
Set CGRAM Address
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | ~ 38 us |
Set DDRAM Address
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | ~ 38 ms |
Read Busy Flag and Address
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | ~ 0 us |
Write data to RAM
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ~ 38 us |
Read data from RAM
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | Execution Time | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ~ 38 us |