Devices & Components
Arduino Nano
7 Segment LED Display, InfoVue
Resistor 220 ohm
LilyPad LED Blue (5pcs)
Software & Tools
Arduino IDE
Project description
Code
Controlling 7 segment display with pinmode, digitalWrite
arduino
1int digits [10][7]{ 2 {1,1,1,1,1,1,0}, // digit 0 3 {0,1,1,0,0,0,0}, 4 // digit 1 5 {1,1,0,1,1,0,1}, // digit 2 6 {1,1,1,1,0,0,1}, // digit 3 7 8 {0,1,1,0,0,1,1}, // digit 4 9 {1,0,1,1,0,1,1}, // digit 5 10 {1,0,1,1,1,1,1}, 11 // digit 6 12 {1,1,1,0,0,0,0}, // digit 7 13 {1,1,1,1,1,1,1}, // digit 8 14 15 {1,1,1,1,0,1,1} // digit 9 16}; 17void setup() { 18 pinMode(0, OUTPUT);// 19 Segment A 20 pinMode(1, OUTPUT);// Segment B 21 pinMode(2, OUTPUT);// Segment 22 C 23 pinMode(3, OUTPUT);// Segment D 24 pinMode(4, OUTPUT);// Segment E 25 26 pinMode(5, OUTPUT);// Segment F 27 pinMode(6, OUTPUT);// Segment G 28} 29void 30 display_digit(int d){ 31 if (digits[d][0]==1) digitalWrite(0, LOW); else digitalWrite(0, 32 HIGH); //A 33 if (digits[d][1]==1) digitalWrite(1, LOW); else digitalWrite(1, 34 HIGH); //B 35 if (digits[d][2]==1) digitalWrite(2, LOW); else digitalWrite(2, 36 HIGH); //C 37 if (digits[d][3]==1) digitalWrite(3, LOW); else digitalWrite(3, 38 HIGH); //D 39 if (digits[d][4]==1) digitalWrite(4, LOW); else digitalWrite(4, 40 HIGH); //E 41 if (digits[d][5]==1) digitalWrite(5, LOW); else digitalWrite(5, 42 HIGH); //F 43 if (digits[d][6]==1) digitalWrite(6, LOW); else digitalWrite(6, 44 HIGH); //G 45} 46void loop() { 47 for (int i=0;i<10;i++) { 48 display_digit(i); 49 50 delay(1000); 51 } 52} 53
Controlling 7 segment display with pinmode, digitalWrite
arduino
1int digits [10][7]{ 2 {1,1,1,1,1,1,0}, // digit 0 3 {0,1,1,0,0,0,0}, // digit 1 4 {1,1,0,1,1,0,1}, // digit 2 5 {1,1,1,1,0,0,1}, // digit 3 6 {0,1,1,0,0,1,1}, // digit 4 7 {1,0,1,1,0,1,1}, // digit 5 8 {1,0,1,1,1,1,1}, // digit 6 9 {1,1,1,0,0,0,0}, // digit 7 10 {1,1,1,1,1,1,1}, // digit 8 11 {1,1,1,1,0,1,1} // digit 9 12}; 13void setup() { 14 pinMode(0, OUTPUT);// Segment A 15 pinMode(1, OUTPUT);// Segment B 16 pinMode(2, OUTPUT);// Segment C 17 pinMode(3, OUTPUT);// Segment D 18 pinMode(4, OUTPUT);// Segment E 19 pinMode(5, OUTPUT);// Segment F 20 pinMode(6, OUTPUT);// Segment G 21} 22void display_digit(int d){ 23 if (digits[d][0]==1) digitalWrite(0, LOW); else digitalWrite(0, HIGH); //A 24 if (digits[d][1]==1) digitalWrite(1, LOW); else digitalWrite(1, HIGH); //B 25 if (digits[d][2]==1) digitalWrite(2, LOW); else digitalWrite(2, HIGH); //C 26 if (digits[d][3]==1) digitalWrite(3, LOW); else digitalWrite(3, HIGH); //D 27 if (digits[d][4]==1) digitalWrite(4, LOW); else digitalWrite(4, HIGH); //E 28 if (digits[d][5]==1) digitalWrite(5, LOW); else digitalWrite(5, HIGH); //F 29 if (digits[d][6]==1) digitalWrite(6, LOW); else digitalWrite(6, HIGH); //G 30} 31void loop() { 32 for (int i=0;i<10;i++) { 33 display_digit(i); 34 delay(1000); 35 } 36} 37
Controlling 7 segment display with PIN registers
arduino
The code is not only optimised and much shorter. It is also much faster in terms of sending appropriate signals to Arduino pins.
1int digits [10]{ 2 B01000000, // digit 0 3 B11111001, // digit 1 4 B00100100, // digit 2 5 B00110000, // digit 3 6 B00011001, // digit 4 7 B00010010, // digit 5 8 B00000010, // digit 6 9 B01111000, // digit 7 10 B00000000, // digit 8 11 B00010000 // digit 9 12}; 13void setup() { 14 DDRD=B11111111; 15} 16void loop() { 17 for (int i=0;i<10;i++) { 18 PORTD=digits[i]; 19 delay(1000); 20 } 21} 22
Comments
Only logged in users can leave comments