Go Down

### Topic: 3 digit 7 segment display Tutorial (Read 11452 times)previous topic - next topic

#### Big Oil

##### Nov 07, 2010, 03:09 amLast Edit: Nov 07, 2010, 03:21 am by Big_Oil Reason: 1
I took a 3 digit 7 segment display off a bathroom scale.  I'll use it for a temperature display:

Here's how it works:
There are 10 pins on it, I call them 1-10 starting on the left.  I connected each one to arduino digital pins 1-10 in order.
There are three pins that determine which digit is selected, the first second or third.  Those pins are 4,5, and 9.  If pin 4 is LOW and the other two are HIGH then the first digit is selected.  If pin 5 is LOW, then the middle one is selected, and 9 is the third.

digit 1              digit 2               digit 3
4= LOW           4=HIGH           4=HIGH
5=HIGH           5=LOW            5=HIGH
9=HIGH           9=HIGH           9=LOW

Now there are 7 pins left, one for each of the 7 segments.  Turning one HIGH will turn on that segment.

Pin 7
_______
|            |
Pin 6 |            | Pin 8
|_______|
|     3     |
Pin 2 |            | Pin 1
|_______|
10

writing the code:
For my code example you type in a digit for the letterfunction() and it will light up the necessary segments.
For making your own symbols, the general outline is: select a digit by putting 4,5, or 9 LOW, then
After you set all the segments HIGH that you want, put a delay(5); after it.  Then turn them LOW and go on to the next one.

Code: [Select]
`int i=0;int degree=25;int nothing=100;void setup()   {                pinMode(1, OUTPUT);     pinMode(2, OUTPUT);   pinMode(3, OUTPUT);   pinMode(4,OUTPUT);pinMode(5,OUTPUT);pinMode(6, OUTPUT);   pinMode(7, OUTPUT);   pinMode(8, OUTPUT);   pinMode(9,OUTPUT);pinMode(10, OUTPUT);   // Using Serial.begin(9600) makes pin 1 stay HIGH for some reason}// // void loop()                     {  //NUMERAL PINS ARE 4, 5, and 9//   4 LOW = FIRST NUMERAL//   5 LOW = SECOND NUMERAL//   9 LOW = THIRD NUMERAL  //FIRST NUMERAL ON THE DISPLAYdigitalWrite(4,LOW);digitalWrite(5,HIGH);digitalWrite(9,HIGH);letterfunction (7); // type 0-9 in the parenthesis or                   //type (degree) for the degree symbol                   // or type (nothing) for nothing   //NUMERAL 2digitalWrite(4,HIGH);digitalWrite(5,LOW);digitalWrite(9,HIGH);letterfunction(7);   //NUMERAL 3digitalWrite(4,HIGH);digitalWrite(5,HIGH);digitalWrite(9,LOW);letterfunction(degree); // the degree symbol}//------------------------------------------------------------// THIS FUNCTION HAS THE DIFFERENT NUMBERS// AND THE DEGREE SYMBOLvoid letterfunction(unsigned char var){if (var==1){digitalWrite(6,HIGH);  //pins 6 and 2 are the leftmost vertical linesdigitalWrite(2,HIGH); delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==2){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(2,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==3){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==4){digitalWrite(6,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==5){digitalWrite(7,HIGH);digitalWrite(6,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==6){digitalWrite(6,HIGH);digitalWrite(7,HIGH); digitalWrite(3,HIGH);digitalWrite(2,HIGH); digitalWrite(1,HIGH);digitalWrite(10,HIGH);delay(5);digitalWrite(6,LOW);digitalWrite(7,LOW); digitalWrite(3,LOW);digitalWrite(2,LOW); digitalWrite(1,LOW);digitalWrite(10,LOW);}if (var==7){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==8){digitalWrite(1,HIGH);digitalWrite(2,HIGH); digitalWrite(3,HIGH);digitalWrite(6,HIGH); digitalWrite(10,HIGH);digitalWrite(7,HIGH);digitalWrite(8,HIGH); delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==9){digitalWrite(7,HIGH);digitalWrite(6,HIGH); digitalWrite(3,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==0){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);digitalWrite(2,HIGH); digitalWrite(10,HIGH);digitalWrite(6,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}if (var==degree){    //the degree symboldigitalWrite(6,HIGH);digitalWrite(3,HIGH);digitalWrite(7,HIGH);digitalWrite(8,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}}`

