Skip to content

Instantly share code, notes, and snippets.

@zuzkins
Last active October 2, 2020 14:59
Show Gist options
  • Save zuzkins/56e308764c99b2276c7d0008f1aea0d2 to your computer and use it in GitHub Desktop.
Save zuzkins/56e308764c99b2276c7d0008f1aea0d2 to your computer and use it in GitHub Desktop.
7 segment 4 digit led display test
ub/*
Showing number 0-9 on a Common Anode 7-segment LED display
Displays the numbers 0-9 on the display, with one second inbetween.
A
---
F | | B
| G |
---
E | | C
| |
---
D
This example code is in the public domain.
*/
// Pin 2-8 is connected to the 7 segments of the display.
int pin_A = 2;
int pin_B = 3;
int pin_C = 4;
int pin_D = 5;
int pin_E = 6;
int pin_F = 7;
int pin_G = 8;
int D1 = 9;
int D2 = 10;
int D3 = 11;
int D4 = 12;
int digits[] = {
B01111110, // 0
B00110000, // 1
B01101101, // 2
B01111001, // 3
B00110011, // 4
B01011011, // 5
B01011111, // 6
B01110000, // 7
B01111111, // 8
B01111011, // 9
};
int digits_count = sizeof(digits)/sizeof(int);
int mask_A = B01000000;
int mask_B = B00100000;
int mask_C = B00010000;
int mask_D = B00001000;
int mask_E = B00000100;
int mask_F = B00000010;
int mask_G = B00000001;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pins as outputs.
pinMode(pin_A, OUTPUT);
pinMode(pin_B, OUTPUT);
pinMode(pin_C, OUTPUT);
pinMode(pin_D, OUTPUT);
pinMode(pin_E, OUTPUT);
pinMode(pin_F, OUTPUT);
pinMode(pin_G, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
pinMode(D4, OUTPUT);
}
unsigned long cur_digit = 0;
unsigned long lastRender = millis();
// the loop routine runs over and over again forever:
void loop() {
int digit = 0;
digit = digits[(cur_digit + 1) % digits_count];
digitalWrite(D1, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(D3, HIGH);
digitalWrite(D4, LOW);
digitalWrite(pin_A, digit & mask_A);
digitalWrite(pin_B, digit & mask_B);
digitalWrite(pin_C, digit & mask_C);
digitalWrite(pin_D, digit & mask_D);
digitalWrite(pin_E, digit & mask_E);
digitalWrite(pin_F, digit & mask_F);
digitalWrite(pin_G, digit & mask_G);
delay(5);
digit = digits[cur_digit];
digitalWrite(D1, LOW);
digitalWrite(D2, LOW);
digitalWrite(D3, LOW);
digitalWrite(D4, HIGH);
digitalWrite(pin_A, digit & mask_A);
digitalWrite(pin_B, digit & mask_B);
digitalWrite(pin_C, digit & mask_C);
digitalWrite(pin_D, digit & mask_D);
digitalWrite(pin_E, digit & mask_E);
digitalWrite(pin_F, digit & mask_F);
digitalWrite(pin_G, digit & mask_G);
delay(5);
if ((millis() - lastRender) >= 500) {
lastRender = millis();
cur_digit = ++cur_digit % digits_count;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment