static unsigned char bcd[] =
{
0,
0,
0,
0,
0,
0,
0,
0
};
static void bcd_inc(unsigned char* bcd)
{
++bcd[0];//her zaman kesmesinde 1 arttır
if (bcd[0] == 10)//10 kere zaman kesmesinde(100ms) olunca BİRLER BASAMAĞI
{
bcd[0] = 0;//1 LER BASAMAĞINI SIFIRLA
++bcd[1];//ONLAR BASAMAĞI 1 ARTTIR
if (bcd[1] == 10)//ONLAR BASAMAĞI 10 OLDUYSA 100x10 = 1000mS= 1 SANIYE
{
bcd[1] = 0; //10LAR BASAMAĞI SIFIRLAMA
++bcd[2]; // SANIYE BIRLER BASAMAĞI
if (bcd[2] == 10)//SANIYE BIRLER BASAMAĞI 10 OLDUYSA
{
bcd[2] = 0;
++bcd[3];//SANİYE ONLAR BASAMAĞINI 1 ARTTIR
if (bcd[3] == 6)//SANIYE 10LAR BASAMAĞI 6 OLDUYSA YANI 1 DAKIKA
{
bcd[3] = 0;
++bcd[4];//DAKIKA BİRLER BASAMAĞI 1 ARTTIR
if (bcd[4] == 10)//DAKIKA BIRLER BASAMAĞI 10 OLDUYSA
{
bcd[4] = 0;
++bcd[5];//DAKIKA ONLAR BASAMAĞI 1 ARTTIR
if (bcd[5] == 6)//DAKIKA ONLAR BASAMAĞI 6 OLDUYSA YANİ 1 SAAT
{
bcd[5] = 0;
++bcd[6];//SAAT BIRLER BASAMAĞI 1 ARTTIR
if ((bcd[6] == 4) && (bcd[7] == 2)) // EĞER SAAT 24 OLDUYSA
{
bcd[6] = bcd[7] = 0;//SAATI SIFIRLA
}
else if (bcd[6] == 10)
{
bcd[6] = 0;
++bcd[7];
}
}
}
}
}
}
}
}
unsigned char _7seg[] =
{ //nGFEDCBA
0b11000000,//sıfır/0
0b11111001,//bir/1
0b10100100,//iki/2
0b10110000,//üç/3
0b10011001,//dört/4
//nGFEDCBA
0b10010010,//beş/5
0b10000010,//altı/6
0b11111000,//yedi7
0b10000000,//sekiz8
0b10010000,//dokuz9
0b00000000,//lamba TEST10
0b11111111,//lamba OF11
};
ISR(TIMER1_COMPA_vect) {
bcd_inc(bcd);
PORTB = 0B00001011;//10
PORTD = _7seg[bcd[0] ];
delay(4);//tarama ayar
PORTB = 0B00000111;//11
PORTD = _7seg[bcd[1] ];
delay(4);//tarama ayar
PORTB = 0B00001101;//9
PORTD = _7seg[bcd[2] ];
delay(4);//tarama ayar
PORTB = 0B00001110;//8
PORTD = _7seg[bcd[03] ];
delay(4);//tarama ayar
}
void setup()
{
DDRD = B11111111; //büTÜN D PORTI ÇIKIŞ
DDRB = DDRB | B00001111;//8-9-10-11 çıkış
noInterrupts();
TCCR1A = 0;
TCNT1 = 0;
OCR1A = 16000000 / (100 * 64) - 1;
TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
void loop()
{
}