//Reloj hecho mediante interrupciones internas // SETA43 // Programa hecho por JUAN GALAZ //08/01/2012 #include <avr/io.h> #include <avr/interrupt.h> #include <LiquidCrystal.h> byte LedPin=8; byte e1Pin=7; byte e2Pin=6; byte horas,minutos,segundos; byte bandera=1; char time[15]; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(){ Serial.begin(9600); lcd.begin(16, 2); Serial.println("RELOJ"); pinMode(LedPin, OUTPUT); pinMode(e1Pin, INPUT); pinMode(e2Pin, INPUT); cli(); TCCR1A=0; TCCR1B=0; OCR1A=15624; TCCR1B |= (1<<WGM12); TCCR1B |= (1<<CS10); TCCR1B |= (1<<CS12); TIMSK1=(1<<OCIE1A); sei(); } void loop() { if(bandera) { bandera=0; digitalWrite(LedPin, !digitalRead(LedPin)); sprintf(time,"%02d:%02d:%02d",horas,minutos,segundos); Serial.println(time); lcd.setCursor(0, 1); lcd.print(time); } if(!digitalRead(e1Pin)) { minutos++; segundos=0; if(minutos==60)minutos=0; bandera=1; while(!digitalRead(e1Pin)); } if(!digitalRead(e2Pin)) { horas++; if(horas==24)horas=0; bandera=1; while(!digitalRead(e2Pin)); } if(segundos==0) { lcd.setCursor(0, 0); lcd.print("xsetaseta@gmail"); } if(segundos==15) { lcd.setCursor(0, 0); lcd.print("Reloj simple "); } if(segundos==30) { lcd.setCursor(0, 0); lcd.print("Arduino "); } } ISR(TIMER1_COMPA_vect) { bandera=1; segundos++; if(segundos>59) { segundos=0; minutos++; if(minutos>59) { minutos=0; horas++; if(horas>23) { segundos=0; minutos=0; horas=0; } } } } |