Go Down

Topic: 4 Digit 7 Segment Display (Read 3564 times) previous topic - next topic

AlphaZeta

Hi All,

I just built a 4 digit 7 segment display along with the code library to display different letters/digits, etc. here is it in action:



Detailed schematics and code can be found at http://www.kerrywong.com/2010/04/10/4-digit-7-segment-display-using-arduino/

Enjoy!

carl47

Very nice.

I like that you have precoded the display characters.

With mine the user has to work out his own code for character display.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1266454689/0#0

akashaman

Boolean conditions for the decimal point lovely touch. Nice one. Thanks for sharing.

Big Oil

#3
Dec 17, 2010, 01:30 am Last Edit: Dec 17, 2010, 01:33 am by Big_Oil Reason: 1
4 DIGIT DISPLAY FROM AN ALARM CLOCK:


I did something similar, but I didn't need any resistors or shift registers.  
I bought an alarm clock at a thrift store and took out the LED display.  There were 15 wires coming out the back.  By using a 5v wire and a Ground wire I was able to figure out the High/Low combinations on the different wires that would turn on different segments.  It turns out that setting 1 HIGH and 2 LOW will allow half of the segments to be lit by setting other pins high, then doing the opposite and setting 1 LOW and 2 HIGH will allow the other half to be illuminated.  
Then I connected each wire directly to an arduino pin and turned it into a countdown timer.

Code: [Select]
// Press a button to increase the starting minutes, then wait for
// 5 seconds and the countdown begins


int i=0;
int seconds=0;
int minutes=8;
int tens;
int ones;
int go=0;
char var=0;
int state;
int lastState;
int single;
int minutes1;
long now;
unsigned long then;
long timer=360000;
void setup()   {  
pinMode(2,INPUT);
pinMode(4,OUTPUT);  
pinMode(5, OUTPUT);    
pinMode(6, OUTPUT);  
pinMode(7, OUTPUT);  
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10, OUTPUT);  
pinMode(11, OUTPUT);  
pinMode(12, OUTPUT);  
pinMode(13,OUTPUT);
pinMode(14, OUTPUT);  
pinMode(15, OUTPUT);  
pinMode(16, OUTPUT);  
pinMode(17, OUTPUT);  
pinMode(18,OUTPUT);
pinMode(19, OUTPUT);  
// Using Serial.begin(9600) makes pin 1 stay HIGH for some reason
//Serial.begin(9600);
}


void loop()                    
{
 
 // This part starts the timer after a button press
 if(go==0){
   now=millis();
 state=digitalRead(2);
 if(state==0 && state != lastState){
  minutes++;  //increase starting minutes every time it's pressed
 
 timer=now;
}
 lastState=state;
 if(now - timer > 4000){
  go=1;  // START THE COUNTDOWN
 }
 
 }
 

 // This counts the seconds and minutes
 
if (go==1)
    {
 now=millis();
  if(now-then > 1000){
seconds--; //count down the seconds
then=now;
/*
Serial.print("Seconds: ");
Serial.println(seconds);
 Serial.print("Minutes: ");
Serial.println(minutes);

Serial.println();
Serial.print("tens: ");
Serial.println(tens);
Serial.print("Ones: ");
Serial.println(ones);
*/
}

if(seconds<0){
minutes--;
seconds=59;

if(minutes<0){
seconds=0;
}
}

    }

if(minutes>10){
single=1;
minutes1=minutes-10;
} else{
single=0;
minutes1=minutes;
}


tens= seconds/10; //This gives the 10's digit

ones= seconds-(tens*10);  //The last digit


//FIRST NUMERAL ON THE DISPLAY


BlueFunction();
delay(5);
RedFunction();
delay(5);
}




//-----------------------------------------------------------
// THIS LIGHTS UP THE DISPLAY BY SETTING DIFFERENT PINS
// HIGH OR LOW
void BlueFunction(){
 
 digitalWrite(19,LOW);   //SET ALL TWOS LOW (RED)
digitalWrite(18,HIGH);



 digitalWrite(17,LOW);
 digitalWrite(16,LOW);
 digitalWrite(13,LOW);
 digitalWrite(15,LOW);
digitalWrite(14,LOW);
digitalWrite(12,LOW);
 digitalWrite(11,LOW);
 digitalWrite(10,LOW);
 digitalWrite(9,LOW);
 digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(4,LOW);

 digitalWrite(7,HIGH);  //Colon :      ??????????

//NOW LIGHT UP THE BLUES
//  digitalWrite(8,HIGH); // Colon :   ??????????????
 
 if(minutes1==10){
 
 digitalWrite(13,HIGH);   //0
 digitalWrite(14,HIGH);
digitalWrite(16,HIGH);
} else if(minutes1==9){
 digitalWrite(13,HIGH);  
 digitalWrite(15,HIGH);

 } else if(minutes1==8){
   digitalWrite(13,HIGH);  
 digitalWrite(15,HIGH);
 digitalWrite(14,HIGH);  
 digitalWrite(16,HIGH);
     
     } else if(minutes1==6){
        digitalWrite(13,HIGH);  
 digitalWrite(15,HIGH);
 digitalWrite(14,HIGH);  
 digitalWrite(16,HIGH);
       } else if(minutes1==5){
          digitalWrite(13,HIGH);  
 digitalWrite(15,HIGH);
 digitalWrite(14,HIGH);  

         } else if(minutes1==4){
            digitalWrite(13,HIGH);  
 digitalWrite(15,HIGH);
           } else if(minutes1==3){
       
 digitalWrite(15,HIGH);
 digitalWrite(14,HIGH);  

             } else if(minutes1==2){
                digitalWrite(15,HIGH);
 digitalWrite(14,HIGH);  
 digitalWrite(16,HIGH);
               }
 
 if(tens==0){                     //BLUES
   digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
 }else if(tens==9){
    digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
   }else if(tens==8){
      digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
     }else if(tens==7){
        digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
       }else if(tens==6){
       
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
         }else if(tens==5){
           
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
           }else if(tens==4){
              digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
 
             }else if(tens==3){
                digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);
   digitalWrite(12,HIGH);
               }else if(tens==2){
                  digitalWrite(11,HIGH);
 
   digitalWrite(12,HIGH);
                 }else if(tens==1){
  digitalWrite(11,HIGH);
   digitalWrite(10,HIGH);

}

