43 lines
932 B
C++
43 lines
932 B
C++
const unsigned int scan[] = {5, 6, 7, 8};
|
|
#define DATA 10
|
|
#define LATCH 11
|
|
#define CLK 12
|
|
|
|
byte numbers[] = {
|
|
0xC0, 0xF9, 0xA4, 0xB0, 0x99,
|
|
0x92, 0x82, 0xF8, 0x80, 0x90
|
|
};
|
|
|
|
void setup() {
|
|
for (int i = 0; i < 4; i++) {
|
|
pinMode(scan[i], OUTPUT);
|
|
digitalWrite(scan[i], HIGH);
|
|
}
|
|
pinMode(DATA, OUTPUT);
|
|
pinMode(LATCH, OUTPUT);
|
|
pinMode(CLK, OUTPUT);
|
|
}
|
|
|
|
void show(int digits[10], int shift) {
|
|
for (int i = 0; i < 4; i++) {
|
|
digitalWrite(LATCH, LOW);
|
|
shiftOut(DATA, CLK, MSBFIRST, numbers[digits[(shift + i) % 10]]);
|
|
digitalWrite(LATCH, HIGH);
|
|
digitalWrite(scan[3-i], LOW);
|
|
delay(1);
|
|
digitalWrite(scan[3-i], HIGH);
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
static unsigned long checkpoint = 0;
|
|
static int digits[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
|
static int count = 0;
|
|
show(digits, count);
|
|
if (millis() - checkpoint > 500) {
|
|
count--;
|
|
if (count < 0) count = 9;
|
|
checkpoint = millis();
|
|
}
|
|
}
|