Display 3 character wide (big) digits on 16x2 LCD


I'm trying to display time on my 16x2 LCD. Each digits are 3 character wide. I want my digits to look like this:

In order to create these digits, I need to create custom characters as show in the right side.

As the LCD can only store 8 characters, I can't store them all. So I thought, if I store the characters 0-7 in the LCD, then to produce characters 8,9 and 10, all i have to do is mirror 0, 2 and 3 respectively (i.e. left shift them twice).

Is that possible?

I saw articles like this, but didn't like the font as not all characters in the digit share the same width.

Any help is really appreciated.

Look at your digits. They are very UGLY.

If you want to display 5 digits just buy a regular GLCD. Then you can have attractive fonts.

There are several BIG digit libraries made with 2x2 character blocks. Possible with the 8 user defined characters.
Ugly but not as bad as your 3x2.

Honestly, I don't think this judgement is relevant. I've made some "ugly" displays that look pretty cool, or at least convey some novelty. For example, four 3x8 numbers on a 16x8 matrix, and tall characters on multiple 4 digit seven segment display rotated 90 degrees. It's all fun.

Go on. If the "font" was attractive it would be worth applying time and effort into making it work.

Yes, it possible to multiplex different user-defined characters to achieve some form of bit mapped graphics.
It looks HORRIBLE on a regular LCD.

Multiplexing might work on an OLED because they have a faster response.

But since you can buy COG GLCD displays very cheaply it seems better to just use graphics. i.e. low power for an LCD, attractive fonts, available in transreflective, ...

The idea behind using multiple user characters is not unreasonable. In practice you seldom need more than 8 user characters at any one time. However the proposed scheme uses 8 displaying "012"

no. You can only define 8 custom characters.

If you decide to go ahead with this, work from the other end - design a character set based on only 8 custom characters. I think that is possible.

Not sure what you are on about here. All ten characters are three units wide and quite nicely chamfered considering the limitations.

You can only have eight custom characters at any given time. Changing a custom character while it is being displayed will change what you see on the display, so you cannot display a number, redefine the custom character, then display another number on the same screen.

Since you intend to display time, is there any combination of numbers that actually need more that eight of the custom characters simultaneously? Just hours and minutes does severely limit the possible number combinations.

They do seem a bit ugly on the picture that I've uploaded. I just made that just to get an idea of the mapping. But I tried creating the digits with my existing elements and they looked really good on the display.

I had a spare LCD with me and thought I'll put them to some use. Not going to buy a new display just for this project. Thanks for the suggestion.

Ya. I guess I'll have to stick with the one i mentioned above. Thanks.

Yes, all digits are 3 character wide. But the stroke width is different at some parts isn't it? Like The vertical strokes in the digit '0' is 5 pixel wide and horizontal stroke is just 3. Also you'll have to leave a column between two digits. If you don't, then it becomes very cluttered, right? So I intended to make the digits with stroke width of 3 pixel, which would leave enough space, even without leaving a column after a digit and i guess it makes the digits look more symmetric.

Thanks for the thought, but i guess I'll do the clock like in the above mentioned link. This has already taken more time than i anticipated.

Hi @radvin

I use this library and it draws numbers that look good.

RV mineirin

Interesting, but I'm disappointed that they don't show any example images. You have to download, install and run it to see what it's like...


RV mineirin

I found a problem with this library.
For numbers 1, 4 and 7 that don't use all spaces,
unwanted characters appear in places where it should be empty.

The library uses char(254) to fill this space.

HD44780s can have one of two different character sets; European or Asian.
If it's the Asia set, it works correctly, if it's the European, the garbage appears.
The solution was to modify the library, putting char(32) instead of char(254).

RV mineirin

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.