if(ones==9){
 digitalWrite(6,HIGH);
 digitalWrite(4,HIGH);
}else if(ones==8){
  digitalWrite(6,HIGH);
 digitalWrite(4,HIGH);
 digitalWrite(9,HIGH);
 digitalWrite(5,HIGH);
 
   }else if(ones==6){
     digitalWrite(6,HIGH);
 digitalWrite(4,HIGH);
 digitalWrite(9,HIGH);
 digitalWrite(5,HIGH);
     }else if(ones==5){
      digitalWrite(6,HIGH);
 digitalWrite(4,HIGH);
 
 digitalWrite(5,HIGH);
 
 
       }else if(ones==4){
         digitalWrite(6,HIGH);
 digitalWrite(4,HIGH);
 
 
         }else if(ones==3){
         
 digitalWrite(4,HIGH);
 
 digitalWrite(5,HIGH);

           }else if(ones==2){
             

 digitalWrite(4,HIGH);
digitalWrite(9,HIGH);
 digitalWrite(5,HIGH);
           
               }else if(ones==0){
                  digitalWrite(6,HIGH);

 digitalWrite(9,HIGH);
 digitalWrite(5,HIGH);
               }
}
//-------------------------------------------------------------------------
//------------------------------------------------------------------
void RedFunction(){

 digitalWrite(18,LOW);  //set it to RED
 digitalWrite(19,HIGH);
 digitalWrite(7,LOW);      //set Colon : Low
 
 digitalWrite(13,LOW);        //set blues low
 digitalWrite(15,LOW);
 digitalWrite(16,LOW);
 digitalWrite(14,LOW);
 digitalWrite(12,LOW);
 digitalWrite(11,LOW);
 digitalWrite(10,LOW);
 digitalWrite(7,LOW);
 digitalWrite(5,LOW);
 digitalWrite(9,LOW);
 digitalWrite(6,LOW);
 digitalWrite(4,LOW);
 
 if (single==1){
 digitalWrite(17,HIGH);
   digitalWrite(16,HIGH);
 }
 if (minutes1==10){
   digitalWrite(17,HIGH);
   digitalWrite(16,HIGH);
 
   digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
       
 } else if (minutes1==9){
 digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
   } else if (minutes1==8){
     digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
     } else if (minutes1==7){
       digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
       } else if (minutes1==6){
         digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
     
         } else if (minutes1==5){
           digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
     
           } else if (minutes1==4){
         
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
             } else if (minutes1==3){
               digitalWrite(13,HIGH);
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
               } else if (minutes1==2){
                 digitalWrite(13,HIGH);
   
       digitalWrite(15,HIGH);
                 } else if (minutes1==1){
                   
     digitalWrite(14,HIGH);
       digitalWrite(15,HIGH);
 }
 if(tens==0){
   digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
   
     digitalWrite(12,HIGH);
 }else if(tens==9){
 
     digitalWrite(11,HIGH);
     digitalWrite(12,HIGH);
   }else if(tens==8){
     digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     digitalWrite(12,HIGH);
     
       }else if(tens==6){
         digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     digitalWrite(12,HIGH);
         }else if(tens==5){
         
    digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     digitalWrite(12,HIGH);
           }else if(tens==4){
           
     digitalWrite(11,HIGH);
     digitalWrite(12,HIGH);
             }else if(tens==3){
           
    digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
   
               }else if(tens==2){
                 digitalWrite(9,HIGH);
    digitalWrite(10,HIGH);
     digitalWrite(11,HIGH);
     }
 
 if (ones==0){
   digitalWrite(6,HIGH);
   digitalWrite(4,HIGH);
   digitalWrite(5,HIGH);
 } else if (ones==9){
   digitalWrite(6,HIGH);
   digitalWrite(4,HIGH);
   digitalWrite(5,HIGH);
   
    } else if (ones==8){
     digitalWrite(6,HIGH);
   digitalWrite(4,HIGH);
   digitalWrite(5,HIGH);
       } else if (ones==7){
        digitalWrite(6,HIGH);
   
         
 There's no room for the rest of the code, but hopefully you get the gist
   

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy