// PORTD = D0 - D7
// PORTC = A0 - A5, PC6 = RESET
// PORTB = D8 - D13
/*
DDRB7 PORTB7 example
DDRxn PORTxn state (?PINxn?)
0 0 INPUT
0 1 INPUT_PULLUP
1 0 OUTPUT LOW
1 1 OUTPUT HIGH
SEGMENTS
A
---
F| G |B
---
E| |C
--- o DP
D
PINS D13 D12 D11 D10 D09 D08 | D07 D06 D05 D04 D03 D02 TxD RxD
PORT PB5 PB4 PB3 PB2 PB1 PB0 | PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
SEGS L - - - dp g | f e d c b a - -
PINS A05 A04 A03 A02 A01 A00 RST
PORT PC5 PC4 PC3 PC2 PC1 PC0 PC6
- - - - - - -
*/
byte digit[] = {
B11111100, // 0 = 0xfd, dp = 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B00111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
byte tensdigit, unitsdigit, counter = 0;
int dly = 1000;
byte buttonPin = 18; // analog pin A4
void setup() {
DDRD |= B11111110;
DDRB |= B00000110;
PORTD = 0x00;
PORTB = 0x00;
shownumber(2);
while (1);
}
void loop() {
if (digitalRead(buttonPin)) {
for (counter = 0; counter < 100; counter++) {
tensdigit = counter / 10;
unitsdigit = counter % 10;
PORTB |= B00000100;
PORTB &= B11111101;
shownumber(unitsdigit);
delay(dly);
PORTB |= B00000010;
PORTB &= B11111011;
shownumber(tensdigit);
delay(dly);
}
}
}
void shownumber(int number) {
switch (number) {
case 0 :
PORTD = digit[0];
break;
case 1:
PORTD = digit[1];
break;
case 2:
PORTD = digit[2];
break;
case 3:
PORTD = digit[3];
break;
case 4:
PORTD = digit[4];
break;
case 5:
PORTD = digit[5];
break;
case 6:
PORTD = digit[6];
break;
case 7:
PORTD = digit[7];
break;
case 8:
PORTD = digit[8];
break;
case 9:
PORTD = digit[9];
break;
}
}