Things used in this project
Story
Project Overview
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 Project
Most 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 want…
Things used in this project
Story
Project Overview
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 Project
Most 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 Works
At 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().
Key Concepts:
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 Design
Custom-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.
Custom HT16K33 4-Digit 16-Segment Display PCB Design
Custom HT16K33 4-Digit 16-Segment Display PCB Design
Live PCB
Firmware
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 Demonstration
The full build process, PCB design, wiring, and live animation demos are shown in the video below.
Conclusion
This 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.
**Read more
Schematics
