int ledIndex = 0;
int indexsegment = 0;
int format[] = {0b000000,0b000001, 0b000011, 0b000111, 0b001111, 0b011111, 0b111111, 0b100000, 0b100010};
const byte sigmentCodes[] = {
0b01000000, // 0 -> 0x30,
0b01111001, // 1 -> 0x39,
0b00100100, // 2 -> 0x24,
0b00110000, // 3 -> 0x0C,
0b00011001, // 4 -> 0x19,
0b00010010, // 5 -> 0x12,
0b00000010, // 6 -> 0x02,
0b01111000, // 7 -> 0x38,
0b00000000, // 8 -> 0x00,
0b00010000, // 9 -> 0x10,
0b00001000, // A -> 0x08,
0b00000011, // B -> 0x03,
0b01000110, // C -> 0x46,
0b00100001, // D -> 0x21,
0b00000110, // E -> 0x06,
0b10001110 // F -> 0x8E
}; // F
void setup() {
DDRD = 0xFF;
DDRB = 0b000000;
DDRC = 0b000000;
}
void displayDigit(byte digitCode) {
PORTD = digitCode;
}
void turnOffLED(int index) {
if (index == 9) {
DDRB = 0b000000;
DDRC = 0b000000;
displayDigit(0);
}
else if (index == 19) {
DDRB = 0b000000;
DDRC = 0b000000;
displayDigit(0);
}
}
void LED_Step2() {
if(ledIndex >=0 && ledIndex <=9){
if(ledIndex <=6){
DDRB = DDRB| format[ledIndex];
}
else if (ledIndex >= 7 && ledIndex <=8){
DDRC = DDRC | format[ledIndex];
}
else if(ledIndex == 9){
turnOffLED(ledIndex);
}
}
else {
if(ledIndex >=10 && ledIndex <=18 ){
if(ledIndex <= 11 ){
DDRC = (DDRC|(format[9]))|(~(1<<5));
}
else if (ledIndex >11 && ledIndex <=12){
DDRC = format[8];
}
else if (ledIndex >12 && ledIndex <=13){
DDRB = (DDRB & format[7])|(1<<5);
}
else if (ledIndex >13 && ledIndex <=14){
DDRB = DDRB | (format[6])&((1<<4));
}
else if (ledIndex >14 && ledIndex <=15){
DDRB = DDRB | (format[5])&((1<<3));
}
else if (ledIndex >15 && ledIndex <=16){
DDRB = DDRB | (format[4])&((1<<2));
}
else if (ledIndex >16 && ledIndex <=17){
DDRB = DDRB | (format[3])&((1<<1));
}
else if (ledIndex >17 && ledIndex <=18){
DDRB = DDRB | (format[2])&((1<<0));
}
}
else {
turnOffLED(ledIndex);
ledIndex = 0;
}
}
}
void loop() {
if (indexsegment == 16) {
indexsegment = 0;
}
LED_Step2();
displayDigit(sigmentCodes[indexsegment]);
delay(300);
indexsegment += 1;
ledIndex += 1;
}