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