2013年6月17日 星期一

[Arduino] 4 Digital Number Display

[Arduino] 4 Digital Number Display







// www.TinkerHobby.com

// Natalia Fargasch Norman

// Dual seven-segment LED Display

// Common Anode digit 1 pin 10

// Common Anode digit 2 pin 5



//       CA1 G  F  A  B

//        |  |  |  |  |      -> pins and segments they control

//   ---------    ---------

//   |   A   |    |   A   |

//  F|       |B  F|       |B

//   |---G---|    |---G---|

//  E|       |C  E|       |C

//   |   D   |    |   D   |

//   ---------    ---------

//        |  |  |  |  |      -> pins and segments they control

//        D  DP E  C CA2       



// Segments that make each number when lit:

// 0 => -FEDCBA

// 1 => ----BC-

// 2 => G-ED-BA

// 3 => G--DCBA

// 4 => GF--CB-

// 5 => GF-DC-A

// 6 => GFEDC-A

// 7 => ----CBA

// 8 => GFEDCBA

// 9 => GF-DCBA



// Arduino digital pins used to light up

// corresponding segments on the LED display

#define A 2

#define B 3

#define C 4

#define D 5

#define E 6

#define f 7

#define G 8



// Pins driving common anodes

#define CA1 13

#define CA2 12

#define CA3 11

#define CA4 10



// Pins for A B C D E F G, in sequence

const int segs[7] = { A, B, C, D, E, f, G };



// Segments that make each number

const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,

0b0000010, 0b1111000, 0b0000000, 0b0010000 };



void setup() {

  pinMode(A, OUTPUT);

  pinMode(B, OUTPUT);

  pinMode(C, OUTPUT);

  pinMode(D, OUTPUT);

  pinMode(E, OUTPUT);

  pinMode(f, OUTPUT);

  pinMode(G, OUTPUT);

  pinMode(CA1, OUTPUT);

  pinMode(CA2, OUTPUT);

  pinMode(CA3, OUTPUT);

  pinMode(CA4, OUTPUT);  

}



void loop() {

  for (int digit1=0; digit1 < 10; digit1++) {

    for (int digit2=0; digit2 < 10; digit2++) {

      for (int digit3=0; digit3 < 10; digit3++) {

        for (int digit4=0; digit4 < 10; digit4++) {      

            unsigned long startTime = millis();

            for (unsigned long elapsed=0; elapsed < 600; elapsed = millis() - startTime) {

              lightDigit1(numbers[digit1]);

              delay(5);

              lightDigit2(numbers[digit2]);

              delay(5);

              lightDigit3(numbers[digit3]);

              delay(5);

              lightDigit4(numbers[digit4]);

              delay(5);            

         }

        }

      }

    }

  }

}



void lightDigit1(byte number) {

  digitalWrite(CA1, LOW);

  digitalWrite(CA2, LOW);

  digitalWrite(CA3, LOW);

  digitalWrite(CA4, HIGH);

  lightSegments(number);

}



void lightDigit2(byte number) {

  digitalWrite(CA1, LOW);

  digitalWrite(CA2, LOW);

  digitalWrite(CA3, HIGH);

  digitalWrite(CA4, LOW); 

  lightSegments(number);

}



void lightDigit3(byte number) {

  digitalWrite(CA1, LOW);

  digitalWrite(CA2, HIGH);

  digitalWrite(CA3, LOW);

  digitalWrite(CA4, LOW); 

  lightSegments(number);

}



void lightDigit4(byte number) {

  digitalWrite(CA1, HIGH);

  digitalWrite(CA2, LOW);

  digitalWrite(CA3, LOW);

  digitalWrite(CA4, LOW); 

  lightSegments(number);

}





void lightSegments(byte number) {

  for (int i = 0; i < 7; i++) {

    int bit = bitRead(number, i);

    digitalWrite(segs[i], bit);

  }

}

Related Posts:

0 意見:

張貼留言