226

Re: Часы с календарем

Тогда будем переворачивать индикатор

http://forum.rcl-radio.ru/uploads/images/2023/09/82e1fb9afca63babcb8e67f3a67510ac.png

http://rcl-radio.ru/wp-content/uploads/ … OCK3_1.gif

227 (2023-09-03 16:16:34 отредактировано Djonny 2022)

Re: Часы с календарем

liman324 пишет:

Тогда будем переворачивать индикатор

http://forum.rcl-radio.ru/uploads/images/2023/09/82e1fb9afca63babcb8e67f3a67510ac.png

http://rcl-radio.ru/wp-content/uploads/ … OCK3_1.gif

Индикаторы у меня с общим анодом. На коллектор+, эмиттер на анод

228

Re: Часы с календарем

http://forum.rcl-radio.ru/uploads/images/2023/09/3ab91c88f586846bb0b5144bdfb94e9d.gif

229

Re: Часы с календарем

Резисторы 330 Ом, максимальный ток на пин 15 мА

230 (2023-09-03 17:23:29 отредактировано Djonny 2022)

Re: Часы с календарем

360 Ом у меня.Макет готов к проверке

231

Re: Часы с календарем

Просто тест индикации

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       33
#define SEG_B       32
#define SEG_C       31
#define SEG_D       30
#define SEG_E       26
#define SEG_F       25
#define SEG_G       24 
#define SEG_DP      23 

//// Аноды
#define AN_Q1        43
#define AN_Q2        42
#define AN_Q3        41
#define AN_Q4        40
#define AN_Q5        37
#define AN_Q6        36
#define AN_Q7        35
#define AN_Q8        34



#include <Wire.h>
//#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
//DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an;
int hh,mm;


void setup() {
  Wire.begin();
 // clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  a[0]=1;
  a[1]=2;
  a[2]=3;
  a[3]=4;
  a[4]=5;
  a[5]=6;
  a[6]=7;
  a[7]=8;

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 1: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 2: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 3: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 4: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 5: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 6: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
    case 7: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
   case 10: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

232 (2023-09-03 20:16:39 отредактировано Djonny 2022)

Re: Часы с календарем

Горят сегменты D и E в ключах Q5,Q6,Q7

233

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       33
#define SEG_B       32
#define SEG_C       31
#define SEG_D       30
#define SEG_E       26
#define SEG_F       25
#define SEG_G       24 
#define SEG_DP      23 

//// Аноды
#define AN_Q1        43
#define AN_Q2        42
#define AN_Q3        41
#define AN_Q4        40
#define AN_Q5        37
#define AN_Q6        36
#define AN_Q7        35
#define AN_Q8        34


long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an;
int hh,mm;


void setup() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  a[0]=1;
  a[1]=2;
  a[2]=3;
  a[3]=4;
  a[4]=5;
  a[5]=6;
  a[6]=7;
  a[7]=8;

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 1: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 2: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 3: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 4: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 5: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 6: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
    case 7: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
   case 10: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

234

Re: Часы с календарем

Добавились сегменты С к ключам Q6,Q7

235

Re: Часы с календарем

У меня частота на 8 МГц как в тех часах

236

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27


long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an;
int hh,mm;


void setup() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  a[0]=1;
  a[1]=2;
  a[2]=3;
  a[3]=4;
  a[4]=5;
  a[5]=6;
  a[6]=7;
  a[7]=8;

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 1: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 2: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 3: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 4: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 5: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
    case 6: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
    case 7: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
   case 10: ch(AN_Q1, 1); ch(AN_Q2, 1); ch(AN_Q3, 1); ch(AN_Q4, 1); ch(AN_Q5, 1); ch(AN_Q6, 1); ch(AN_Q7, 1); ch(AN_Q8, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

237 (2023-09-03 20:53:53 отредактировано Djonny 2022)

Re: Часы с календарем

Горят все сегменты на всех индикаторах

238

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27


long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an;
int hh,mm;


void setup() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  a[0]=1;
  a[1]=2;
  a[2]=3;
  a[3]=4;
  a[4]=5;
  a[5]=6;
  a[6]=7;
  a[7]=8;

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

239

Re: Часы с календарем

Цифры с 1- Q1 по 8-Q8 с точками

240

Re: Часы с календарем

Все точки должны погаснуть

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27


long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int hh,mm;


void setup() {
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  a[0]=1;
  a[1]=2;
  a[2]=3;
  a[3]=4;
  a[4]=5;
  a[5]=6;
  a[6]=7;
  a[7]=8;
  

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,1);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,1);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

241

Re: Часы с календарем

Теперь без точек

242

Re: Часы с календарем

Подключите Ds3231

243

Re: Часы с календарем

DS3231 к 19 и 20 пинам подключена, DS18B20 куда?

244

Re: Часы с календарем

DS18B20 к 44, но пока я его не активирую.

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int hh,mm, dd, ms, gg;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;
  

  delay(1000);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,1);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,1);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

245

Re: Часы с календарем

Должны мигать точки большого индикатора в такт секундам

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

246 (2023-09-03 21:33:56 отредактировано Djonny 2022)

Re: Часы с календарем

liman324 пишет:

Должны мигать точки большого индикатора в такт секундам

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

На маленьком часы с точками

