126

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

";" забыл поставить

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#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 an, segm1, segm2, segm3, i;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den;
int tic=10;

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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);
}

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+1;

  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}
  h0 = hour%10;
  m1 = minut/10%10; 
  m0 = minut%10; 
  s1 = secon/10%10;
  s0 = secon%10;
  
  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}
  d0 = data%10; 
  if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}
  ms0 = mon%10;
  
  g1 = (year-2000)/10%10; 
  g0 = (year-2000)%10; 

  dn = den+10;
  
  t1 = 2;
  t0 = 8;
 
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    case 11: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 17: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

127

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

По кнопкам: Menu,Up,Exit. При нажатии Menu мигает выбираемый параметр,кнопкой Up настраивается параметр,после настроек кнопкой Exit выход или через  некоторое время автоматически выход из настроек.

128

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

В месяцу 1 пропала? должно быть просто 8

129

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

liman324 пишет:

В месяцу 1 пропала? должно быть просто 8

http://forum.rcl-radio.ru/uploads/images/2023/08/66bc9a6ce851931e9682e63cd1b0d502.jpg

130

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

Посмотрите кнопки на наличие подтягивающих резисторов к +5 или GND.

131

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

liman324 пишет:

Посмотрите кнопки на наличие подтягивающих резисторов к +5 или GND.

Там кнопки через+5 коммутация
http://forum.rcl-radio.ru/uploads/images/2023/08/743224b40368805af03950838e4a19c1.jpg
Не проблема если через gnd будут управлять

132

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

Да лучше ни чего не менять.

Если замыкание на +5В, то на входе должен стоять подтягивающий резистор на GND.

133 (2023-08-26 21:49:51 отредактировано Djonny 2022)

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

liman324 пишет:

Да лучше ни чего не менять.

Если замыкание на +5В, то на входе должен стоять подтягивающий резистор на GND.

Нет там резисторов, конденсаторы только межкнопками. Пусть будет на минус управление

134

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

Хорошо, тогда переделайте подключение

Нажатие кнопки === замыкание на GND

135

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

liman324 пишет:

Хорошо, тогда переделайте подключение

Нажатие кнопки === замыкание на GND

Ок

136

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

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10;
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    case 11: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 17: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

137 (2023-08-27 06:48:56 отредактировано Djonny 2022)

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

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10;
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    case 11: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 17: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Круть))) только день недели ВС не загорается.

138

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

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

139

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

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Не работает ( настраиваю число 26 августа,горит ВС ,27 число,ничего не горит,28 -Вт,29-Ср,30-Чт,31-Пт

140

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

Я убрал секунды и вывожу вместо них число дня недели

оно должно быть от 1 до 7

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;
  secon = den;
  
  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

141

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

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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+1;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10;
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    case 11: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 17: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Тут все работает,кроме Вс не горит

142

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

Еще какое число выводится на сегодня

143

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

У Ds3231 - числовое представление дня недели по стандарту ISO-8601 (от 1 для понедельника до 7 для воскресенья).
В Ваших часах вс....сб

мне надо знать какое число дня недели на сегодня выводят Ds 3231 и на завтра и тд

144 (2023-08-27 08:32:11 отредактировано Djonny 2022)

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

liman324 пишет:

У Ds3231 - числовое представление дня недели по стандарту ISO-8601 (от 1 для понедельника до 7 для воскресенья).
В Ваших часах вс....сб

мне надо знать какое число дня недели на сегодня выводят Ds 3231 и на завтра и тд

http://forum.rcl-radio.ru/uploads/images/2023/08/da1fce06806c841dbdb883f264a0c52e.jpg

145

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

Я вроде нашел ошибку

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

146 (2023-08-27 08:44:26 отредактировано Djonny 2022)

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

liman324 пишет:

Я вроде нашел ошибку

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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 an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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;
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

Теперь все в порядке))) Внешний датчик температуры ds18b20 можно добавить?

147

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

Тестируйте. Если что то будет не так пишите.

148

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

Внешний датчик температуры ds18b20 можно добавить?

Да можно

149

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

23 пин свободен?

150

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

Измерение 1 раз в 10 секунд, что бы исключить саморазогрев датчика

Вход 23 пин

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

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#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,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;


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_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  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;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(200);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 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; // Расчет температуры и вывод
}