This project is an Arduino-based 4-digit counter built around the HT16K33 I2C LED driver and a custom 4-digit 16-segment display PCB.The main goal was to create a fully controllable, reusable display module that goes beyond standard 7-segment limitations and allows custom segment mapping and animations.
Unlike typical font-based display libraries, this project uses raw segment control, making it ideal for custom PCB layouts and advanced visual effects.
Why I Built This ProjectMost ready-made 16-segment displays rely on predefined fonts, which become restrictive when:
Using a custom PCB
Working with non-standard segment wiring
Creating animations or segment-level effects
I wanted a solution where every segment is directly addressable, so the same hardware can be reused in:
Counters
Clocks
Menus
Animated indicators
This project serves as a clean and extensible base for those use cases.
How It WorksAt the core of the design is the HT16K33, an I2C LED driver that handles:
Segment multiplexing
LED current control
Display refreshing
The microcontroller communicates with the HT16K33 over I2C, sending 16-bit raw segment data for each digit using writeDigitRaw().
Each segment (A–S) is mapped manually using bit definitions
Digits (0–9) are defined as bitmasks in a lookup table
A simple counter increments from 0000 to 9999
The structure is ready for state machines and animations
Hardware DesignCustom-designed PCB for a 4-digit 16-segment display
Optimized segment routing for clean animation effects
HT16K33 configured at I2C address 0x70
Schematics and PCB files are included to allow easy replication or modification.
The firmware is written in Arduino C++ and focuses on:
Readability
Modularity
Easy expansion for animations
No blocking display logic is used, making it suitable for real-time embedded applications.
Video DemonstrationThe full build process, PCB design, wiring, and live animation demos are shown in the video below.
ConclusionThis project demonstrates how the HT16K33 can be used far beyond simple alphanumeric displays.By controlling segments directly, it becomes possible to build custom displays with rich animations while keeping the hardware simple and reliable.
This code and hardware can be used as a foundation for more advanced display-driven projects.



_4YUDWziWQ8.png?auto=compress%2Cformat&w=48&h=48&fit=fill&bg=ffffff)



_Ujn5WoVOOu.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)
Comments