Spice Up The Humble 16×2 LCD With Big Digits

The 16×2 LCD display is a classic in the microcontroller world, and for good reason. Add a couple of wires, download a library, mash out a few lines of code, and your project has a user interface. A utilitarian and somewhat boring UI, though, and one that can be hard to read at a distance. So why not spice it up with these large-type custom fonts?

As [upir] explains, the trick to getting large fonts on a display that’s normally limited to two rows of 16 characters each lies in the eight custom characters the display allows to be added to its preprogrammed character set. These can store carefully crafted patterns that can then be assembled to make reasonable facsimiles of the ten numerals. Each custom pattern forms one-quarter of the finished numeral, which spans what would normally be a two-by-two character matrix on the display. Yes, there’s a one-pixel wide blank space running horizontally and vertically through each big character, but it’s not that distracting.

Composing the custom patterns, and making sure they’re usable across multiple characters, is the real hack here, and [upir] put a lot of work into that. He started out in Illustrator, but quickly switched to a spreadsheet because it allowed him to easily generate the correct binary numbers to pass to the display for each pattern. It seems to have really let his creative juices flow, too — he came up with 24 different fonts! Our favorite is the one he calls “Tron,” which looks a bit like the magnetic character recognition font on the bottom of bank checks. Everyone remembers checks, right?

Hats off to [upir] for a creative and fun way to spice up the humble 16×2 display. We’d love to see someone pick this up and try a complete alphanumeric character set, although that might be a tall order with only eight custom characters to work with. Then again, if Bad Apple on a 16×2 is possible…

16 thoughts on “Spice Up The Humble 16×2 LCD With Big Digits

    1. I have a desk calendar with two cubes with numbers that can display all days of the month, by virtue of both of them having 0,1,2, one has the additional 3,4,5, the other 6,7,8,9. How do you fit the seven digits.0,1,2,6,7,8 and 9 on a 6-sided cube? Simple: 6 and 9 are the same side.
      I love little tricks like that.

    1. You forget an old Russian proverb that applies in this situation:

      “The true wonder of the dancing bear
      is not how well he dances,
      but rather that he dances at all.”

      Besides, the upper one is close to the machine readable print on the bottom of checks.

  1. After watching the video I give it a thought and then I’ve created a custom font set for double height characters. I’ve ended with thinner but more recognizable numbers. Halfway in size and readability between the standard tiny numbers and the bigger but less recognizable 4 characters numbers

  2. Geez. As someone who hasn’t tried using these character LCD screens, I hadn’t realized that they only allowed you to customize just eight characters.

    On the other hand, I did inherit a collection of them from my late grandfather, so I guess I should give them a try at some point. I should also experiment with different font concepts, as there might be other ideas to make it a bit more readable.

    1. Compared to the infinite glut of graphics LCDs available today, they’re rather limited. However, they’re very simple to drive, cheap, and do the job well for text-only interfaces.

    2. Only 8 characters *at a time*. So for slow-update situations where you could exclude a few cpmbinations (say: only day of month, where the first digit can only be 1,2,3), you can get away with more combinations as you never need to show a 6 and an 8 at the same time, and you update the custom characters inbetween.

      1. I wrote a few proofs of concept of this in circuitpython last year, if you can drive the display fast enough you can update 4-6 of them quick enough to draw a little video, and I’ve also used the 8 individual char slots as “sprites”, so the char moves around the screen by moving around the string, but the “texture” is updated/animated by swapping the char. Had a decent little 16×2 sonic game with a running sonic and moving collectible rings (2 animations on custom char “sprites”)

        Not super useful but fun to play with pushing the limits of these char lcds

    1. The spec sheets I’ve found (which may not be accurate) seem to indicate that the upper 128 characters are usually Asian characters (unfortunately I don’t know which language they’re from), so unlike the original ASCII character set using the upper 128 characters for various window-building symbols, I’m going to say not many?

  3. I made the same digits but they are only ONE column wide by 2 rows high. They stand out as to be seen from across the room. BUT I made bigger text and numbers by turning the lcd sideways. I use 8 lcd to make a 2×8 display or a 1×8 display. See my post pictures on instructables under ‘oldmaninSC’. The photos of sideway is ‘big alpha-numeric display’ and ‘lcd date/clock forget the rtc’ Both sets of displays are VERY easy to read.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.