Display HT16K33 6 digit 14 segments 0.54"

DSC_0516 DSC_0523

I wanted some displays slight different that the ebay/aliexpress offering and decided to design my own.
The idea with this design is that my LED display driver library supports this schematic. This means that in addition to the boards designed here, the schematic can also be included in other projects (With or without indicators and buttons) and then the library will support the display for that design.

    Display HT16K33 6 digit 14 segments 0.54"
        Parts to use
        Part list
        Using the button input
        Circuit board
    Notes and download


Parts to use

For the digits I selected dual 14 segment 0.54" alphanumeric displays, I can have 3 of these within 10cm (Nearly 4, but that would be slightly to long). For indicators I decided to use a 5mm RGB led for each digit, this is a very flexible solution.
The above means I have 6x15 leds for the displays and 6x3 leds for the indicators for a total of 108 leds to drive.

The displays I uses are from KingBright:
DSC_0260 DSC_0244

The two different displays.

DSC_0257 DSC_0258

Segments8bits Digit8bit

This is the 8 bit version where some pins are missing.

DSC_0241 DSC_0242

Segments15bits Digit15bit

And here the 15 bit version.


To search for other compatible brands, check the pins are placed this way (Pin 1 is bottom left) and that the display is common cathode. This is the same information as the two drawings above shows, but because other brands use other letters for segments it is easier to use this drawing for matching segments.

For driving LED displays the typical chips are: For the above number of displays and indicators the HT16K33 28 pin is the obvious chip to use and it is fairly cheap.

The indicator is a standard common cathode 5mm RGB led:



Before starting on the schematic I ordered some displays and when starting on the schematic I found out that they had a 8 bit interface, not the expected 15 bit interface. I decided to do two versions, one for 8 and one for 15 bit displays (The extra PCB was only a few $).
The 8 bit display could be used with a MAX7219 driver, but I am using a 16 bit wide driver that can also be used for the 15 bit display.


Displays with 8 bit interface.


Displays with 15 bit interface.

A important point for me was to keep the amount of soldering (especially SMD) as low as possible, i.e. only include what is absolute necessary for the circuit. That affect how I designed the button interface.
Because the chip uses the same matrix for buttons as for display, pressing two buttons will short two segments, this do not in any way damage the chip or display, but it looks silly. To avoid this each button can include a series diode, I did not make space for them on the circuit board. They can be mounted at the buttons if desired.

This design is for 5V and is not guaranteed to work when connected to 3.3V processors, a level translator must be included between the display and the processor.

Memorymap8bit Names-14-segment

The memory map of the HT16K33 controller for the 8 bit version, it is a bit convoluted.
The red part uses the segment definition from my library (As shown beside the table), the . is short for DP and the _ means a unused bit.

Memorymap15bit Names-14-segment

The memory map for the 15 bit is much easier to work with.

Part list

ReferenceNumber ofComponent
U1, U2, U36KingBright PDC54-11 any color or similar (pinout is fairly standard) (15 bit version)
U1, U2, U36KingBright PDC54-12 any color or similar (8 bit version)
D1, D2, D3, D4, D5, D66RGB 5mm led, single color 3 or 5 mm led can be used
U41HT16K33 28 pin
R1, R2, R3, R4, R5522kohm 0805
C11100nF 0805
C2147uF 1206 (Smaller capacity can be used)
D711N4148 diode SOD323 or other small diode.
J119 pin strip
J2, J324 pin strip

The price is controlled by two items: The displays (About $2 each) and shipping, everything else is about $2 together. It is necessary to buy for multiple PCBs to get this price (i.e. 10 displays, 5 pcbs and 10-100 each of the passive parts and the diodes).
I got the displays from mouser.com and the HT16K33 from lcsc.com (It is also on aliexpress.com).
The other parts are from aliexpress.com, ebay.com and lcsc.com

Using the button input

SchematicNoDiodes SchematicOneDiodes SchematicDiodess

The button switches can be wires with or without diodes: The chip supports up to 39 buttons using 3 scan lines and 13 input lines. If more than 8 buttons are needed it is possible to find the signals on the back of the PCB on the display pins. The library reads all buttons inputs, but do not return more than the first 8, to get more the code must be modified.

Circuit board


The 8 bit layout with 3 digits, 6 leds, a connector for 8 buttons and two data connections one on each end of the circuit board.


The 15 bit layout reused the placement of all nearly parts, but the tracks are connected very differently.



The board size and placement of mounting holes is exactly the same between the  boards. The mounting holes is for M2 screws.


The 8 bit PCB back from production. I selected a black finish, to get a dark background for the leds.


And the 15 bit version.
There is one minor error on both, the symbol for D7 is the wrong way around!


For easiest mounting use this sequence:

The chip has a marking at pin 1 and must be mounted in the orientation shown above (The white line indicates pin 1).


Diodes has a line to mark direction, this line must be mounted towards the resistors.



Orientation of display, only the right version works, i.e. -11 in 15bit PCBs and -12 in 8 bit PCBs


The long pin of 4 pins RGB leds goes in the marked hole. With single color leds it is the short pin that goes into the marked hole and the long pin goes in the 4 hole, this means they will be on the blue indicator line.



The two boards mounted.


Two 15 bit boards in series.


To use multiple boards the correct address links must be shorted:


All parts can be mounted on the PCB, but it may not be necessary. This means the simplest version is only HT16K33, two capacitors, one 4 pin connector and 1 to 3 displays.

The 5mm leds are about 0.5mm higher than the display, this means to mount the display flush against some window the leds must either be sanded down or the displays must be mounted slightly above the circuit board.


I like this design (Probably because I did it myself) and with both multicolor indicators and button input it can save some pins on a Arduino. The 14 segments means I can show words, but it looks nicest for upper case letters, lower case is not rendered as good.
The possibility to link displays and mount them edge to edge means I can make any size divisible with 2 from 2 digits to 48 digits. With the dual IO connectors wiring is fairly easy.

I will not be selling this board, but you can order the raw board yourself from any PCB manufacturer by using the gerber files and then you will have to mount the parts. It is also possible to use the schematic as part of other projects, this will mean my display library will work directly.

Notes and download

Gerber for 8 bit display
KiCad project for 8 bit display

Gerber for 15 bit display
KiCad project for 15 bit display

LED display driver library