#define CLK PB1 // TM1637 tiny13 Pin6, Arduino pin 9
#define DIO PB0 // TM1637 tiny13 Pin5, Arduino pin 8
#define SET PB3 // BUTTON SET tiny13 Pin2, Arduino pin 11
#define START PB4 // BUTTON START/STOP tiny13 Pin3, Arduino pin 12
#define OUT PB2 // RELAY tiny13 Pin7, Arduino pin 10
char i=1,tic,n;
bool w,w1=0;
unsigned long times;
//массив с временем устанавливаемом нажатие кнопки SET
// byte set_time[]={10, 15, 20, 25 , 30}; //время в минутах
byte set_time[]={20}; // мне не нужно переключать время, оставил только 20 минут, массив закомментировал
void setup(){
DDRB |= (1 << OUT);
PORTB &= ~(1 << OUT);
PORTB |= (1 << SET) | (1 << START);
n = EEPROM_read(0);
i=set_time[n];
}
void loop(){
if(((PINB >> SET) & 1) == 0){n++;if(n>10){n=0;}i=set_time[n];EEPROM_write(0,n);delay(200);}
if(((PINB >> START) & 1) == 0 && w==0){w=1;delay(200);}
if(((PINB >> START) & 1) == 0 && w==1){w=0;i=set_time[n];tic=0;delay(200);}
if(w==1 && (i>0 || (i==0 && tic>0))){PORTB |= (1 << OUT);w1=1;}
else{PORTB &= ~(1 << OUT);w=0;w1=0;i=set_time[n];}
if(w==1){
if(millis()-times>999){times=millis();tic--;}
if(tic<0){tic=59;i--;}
}
tm_print(i*100+tic,w1,5);
}// end loop
unsigned char EEPROM_read(unsigned int uiAddress){
while(EECR & (1<<EEPE)); // проверка готовности EEPROM
EEAR = uiAddress; // регистр адреса
EECR |= (1<<EERE);// чтение EEPROM
return EEDR; // вывод значения
}
void EEPROM_write(unsigned int uiAddress, unsigned char ucData){
while(EECR & (1<<EEPE)); // проверка готовности EEPROM
EEAR = uiAddress; // регистр адреса
EEDR = ucData; // регистр данных
EECR |= (1<<EEMPE);// Разрешение записи в EEPROM
EECR |= (1<<EEPE); // Запись в EEPROM
}
void tm_dec(byte dig){
for(byte i = 0; i < 8; i++) {
DDRB |= (1 << CLK);del();
if (dig & 0x01)
DDRB &= ~(1 << DIO);
else
DDRB |= (1 << DIO);del();
DDRB &= ~(1 << CLK);del();
dig = dig >> 1;
}
DDRB |= (1 << CLK);
DDRB &= ~(1 << DIO);del();
DDRB &= ~(1 << CLK);del();
if (((PINB >> DIO) & 1) == 0)
DDRB |= (1 << DIO);del();
DDRB |= (1 << CLK);del();
}
void tm_stop(){
DDRB |= (1 << DIO);del();
DDRB &= ~(1 << CLK);del();
DDRB &= ~(1 << DIO);del();
}
void tm_start(){
DDRB |= (1 << DIO);del();
}
void tm_print(int t, bool pd_t, byte br){
tm_start();tm_dec(0b10001000 + br);
tm_dec(0x40);tm_stop();tm_start();
int data0 = t / 1000;
int data1 = t / 100 % 10;
int data2 = t / 10 % 10;
int data3 = t % 10;
for(byte n = 0; n < 4; n++){
int data;
switch(n){
case 0: data = data0;break;
case 1: data = data1;break;
case 2: data = data2;break;
case 3: data = data3;break;
}
switch(data){ // XGFEDCBA
case 0: data = 0b00111111;break; // 0
case 1: data = 0b00000110;break; // 1
case 2: data = 0b01011011;break; // 2
case 3: data = 0b01001111;break; // 3
case 4: data = 0b01100110;break; // 4
case 5: data = 0b01101101;break; // 5
case 6: data = 0b01111101;break; // 6
case 7: data = 0b00000111;break; // 7
case 8: data = 0b01111111;break; // 8
case 9: data = 0b01101111;break; // 9
}
if(n == 0){data0 = data;}
if(n == 1){data1 = data;}
if(n == 2){data2 = data;}
if(n == 3){data3 = data;}
}
if(pd_t==1){data1 = data1+0b10000000;}
tm_dec(0xC0);tm_dec(data0);tm_dec(data1);tm_dec(data2);tm_dec(data3);tm_stop();
}
void del(){delay(1);}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
Start
SET
sevseg1:CLK
sevseg1:DIO
sevseg1:VCC
sevseg1:GND
led1:A
led1:C