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
};
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);
}
else if (index == 22) {
DDRB = 0b000000;
DDRC = 0b000000;
displayDigit(0);
}
else if (index == 23) {
DDRB = 0b000000;
DDRC = 0b000000;
displayDigit(0);
}
}
void LED_Step2() {
if(ledIndex >=0 && ledIndex <=19){
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 >=0 && 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);
}
}
}
else{
if(ledIndex > 19 && ledIndex <= 20){
for (int i = 0 ; i <9 ;i++){
if ( i >= 0 && i<9){
if ( i == 1){
DDRB = DDRB|(1<<i);
}
else if (i == 3){
DDRB = DDRB|(1<<i);
}
else if (i == 5){
DDRB = DDRB|(1<<i);
}
else if (i == 7){
DDRC = DDRC|(1<<1);
}
}
}
}
else if (ledIndex > 20 && ledIndex <= 21){
turnOffLED(ledIndex);
for (int i = -1 ; i <9 ;i++){
if ( i >= 0 && i<9){
if ( i == 0){
DDRB = DDRB|(1<<i);
}
else if ( i == 2){
DDRB = DDRB|(1<<i);
}
else if ( i == 4){
DDRB = DDRB|(1<<i);
}
else if ( i == 6){
DDRB = DDRB|(1<<i);
}
else if ( i == 8){
DDRC = DDRC|(1<<5);
}
}
}
}
else if (ledIndex > 22 ){
turnOffLED(ledIndex);
ledIndex = 0;
}
}
}
void loop() {
if (indexsegment == 16) {
indexsegment = 0;
}
LED_Step2();
displayDigit(sigmentCodes[indexsegment]);
delay(1000);
indexsegment += 1;
ledIndex += 1;
}
// for( int i = 8;i<=0;i-- ){
// if ( i == 7){
// DDRC = DDRC|(1<<2);
// }
// else if (i == 4){
// DDRB = DDRB|(1<<i);
// }
// else if (i == 2){
// DDRB = DDRB|(1<<i);
// }
// else if (i == 0){
// DDRB = DDRB|(1<<1);
// }