#include <avr/io.h>
#include <avr/interrupt.h>
const int LED_pin = 13;
const int tlac1 = A0;
int stav_tlac1;
int lastState = HIGH;
unsigned int reload = 0xF424; // dec 62 500
volatile int sec;
volatile int min;
volatile int hod;
ISR(TIMER1_COMPA_vect) //obsluha vektoru přerušeni od čítače
{
sec++; // pricte impuls do citace vterin
flash(); //neguje led
if(sec==5) //
{
sec = 0;
min=min+1; // pricte minutu do promene minut
}
if(min>=10)
{
min = 0;
hod=hod+1;
}
if(hod==24)
{
hod=0;
}
} //konec preruseni
void setup() //------------------------------------------------------------------------------
{
pinMode(LED_pin, OUTPUT); //nastaveni portu na vystup
pinMode(tlac1, INPUT_PULLUP);
digitalWrite(LED_pin, LOW); //zhasne led
cli();
TCCR1A = 0;
TCCR1B = 0;
OCR1A = reload; // porovnavaci registr - zadani hodnoty 62 500
TCCR1B = (1<<WGM12) | (1<<CS12); // delicka hodin
TIMSK1 = (1<<OCIE1A); // povoleni interrupt preteceni citace
sei(); // povoleni vsech interruptů
} //konec setup
void loop() //-----------------------------------------------------------------------------------
{
stav_tlac1 = digitalRead(tlac1);
if (lastState == HIGH && stav_tlac1 == LOW)
{
min = min + 1;
}
lastState = stav_tlac1;
delay(100);
} //konec loop
void flash() //funkce bliknuti_negace led ------------------------------------------------
{
static boolean output = HIGH;
digitalWrite(LED_pin, output);
output = !output;
}