NittyGritty icon

HC585-Test

NittyGritty | PRO | 11/02/17 09:47:16 PM UTC | 0 ⭐ | 709 👁️ | Never ⏰ | []
C++ |

3.19 KB

|

None

|

0 👍

/

0 👎

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);
  }
}

Comments