If you want to hook up a temperature sensor you can connect it to Analog pin 5 and use this code:
Code: [Select]
`// temperature data on Analog 5// LED display on pins 1-10 int i=0;int degree=25;int nothing=100;float tempC; float tempF; float voltage; int reading;int num=11;int digitOne;int digitTwo;unsigned long now;unsigned long then;void setup()   {                pinMode(1, OUTPUT);     pinMode(2, OUTPUT);   pinMode(3, OUTPUT);   pinMode(4,OUTPUT);pinMode(5,OUTPUT);pinMode(6, OUTPUT);   pinMode(7, OUTPUT);   pinMode(8, OUTPUT);   pinMode(9,OUTPUT);pinMode(10, OUTPUT);   // Using Serial.begin(9600) makes pin 1 stay HIGH for some reason}void loop()                     {  now=millis();  if (now-then > 30000 || millis()<100){  // take a sample every 30 seconds  reading=analogRead(5);  voltage = reading*(5.0/1024);  //convert reading to voltage (in V), for 5V input  tempC = (voltage-0.5)*100;   //convert voltage to temperature  tempF = ((tempC*9/5)+32); //convert C temperature to F  num=tempF;  // num takes off the decimal point  then=now;  }digitOne=num/10;            //so, to get digitOne you divide by 10                          // a number like 49 magically becomes 4, all decimals disappeardigitTwo=num - (digitOne * 10);  //then to get digit2 (9)you multiply digitOne by 10 to get 40                             // and subtract it from the original 49 to get 9  //NUMERAL PINS ARE 4, 5, and 9//   4 LOW = FIRST NUMERAL//   5 LOW = SECOND NUMERAL//   9 LOW = THIRD NUMERAL//FIRST NUMERAL ON THE DISPLAYdigitalWrite(4,LOW);digitalWrite(5,HIGH);digitalWrite(9,HIGH);letterfunction (digitOne); // type 0-9 in the parenthesis or                   //type (degree) for the degree symbol                   // or type (nothing) for nothing//NUMERAL 2digitalWrite(4,HIGH);digitalWrite(5,LOW);digitalWrite(9,HIGH);letterfunction(digitTwo);//NUMERAL 3digitalWrite(4,HIGH);digitalWrite(5,HIGH);digitalWrite(9,LOW);letterfunction(degree);}// THIS FUNCTION HAS THE DIFFERENT NUMBERS// AND THE DEGREE SYMBOLvoid letterfunction(unsigned char var){if (var==1){digitalWrite(6,HIGH);  //pins 6 and 2 are the leftmost vertical linesdigitalWrite(2,HIGH); digitalWrite(1,LOW);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==2){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(2,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==3){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==4){digitalWrite(6,HIGH);digitalWrite(8,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==5){digitalWrite(7,HIGH);digitalWrite(6,HIGH); digitalWrite(3,HIGH);digitalWrite(1,HIGH); digitalWrite(10,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==6){digitalWrite(6,HIGH);digitalWrite(7,HIGH); digitalWrite(3,HIGH);digitalWrite(2,HIGH); digitalWrite(1,HIGH);digitalWrite(10,HIGH);delay(5);digitalWrite(6,LOW);digitalWrite(7,LOW); digitalWrite(3,LOW);digitalWrite(2,LOW); digitalWrite(1,LOW);digitalWrite(10,LOW);}else if (var==7){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==8){digitalWrite(1,HIGH);digitalWrite(2,HIGH); digitalWrite(3,HIGH);digitalWrite(6,HIGH); digitalWrite(10,HIGH);digitalWrite(7,HIGH);digitalWrite(8,HIGH); delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==9){digitalWrite(7,HIGH);digitalWrite(6,HIGH); digitalWrite(3,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==0){digitalWrite(7,HIGH);digitalWrite(8,HIGH); digitalWrite(1,HIGH);digitalWrite(2,HIGH); digitalWrite(10,HIGH);digitalWrite(6,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}else if (var==degree){    //the degree symboldigitalWrite(6,HIGH);digitalWrite(3,HIGH);digitalWrite(7,HIGH);digitalWrite(8,HIGH);delay(5);for(i=1;i<11;i++){digitalWrite(i,LOW); }}}`

#### marcz

#1
##### Nov 07, 2010, 05:54 pm
Nice work Oil!

Go Up

Please enter a valid email to subscribe