Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

Joao_P

Dificuldade em acertar hora RTC

Mensagens Recomendadas

Joao_P    0
Joao_P

Boas,

Estou a usar um real time clock juntamente com um LCD e um teclado no meu projecto e funciona tudo na perfeição, defini as horas no código e ele começa a contar. O problema é que agora quero acertar a hora manualmente com o teclado e apresentar, mas não estou a conseguir. Pensei em introduzir a hora, clicar no "*" e passar para os minutos, "*" para passar para os segundos e por fim voltando a clicar no "*" para sair da função. Usar também o "#" para passar para o digito seguinte. Se alguém me desse uma ajuda no meu código ficava muito agradecido.

O código poderá estar um pouco confuso e as condições não serão certamente as melhores, toda a ajuda é bem vinda. Obrigado

PS: Muitas das variáveis estão declaradas globalmente.

int teclado(void)
{
int tecla_numero = 0;

//Primeira coluna

PORTD = 0b11101111;
_delay_ms(50);

if (!(PIND & 0b00000001))
{
//LCDWriteStringXY(1,1,"1");
tecla_numero = 1;

}

if (!(PIND & 0b00000010))
{
//LCDWriteStringXY(1,1,"4");
tecla_numero = 4;
}

if (!(PIND & 0b00000100))
{
//LCDWriteStringXY(1,1,"7");
tecla_numero = 7;
}
if (!(PIND & 0b00001000))
{
//LCDWriteStringXY(1,1,"*");
tecla_numero = 10;
}

//Segunda coluna

PORTD = 0b11011111;
_delay_ms(50);
if (!(PIND & 0b00000001))
{
//LCDWriteStringXY(1,1,"2");
tecla_numero = 2;
}

if (!(PIND & 0b00000010))
{
//LCDWriteStringXY(1,1,"5");
tecla_numero = 5;
}

if (!(PIND & 0b00000100))
{
//LCDWriteStringXY(1,1,"8");
tecla_numero = 8;
}

if (!(PIND & 0b00001000))
{
//LCDWriteStringXY(1,1,"0");
tecla_numero = 12;
}

//Terceira coluna

PORTD = 0b10111111;
_delay_ms(50);
if (!(PIND & 0b00000001))
{
//LCDWriteStringXY(1,1,"3");
tecla_numero = 3;
}

if (!(PIND & 0b00000010))
{
//LCDWriteStringXY(1,1,"6");
tecla_numero = 6;
}

if (!(PIND & 0b00000100))
{
//LCDWriteStringXY(1,1,"9");
tecla_numero = 9;
}

if (!(PIND & 0b00001000))
{
//LCDWriteStringXY(1,1,"#");
tecla_numero = 11;
}

//Quarta coluna

PORTD = 0b01111111;
_delay_ms(50);
if (!(PIND & 0b00000001))
{
cinema();
if(num_click_cinema == 1)
{
num_click_cinema = 2;
}
else
{
num_click_cinema = 1;
}
//LCDWriteStringXY(1,1,"A");
}

if (!(PIND & 0b00000010))
{
ferias();
if(num_click_ferias == 1)
{
num_click_ferias = 2;
}
else
{
num_click_ferias = 1;
}
//LCDWriteStringXY(1,1,"B");
}

if (!(PIND & 0b00000100))
{
acerta_dia();
}
if (!(PIND & 0b00001000))
{
acerta_hora();
//LCDWriteStringXY(1,1,”D”);
}

return (tecla_numero);
}

void acerta_hora(void)
{
int teste = 0, tecla_numero = 0;
LCDWriteStringXY(0,0,"Acerte a hora: ”);
LCDWriteStringXY(9,1,”	 ”);

teste = teclado();


while(!teste)
{
tecla_numero = teclado();
if(tecla_numero == 10 && relogio_click == 0)
{
relogio_click = 1;
}

if(tecla_numero == 11)
{
while(tecla_posicao <= 3)
{
tecla_posicao++;
}

tecla_posicao = 0;
}

if(tecla_numero == 12)
{
horas = 0;
minutos = 0;
segundos = 0;
}

if(tecla_numero == 1)
{
horas = 1;
minutos = 1;
segundos = 1;
}

if(tecla_numero == 2)
{
horas = 2;
minutos = 2;
segundos = 2;
}

if(tecla_numero == 3)
{
horas = 3;
minutos = 3;
segundos = 3;
}

if(tecla_numero == 4)
{
horas = 4;
minutos = 4;
segundos = 4;
}

if(tecla_numero == 5)
{
horas = 5;
minutos = 5;
segundos = 5;
}

if(tecla_numero == 6)
{
horas = 6;
minutos = 6;
segundos = 6;
}

if(tecla_numero == 7)
{
horas = 7;
minutos = 7;
segundos = 7;
}

if(tecla_numero == 8)
{
horas = 8;
minutos = 8;
segundos = 8;
}

if(tecla_numero == 9)
{
horas = 9;
minutos = 9;
segundos = 9;
}

if(tecla_numero == 10 && relogio_click == 1)
{
if(tecla_posicao == 2)
{
digito = teclado();

variavel_minuto = minutos*10 + digito;
ds1307_minute_write(variavel_minuto);
minutos = convert_bcd_to_decimal(minutos);
LCDWriteIntXY(3,1,minutos,1);
LCDWriteIntXY(4,1,digito,1);
LCDWriteStringXY(5,1,”:”);
}
else
{
variavel_minuto = minutos;
ds1307_minute_write(variavel_minuto);
minuto = ds1307_read_minute();
minuto = convert_bcd_to_decimal(minuto);
LCDWriteIntXY(3,1,minuto,2);
LCDWriteStringXY(5,1,”:”);
}
relogio_click = 2;
}

else if (tecla_numero == 10 && relogio_click == 2)
{
if(tecla_posicao == 3)
{
digito = teclado();

variavel_segundo = segundos*10 + digito;
ds1307_second_write(variavel_segundo);
segundos = convert_bcd_to_decimal(segundos);		 // Aqui os “segundos” em vez de “segundo” é propositado
LCDWriteIntXY(6,1,segundos,1);
LCDWriteIntXY(7,1,digito,1);
LCDWriteStringXY(8,1,” ”);
}
else
{
variavel_segundo = segundos;
ds1307_second_write(variavel_segundo);
segundo = ds1307_read_second();
segundo = convert_bcd_to_decimal(segundo);
LCDWriteIntXY(6,1,segundo,2);
LCDWriteStringXY(8,1,” ”);
}

relogio_click = 3;
}

else
{
if(tecla_posicao == 1)
{
digito = teclado();

variavel_hora = horas*10 + digito;
ds1307_hour_write(variavel_hora,0,0);
horas = convert_bcd_to_decimal((horas & 0x3f));

LCDWriteIntXY(0,1,horas,1);
LCDWriteIntXY(1,1,digito,1);
LCDWriteStringXY(2,1,”:”);
}
else
{
variavel_hora = horas;
ds1307_hour_write(variavel_hora,0,0);
hora = ds1307_read_hour();
hora = convert_bcd_to_decimal((hora & 0x3f));
LCDWriteIntXY(0,1,hora,2);
LCDWriteStringXY(2,1,”:”);
}
}

if(relogio_click == 3)
{
return;
}	
}
}

Editado por apocsantos
geshi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.