The LCD backpack (aka. K107) board interfaces any HD44780-based LCD (this is the vast majority of LCD’s you will encounter) with a three-wire serial interface, consisting of +5volts, ground and serial data. The board uses a programmed PIC chip, created by Maryland EE professor Peter Anderson, to convert serial commands (e.g. Serial.print(“Freeduino”) ) into LCD text.
This boards turns any inexpensive (HD44780-compatible) LCD into a serial LCD.
Hook up power, ground and data and you’re good to go. No fussy libraries or handfuls of wires. Peter Anderson’s feaure set is really robust. You can check the command summary and sample code below.
This board is engineered for microcontrollers. Brian Riley of wulfden.org has a similar board but his includes an inverter option. If you need to hook up an LCD directly to a computer RS232 serial port get his board.

Board is currently available through Modern Device.
Custom Character Definitions
The character strings found below can be used to define custom characters when using the K107 backpack.
- 040E0E0E0E1F0004 => BELL
- 00000103161C0800 => CHECKMARK
Command Summary
Reference adopted from http://phanderson.com/lcd106/lcd107.html
Some commands require a delay to ensure proper transmission.
|
Command / Comments
|
Suggested Pause
|
Example
|
|
Send Text
|
|
Serial.print(“Hello World!”);
|
|
?a
|
Home Cursor
|
|
Serial.print(“?a”);
|
|
?b
|
Destructive Backspace
|
|
Serial.print(“?b”); // backspace
|
|
?c#
|
Set Cursor Style: 0= none 2= blinking 3=underline
|
|
(“?c0″); // turn cursor off
|
|
?f
|
Clear Screen
|
|
Serial.print(“?f”);
|
|
?g
|
Beep (requires speaker on pin 6)
|
|
Serial.print(“?g”);
|
|
?h
|
Backup Cursor (Non-destructive backspace)
|
|
Serial.print(“?h”);
|
|
?i
|
Forward cursor
|
|
Serial.print(“?i”);
|
|
?j
|
Up cursor
|
|
Serial.print(“?j”);
|
|
?k
|
Down cursor
|
|
Serial.print(“?k”);
|
|
?l
|
Clear cursor line
|
|
Serial.print(“?k”);
|
|
?m
|
Carriage Return
|
|
Serial.print(“?m”);
|
|
?n
|
CRLF, carriage return & line feed,
cursor at start of next line, line cleared |
|
Serial.print(“?n”);
|
|
?s#
|
Set tabs at # spaces
|
100 ms
|
Serial.print(“?s7″);
// set tab to 7 spaces |
|
?t
|
Tab, advance one tab position
|
|
Serial.print(“?t”);
|
|
?x##
|
Position cursor on x column, (two characters are required), first column is column 0
|
|
Serial.print(“?x09″);
// cursor to column 10 |
|
?y#
|
Position cursor at y row, first row is row 0,
one digit only (no leading zero) |
|
Serial.print(“?y3″);
// cursor to row 4 |
|
??
|
Display a “?”
|
|
Serial.print(“??”);
|
|
?!
|
Send direct command to LCD
|
|
Serial.print(“?!01″);
|
|
?B
|
Backlight Intensity – sets PWM value, two hex digits req. (00 to FF)
|
100 ms
|
Serial.print(“?BFF”);
// backlight on full brightness |
|
?D#
|
Define Character “?D#1A001A001A001A00″ D# = character
# 0-7 then 8 two character hex digits representing
(5 bit values top to bottom) |
100 ms
|
Serial.print(“?D31F001F001F001F00″);
// custom character 3
// every other line black |
|
?#
|
Print a custom character
numerals 0-7 are valid |
5 ms
|
Serial.print(“?3);
// print custom character 3 |
|
?H
|
High output on auxiliary digital pins: valid numbers are 4,5,6
|
|
Serial.print(“?H4″);
// aux pin 4 HIGH |
|
?L
|
Low output on auxiliary digital pins: valid numbers are 4,5,6
|
|
Serial.print(“?L4″);
// aux pin 4 LOW
|
|
?G
|
Configure for LCD geometry. Supported formats:
2X16, 2X20, 2X24, 2X40, 4X16 and 4X20. |
|
Serial.print(“?G216″);
// configure driver for 2 x 16 LCD |
|
Ganging up commands is OK, except for commands requiring a following pause
|
|
Serial.print(“?x01?y1?fHello World”);
// cursor to beginning of line 1
// clear screen, print “Hello World” |
|
Enhanced Commands
|
|
|
|
?>#
|
Enter BIG Number Mode (numbers only!) “?>3″ X # = 3 or 4 ,
# represents number of characters displayed. (20×4 LCD’s only)
|
100 ms
|
Serial.print(“?>4″);
// enter big number mode, 4 character option. |
|
?<
|
Exit BIG number mode “?<”
|
|
Serial.print(“?<”);
|
|
?C#
|
Define custom boot screen line # = 0 – 3
|
100 ms
|
Serial.print(“?C0abcdefghijklmnopqrst”)
|
|
?S#
|
“?S0″ - display no screen on boot.
“?S1″ – display the configuration setting on boot
“?S2″ - display the user custom text screen on boot. |
|
Serial.print(“?S2); // custom boot screen
|
| ?* |
display boot screen at any time |
|
Serial.print(“?*); // show boot screen |
LCD control programs like LCD Smartie and LCDproc can use the ethernet LCD backpack just like the serial and USB type, but over a network. It’s useful for monitoring any system from anywhere on a network: put LCDs where you can’t put a computer, or monitor a computer that’s difficult to reach.