const int clock = 7; //SCK const int latch = 5; //RCK const int data = 6; //DIO byte value[] ={//DGFEDCBA B11000000, // 0 B11111001, // 1 B10100100, // 2 B10110000, // 3 B10011001, // 4 B10010010, // 5 B10000010, // 6 B11111000, // 7 B10000000, // 8 B10010000, // 9 B10001000, // A B10000011, // b B11000110, // C B10100001, // d B10000110, // E B10001110, // F B11111111 };// display nothing byte digit[] ={ B10000000, // left segment B01000000, B00100000, B00010000, B00001000, B00000100, B00000010, B00000001 }; // right segment byte ii = 0; byte temp_low[] = {0, 0, 0, 0, 0, 0, 0, 0 }; byte temp_high[] = {0, 0, 0, 0, 0, 0, 0, 0 }; byte vvalue_low = value[0]; byte vvalue_high = value[0]; void setup() { pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); pinMode(data, OUTPUT); cli();//stop interrupts //set timer0 interrupt at 980Hz TCCR0A = 0;// set entire TCCR0A register to 0 TCCR0B = 0;// same for TCCR0B TCNT0 = 0;//initialize counter value to 0 OCR0A = 255;//(must be <256) --> 16000000 / (prescaler*255) = 980 Hz TCCR0A |= (1 << WGM01); TCCR0B |= (1 << CS01) | (1 << CS00); //prescaler = 64 TIMSK0 |= (1 << OCIE0A); sei();//allow interrupts } ISR(TIMER0_COMPA_vect){ ii++; if (ii==8) ii=0; vvalue_low = temp_low[ii]; vvalue_high = temp_high[ii]; /* digitalWrite(latch,LOW); shiftOut(data,clock,MSBFIRST,B11111111); // select all segments shiftOut(data,clock,MSBFIRST,B11111111); // display nothing shiftOut(data,clock,MSBFIRST,B11111111); // select all segments shiftOut(data,clock,MSBFIRST,B11111111); // display nothing digitalWrite(latch,HIGH); */ digitalWrite(latch,LOW); shiftOut(data,clock,MSBFIRST,value[vvalue_low]); shiftOut(data,clock,MSBFIRST,digit[ii]); //digitalWrite(latch,HIGH); //digitalWrite(latch,LOW); shiftOut(data,clock,MSBFIRST,value[vvalue_high]); shiftOut(data,clock,MSBFIRST,digit[ii]); digitalWrite(latch,HIGH); } long i, j; // i - counts up, j counts down void loop() { for (i=1;i<=99999999;i++) { j = 100000000-i; temp_high[7] = (j / 0x1) % 0x10; temp_high[6] = (j / 0x10) % 0x10; temp_high[5] = (j / 0x100) % 0x10; temp_high[4] = (j / 0x1000) % 0x10; temp_high[3] = (j / 0x10000) % 0x10; temp_high[2] = (j / 0x100000) % 0x10; temp_high[1] = (j / 0x1000000) % 0x10; temp_high[0] = (j / 0x10000000) % 0x10; temp_low[7] = (i /1) % 10; temp_low[6] = (i / 10) % 10; temp_low[5] = (i / 100) % 10; temp_low[4] = (i / 1000) % 10; temp_low[3] = (i / 10000) % 10; temp_low[2] = (i / 100000) % 10; temp_low[1] = (i / 1000000) % 10; temp_low[0] = (i / 10000000) % 10; delay(100); } }