Pages: [1]   Go Down
Author Topic: reusing a 4*7segments from clockradio  (Read 2122 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi.
I searched to use display from my broken radioclock, its look the same as show here:
http://www.electroniq.net/other-projects/digital-clock-alarm-based-lm8560.html
http://postimg.org/image/s5owqafz1/ (here i added output in red)
So it was finaly controled via two 74HC595

Here is the code for a fast clock:
Code:
long previous1 = 0;
long interval1 = 10;
long previous2 = 0;
long interval2 = 200;
int digit[4]={8,8,8,8};
int heure=0;
int minute=0;
int SER_Pin = 2;   //pin 14 on the 75HC595 SPI mosi
int RCLK_Pin = 3;  //pin 12 on the 75HC595 SPI ss
int SRCLK_Pin = 4; //pin 11 on the 75HC595 SPI clock

#define number_of_74hc595s 2

#define numOfRegisterPins number_of_74hc595s * 8
int phase = 0;
boolean registers[numOfRegisterPins];
byte seven_seg_digits[11][7] = { { 1,1,1,1,1,1,0 },  // = 0
                                 { 0,1,1,0,0,0,0 },  // = 1
                                 { 1,1,0,1,1,0,1 },  // = 2
                                 { 1,1,1,1,0,0,1 },  // = 3
                                 { 0,1,1,0,0,1,1 },  // = 4
                                 { 1,0,1,1,0,1,1 },  // = 5
                                 { 1,0,1,1,1,1,1 },  // = 6
                                 { 1,1,1,0,0,0,0 },  // = 7
                                 { 1,1,1,1,1,1,1 },  // = 8
                                 { 1,1,1,1,0,1,1 },  // = 9
                                 { 0,0,0,0,0,0,0 },  //
                                 }; 

//                   A  B  C  D  E  F  G
byte seg[4][2][7]={{{2, 4, 3, 0, 0, 0, 0},
                    {0, 0, 0, 3, 5, 2, 4}},
                   {{0, 0, 0, 6, 5, 8, 7},
                    {8, 7, 6, 0, 0, 0, 0}},
                   {{9, 11,10,0, 0, 0, 0},
                    {0, 0, 0, 10,12,9, 11}},
                   {{0, 15,12,0, 13,0, 14},
                    {14,0, 0, 13,0, 0, 0}}};
void setup(){
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);

  clearRegisters();
  writeRegisters();

 
}               

void clearRegisters(){
  for(int i = numOfRegisterPins - 1; i >=  0; i--){
     registers[i] = LOW;
  }
}

void writeRegisters(){

  digitalWrite(RCLK_Pin, LOW);

  for(int i = numOfRegisterPins - 1; i >=  0; i--){
    digitalWrite(SRCLK_Pin, LOW);

    int val = registers[i];

    digitalWrite(SER_Pin, val);
    digitalWrite(SRCLK_Pin, HIGH);

  }
  digitalWrite(RCLK_Pin, HIGH);

}

void setRegisterPin(int index, int value){
  registers[index] = value;
}


void loop()
{
  long currentMillis = millis();
  if(currentMillis - previous1 > interval1) {
    clearRegisters();
    previous1 = currentMillis;
    for (byte d = 0; d < 4; ++d) {
    for (byte segCount = 0; segCount < 7; ++segCount) {
        int n=seg[d][phase][segCount];
        if (n>0){
          setRegisterPin(n,seven_seg_digits[digit[3-d]][segCount]);
        }
      }
  }
    if (phase==0){
      setRegisterPin(0, 1);
      setRegisterPin(1, 0);
    }
    if (phase==1){
      setRegisterPin(0, 0);
      setRegisterPin(1, 1);
    }
    writeRegisters();
    phase++;
    if (phase>1){phase=0;}
   
   
  }
  if(currentMillis - previous2 > interval2) {
    previous2 = currentMillis;
    minute++;
    if (minute>59){
      minute=0;
      heure++;
    }
    if (heure>23){
      heure=0;
    }
    int h1=heure/10;
    if (h1==0){
      digit[0]=10;}
    else{
      digit[0]=h1;
    }
    digit[1]=heure%10;
    digit[2]=minute/10;
    digit[3]=minute%10;
  }
 
}
« Last Edit: September 26, 2013, 01:18:51 pm by clabis » Logged

Pages: [1]   Go Up
Jump to: