Summary of 1K LCD Tinyfont
This 930-byte project displays UART messages on a Nokia 5110 LCD using a custom 383-byte pixel font. Built with an Atmega328pu microcontroller, it utilizes assembly language to achieve extreme code size efficiency while supporting variable-width characters and word-wrapping. The system unpacks compressed font data into a buffer for rendering, enabling full text display on the low-power dev board without external libraries.
Parts used in the 1K LCD Tinyfont Project:
- Atmega328pu microcontroller
- Nokia 5110 LCD display
- Sparkfun dev board
- Custom-made board (Eagle CAD design)
- USBTiny programmer
- Atmel Studio 7
- Homemade small font designer software
- USB connection
Description
The font was created using my homemade small font designer (see external links). It includes all letters (uppercase/lowercase), numbers, and most punctuation. The font weights in at 383 bytes.
The application has the ability to unpack this font, and use it to write a message on an LCD display.
It also performs word-wrapping.
Final program size: 930 bytes
Details
The project was built using a Atmega328pu, and Nokia 5110 LCd display on a Sparkfun dev board.
The board is custom-made (see attached Eagle CAD and images), but the project will function on a Arduino with the same microcontroller. The microcontroller is programmed with a USBTiny.
The software was written in assembly with Atmel Studio 7- initial versions written in C were far too large.
Character Development and Compression
The font was designed using our own Small Font Designer, producing variable-width characters 8 pixels tall.
Since each character is 8 pixels tall, each will fit evenly into bytes. The characters are packed to indicate their width, and each active pixel.
A => 5 wide, bytes: 0114a74620
width | data | data | data | data | data
0x05, 0x01, 0x14, 0xa7, 0x46, 0x20
These bytes expand to:
. . . . .
. . X . .
. X . X .
. X . X .
. X X X .
X . . . X
X . . . X
. . . . .
Which kinda looks like an 'A'.
Messages are written to the display buffer letter-by-letter. The current character is loaded found in the program (slowly looping to save space), decompressed to individual pixels in 64-byte buffer, and written to the LCD display buffer.
For more detail: 1K LCD Tinyfont
- What is the final program size of this project?
The final program size is 930 bytes. - How was the software written for this project?
The software was written in assembly because initial versions in C were far too large. - Does the font include lowercase letters?
Yes, the font includes all uppercase and lowercase letters, numbers, and most punctuation. - Can the application perform word-wrapping?
Yes, the application has the ability to perform word-wrapping. - What tool was used to create the custom font?
The font was created using a homemade small font designer. - How are the characters stored in the font file?
Characters are packed to indicate their width and each active pixel within 64-byte buffers. - Is the project compatible with standard Arduino boards?
Yes, the project will function on an Arduino with the same microcontroller as the Sparkfun dev board. - How many bytes does the custom font weigh?
The font weights at 383 bytes.

