uint8_t pins [7] = {PA0, PA1, PA2, PA3, PA4, PA5, PA6};
uint8_t digits [4] = {PA9, PA10, PA11, PA12};
int buttonCount1 = 0;
int buttonCount2 = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
for (int i=0; i<7; i++){
pinMode(pins[i], OUTPUT);
}
for(int i = 0; i < 4; i++){
pinMode(digits[i], OUTPUT);
}
pinMode(PB4, OUTPUT);
pinMode(PB5, OUTPUT);
digitalWrite(PB4, LOW);
digitalWrite(PB5, LOW);
attachInterrupt(digitalPinToInterrupt(PB14), interruption1, RISING);
attachInterrupt(digitalPinToInterrupt(PB15), interruption2, RISING);
}
void interruption1() {
digitalWrite(PB4, !digitalRead(PB4));
buttonCount1++;
}
void interruption2() {
digitalWrite(PB5, !digitalRead(PB5));
buttonCount2++;
}
void pick_digit(int number) {
digitalWrite(PA9, HIGH);
digitalWrite(PA10, HIGH);
digitalWrite(PA11, HIGH);
digitalWrite(PA12, HIGH);
switch(number) {
case 1:
digitalWrite(PA9, LOW);
break;
case 2:
digitalWrite(PA10, LOW);
break;
case 3:
digitalWrite(PA11, LOW);
break;
case 4:
digitalWrite(PA12, LOW);
break;
}
}
void show_number(int number) {
switch(number) {
case 0:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, HIGH);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, LOW);
break;
case 1:
digitalWrite(PA0, LOW);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, LOW);
digitalWrite(PA4, LOW);
digitalWrite(PA5, LOW);
digitalWrite(PA6, LOW);
break;
case 2:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, LOW);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, HIGH);
digitalWrite(PA5, LOW);
digitalWrite(PA6, HIGH);
break;
case 3:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, LOW);
digitalWrite(PA5, LOW);
digitalWrite(PA6, HIGH);
break;
case 4:
digitalWrite(PA0, LOW);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, LOW);
digitalWrite(PA4, LOW);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, HIGH);
break;
case 5:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, LOW);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, LOW);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, HIGH);
break;
case 6:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, LOW);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, HIGH);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, HIGH);
break;
case 7:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, LOW);
digitalWrite(PA4, LOW);
digitalWrite(PA5, LOW);
digitalWrite(PA6, LOW);
break;
case 8:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, HIGH);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, HIGH);
break;
case 9:
digitalWrite(PA0, HIGH);
digitalWrite(PA1, HIGH);
digitalWrite(PA2, HIGH);
digitalWrite(PA3, HIGH);
digitalWrite(PA4, LOW);
digitalWrite(PA5, HIGH);
digitalWrite(PA6, HIGH);
break;
default:
digitalWrite(PA0, LOW);
digitalWrite(PA1, LOW);
digitalWrite(PA2, LOW);
digitalWrite(PA3, LOW);
digitalWrite(PA4, LOW);
digitalWrite(PA5, LOW);
digitalWrite(PA6, LOW);
break;
}
}
int refreshing = 100;
int del = 300;
void loop() {
show_number(-1);
pick_digit(1);
show_number((buttonCount1/10/refreshing)%10);
delayMicroseconds(del);
show_number(-1);
pick_digit(2);
show_number((buttonCount1/refreshing)%10);
delayMicroseconds(del);
show_number(-1);
pick_digit(3);
show_number((buttonCount2/10/refreshing)%10);
delayMicroseconds(del);
show_number(-1);
pick_digit(4);
show_number((buttonCount2/refreshing)%10);
delayMicroseconds(del);
}