Witam, chcę zrobić zegarek na LCD, w którym godziny i minuty ustawiane są za pomocą przycisków. Na razie zrobiłem go w wersji bez przerwań (funkcja if) i teraz chcę przerobić tak, by ustawiać je za pomocą zewnętrznych przerwań. Niestety zegarek sobie liczy a wciśnięcia przycisków są ignorowane.
Może mi ktoś napisać co ja tu robię źle? Zgóry dzięki za pomoc
Może mi ktoś napisać co ja tu robię źle? Zgóry dzięki za pomoc
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "lcd.h"
volatile uint8_t flag1=0;
volatile uint8_t flag2=0;
//----------------------------------------------------------przerwania
ISR(INT0_vect) {
flag1 = 1; //przy int0 ustaw flage1 na 1
}
ISR(INT1_vect) {
flag2 = 1; //przy int1 ustaw flage2 na 1
}
void int0_init( void )
{
MCUCR = (1<<ISC01); // enable negative edge on INT0
GICR = (1<<INT0); // enable INT0
}
void int1_init( void )
{
MCUCR = (1<<ISC11); // enable negative edge on INT0
GICR = (1<<INT1); // enable INT0
}
//------------------------------------------------------------------------
void main()
{
unsigned char s; //sekundy
s = 0;
unsigned char m; //minuty
m = 0;
unsigned char g; //godziny
g = 0;
DDRB = 0x00;
PORTB = 0xFF;
InitLCD(LS_BLINK|LS_ULINE);
LCDClear();
sei();
while (flag1 == 1)
{
m +=1;
}
while (flag2 == 1)
{
g +=1;
}
while(1)
{
_delay_ms(1000);
s = s + 1;
if (s> 59)
{
s = 0;
m = m + 1;
if (m > 59)
{
m = 0;
g = g + 1;
if (g>23)
{
g = 0;
m = 0;
s = 0;
}
}
}
LCDWriteIntXY(10,0,s,2);
LCDWriteStringXY(9,0,":");
LCDWriteIntXY(7,0,m,2);
LCDWriteStringXY(6,0,":");
LCDWriteIntXY(4,0,g,2);
LCDWriteStringXY(16,0," ");
}
}