247

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q5        3
#define AN_Q6        2
#define AN_Q7        1
#define AN_Q8        0
#define AN_Q1        24
#define AN_Q2        25
#define AN_Q3        26
#define AN_Q4        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

248

Re: Часы с календарем

liman324 пишет:
// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q5        3
#define AN_Q6        2
#define AN_Q7        1
#define AN_Q8        0
#define AN_Q1        24
#define AN_Q2        25
#define AN_Q3        26
#define AN_Q4        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 1; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 2; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 3; anod();break;
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 5; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 6; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 7; anod();break;
    
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Без изменений

249

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
  /// SMALL  
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 1; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 2; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 3; anod();break;
  /// BIG 
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 5; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 6; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 7; anod();break; 
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

250

Re: Часы с календарем

liman324 пишет:
// 19 === SCL
// 20 === SDA

//// Катоды
#define SEG_A       28
#define SEG_B       29
#define SEG_C       30
#define SEG_D       31
#define SEG_E       23
#define SEG_F       22
#define SEG_G       21 
#define SEG_DP      20 

//// Аноды
#define AN_Q1        3
#define AN_Q2        2
#define AN_Q3        1
#define AN_Q4        0
#define AN_Q5        24
#define AN_Q6        25
#define AN_Q7        26
#define AN_Q8        27

#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;

long oldPosition  = -999, newPosition, times;
int a[8],segm,i,an, dp1,dp2;
int old_sec,dp;
int hour,minut,secon,data,mon,year,den,temp;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT);
  pinMode(AN_Q1, OUTPUT);
  pinMode(AN_Q2, OUTPUT);
  pinMode(AN_Q3, OUTPUT);
  pinMode(AN_Q4, OUTPUT);
  pinMode(AN_Q5, OUTPUT);
  pinMode(AN_Q6, OUTPUT);
  pinMode(AN_Q7, OUTPUT);
  pinMode(AN_Q8, OUTPUT);


 // pinMode (EXIT,INPUT_PULLUP);

}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;

  
  a[0]=hour/10%10;
  a[1]=hour%10;
  a[2]=minut/10%10;
  a[3]=minut%10;
  if(data/10%10==0){a[4]=10;}else{a[4]=data/10%10;}
  a[5]=data%10;
  if(mon/10%10==0){a[6]=10;}else{a[6]=mon/10%10;}
  a[7]=mon%10;

  if(millis()-times<500){dp=1;}else{dp=0;}
  if(old_sec!=secon){old_sec=secon;times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
  /// SMALL  
    // Q5
    case 4: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[4];ch(SEG_DP,1);  segment(); an = 0; anod();break;
    // Q6
    case 5: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[5];ch(SEG_DP,1);  segment(); an = 1; anod();break;
    // Q7
    case 6: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[6];ch(SEG_DP,1);  segment(); an = 2; anod();break;
    // Q8
    case 7: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[7];ch(SEG_DP,1);  segment(); an = 3; anod();break;
  /// BIG 
    // Q1
    case 0: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[0];ch(SEG_DP,1);  segment(); an = 4; anod();break;
    // Q2
    case 1: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[1];ch(SEG_DP,dp);  segment(); an = 5; anod();break;
    // Q3
    case 2: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[2];ch(SEG_DP,dp);  segment(); an = 6; anod();break;
    // Q4
    case 3: segm = 10; segment(); an = 10; anod(); delayMicroseconds(200);segm = a[3];ch(SEG_DP,1);  segment(); an = 7; anod();break; 
  }
  i++;if (i > 7) {i = 0;}
}


void segment() {
  switch (segm) {
            //  A          B             C              D             E            F            G
    case 0: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 1); break; // 0
    case 1: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 1
    case 2: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 1); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 1); ch(SEG_G, 0); break; // 2
    case 3: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 0); break; // 3
    case 4: ch(SEG_A, 1); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 4
    case 5: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 5
    case 6: ch(SEG_A, 0); ch(SEG_B, 1); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 6
    case 7: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // 7
    case 8: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 0); ch(SEG_F, 0); ch(SEG_G, 0); break; // 8
    case 9: ch(SEG_A, 0); ch(SEG_B, 0); ch(SEG_C, 0); ch(SEG_D, 0); ch(SEG_E, 1); ch(SEG_F, 0); ch(SEG_G, 0); break; // 9
   case 10: ch(SEG_A, 1); ch(SEG_B, 1); ch(SEG_C, 1); ch(SEG_D, 1); ch(SEG_E, 1); ch(SEG_F, 1); ch(SEG_G, 1); break; // пусто
  }
}


void anod() {
  switch (an) {
    case 0: ch(AN_Q1, 1); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 1: ch(AN_Q1, 0); ch(AN_Q2, 1); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 2: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 1); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 3: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 1); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 4: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 1); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 5: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 1); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
    case 6: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 1); ch(AN_Q8, 0); break;
    case 7: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 1); break;
   case 10: ch(AN_Q1, 0); ch(AN_Q2, 0); ch(AN_Q3, 0); ch(AN_Q4, 0); ch(AN_Q5, 0); ch(AN_Q6, 0); ch(AN_Q7, 0); ch(AN_Q8, 0); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Теперь все хорошо,0 бы убрать в десятках часов