Make a Digital Clock From Scratch




Introduction: Make a Digital Clock From Scratch

About: Electronics and LEDs what can be better ?! :D

 In some point in the life of every electronics hobbyist the need to make a clock is borned, in my case it was about a month after I soldered my first part on a board, but back then I didn't have the right tools, parts and knowledge to do such a thing.
But after about 2 years I got all the things I didn't have back then and I was ready to make my first digital clock, and with all the LEDs I had left over from my 8x8x8 LED cube project I decided to make my own custom LED clock.

So join me and build your own custom LED digital clock powered by our favorite little micro-controller the Arduino.

Step 1: What Do We Need?

 Here is what tools you will need to make this:
  1) Soldering Iron.
  2) Some solder wire.
  3) Small needle nose plier
  4) Small cuter
  5) Wire striper

I made my clock with a stand alone arduino without the original board because I wanted to make a finished project.

Now here are the parts you will need to make the clock:
  1) 130 LEDs.
  2) 15 2N4401 transistors.
  3) 20 1K resistors.
  4) about 10 resistors for the current protection(more detail in step 2). I used 150Ohms.
  5) DS1307 real time clock IC.
  6) one coin cell battery holder.
  7) 4 Tact switches.
  8) Prefboard (you would like to get along one for the display about 8inch*3inch)
  9) ATMega328 with arduino bootloader.
  10) A programmer for programing the chip. 
  11) 7805 voltage regulator.
  12) 16MHz crystal.
  13) two 22pF caps.
  14) 28 pin IC socket for the ATMega328.
  15)10 uF cap.
  16)0.1 uF cap.
  17) 4017 counter
  18) 32.768KHz crystal

Step 2: The Seven Segment Display

The clock is made of six seven segment displays which make up the display.
Each digit made of seven segments and every segment made of 3 LEDs in parallel.
So a simple calculation gives that there are 21 LEDs in each seven segment display.
And all six digits take 126 LEDs.
But as I said In the parts list you will need 130 LEDs and the other 4 LEDs are going to be used as dots that separate the hours, minutes and the seconds.
I made a common cathode display which means the all the negatives leads are connected together.

Now you will need to choose the right resistor for current limiting to 3 LEDs in parallel.
The calculation is simple and gos like this : 
R= the resistor value
Vcc = The voltage that is supplied
Vled = the forward voltage on the LED
Iled =the current the LED takes

You should always take a value a little bit bigger then the one in your calculation just to be on the safe side.

Step 3: So How It Works?

This kind of display calls for a large amount of pins to power it out so a special technique is needed.
I used multiplexing.
Multiplexing works by switching between the digits one by one very fast and by so creating a illusion that all of the displays are working in the same time.
This works by connecting each segment to the same one on a different digit  and by so you will have only seven segments that are all the same for all the digits.
And you can choose what digit you want to power by connecting the negative leads of the display to ground and sending the data to the positive segment leads.

The scanning of the display is accomplished by the 4017  decade counter because I wanted to save some pins on the arduino, to control it you will need just 2 arduino pins.
The 4017 connects the grounds one by one and by so it scan the display.

Step 4: The Schematics

I did the best as I could to make a good schematic, I hope you will understand it.
(Note  : That I forgot to add the resistor to the reset pin in the schematic so you will need to add a 1K resistor  to the reset pin and Vcc)
To see the schematic better download it.
Some things I didn't added in there and they are the connection of the transistors to the display.
Now for the transistors that are connected to the 4017: There are just one unused pin in there and thats the collector and you need to connect it the ground of the seven segment display, each resistor is for one digit.

The transistors the are connected to the micro-controller has the emitter pin unused and you need to connect is to the segments via a current limiting resistor, each segment gets one transistor.

The 2 transistors that have a LED connected to them represent the 4 dots in the display you can see how to connect in the display picture.

Look at all the pictures in this step to know what goes where.

Step 5: The Program

Now it's time to program you ATmega chip.
But first install all 3 libraries that I have given like so.
Take your chip and put it in the arduino board and put the program I have added with this step.
The program is a bit messy but I did as best as I could to make it clean.
You ca set time and date in this clock so no time setting is needed when you program.

Time setting mode:
Press the "start/end setting mode" button, use the up and down buttons to set the time and the "next" button to move to the next part( it goes like this : hours, minutes,days, mouths ,years).
when you are done press the "start/end setting mode" button again.

Just press the "date/next" button.

There is no comments in the code, I will add them latter on.

Step 6: Your Done

 Now you have your own working clock to tell you the time and date.
Now you can make or buy a nice box to close all the wires and make a cool finished project.

6 People Made This Project!


  • Creative Misuse Contest

    Creative Misuse Contest
  • Fix It! Contest

    Fix It! Contest
  • Water Contest

    Water Contest

166 Discussions


7 months ago

Hi, I want to use the 2.3 inch 7 segment display. Can I use the same wiring diagram and ic's ?

Where will we put the pins of the 7 segment from the LEDs to the circuit..?

Hey Guy's -

is there anybody willing to custom build an LED - Controlling Unit to

build an LED - Clock simmulation an Analog one ?

I wan´t to build a clock like that - but don't have time to aquire the necessary knowledge....

Just give me a rough quote.....


will you plz give me a error less complete code for arduino 1.0.6 my email address is

jz02bdn Reply
I made it..... use Arduino-0022 to upload the program you can download here

in the code, there is a line - " pinmode =;If it was pressed you will exit the while loop "

In front of the "if" needs two slashes, like so, pinmode =;//If it was pressed you will exit the while loop


2 years ago


Hello Sir when i compile the code it says exit status 1

'RTC' was not declared in this scope please what is wrong with the code i need help please


Where in the code is the value of the seconds, according to which the display displays the current Date after pressing a button that is connected to pin A0?

any one can help me with this error?

In file included from sketch_jan10a.ino:3:
C:\Program Files\Arduino\libraries\DS1307/DS1307.h:47: error: 'boolean' has not been declared
C:\Program Files\Arduino\libraries\DS1307/DS1307.h:48: error: 'boolean' has not been declared
C:\Program Files\Arduino\libraries\DS1307/DS1307.h:55: error: 'byte' does not name a type

wprogramer.h not found error comming ..what i will do now????

2 replies

Me too, i dont know how to fix it. the code is error

Me too, i dont know how to fix it. the code is error

Hi, i have finished making the circuit and i uploaded the program to my atmega328 chip.

But there's a problem. When i connect a 9V battery to it, only the 4 dots lit. I am confused maybe it's because of the wiring but i definitely did what it is written in there and in the diagram. Also maybe because of the resistors i used? By the way i used yellow LEDs and i used 150ohms resistor for current limitting. Can you help please? Or anyone? Thanks.

2 replies

Also i am wondering. You use 150ohms for current limitting for 3 blue LEDs in parallel. But when i compute it with what formula you gave i only got 20ohms. (Vcc-Vled)/(Iled*3)

It's pretty simple.

sir how to set the time

please sir give the code which will run in the latest versoin of arduino

that's totally sick! looks like a LOT of work. great job! i "may" consider doing one if i can't find a cheap-o quartz jobbie from hellmart ;-)

Can you send me complete source code, please