Hola..tengo un código que es una tentativa de reloj pero me falta ponerlo en hora y para eso quiero usar un teclado,la cuestion es que he intentado setearle los minutos usando atoi() pero solo consigo resetearlo y no logro que imprima las teclas pulsadas como si no modificara la variable q le paso por referencia a la función Programa_hora(),aca dejo mi código
#include <16f877a.h>
#use delay(clock=4000000,XT)
#fuses PUT,NOPROTECT,NOWDT,NOLVP
#byte portb=6
#byte portd=8
#include <flex_lcd.c>
#include <stdlib.h>
#include <keypad.c>
#define SEGUNDOS_EN_UNA_HORA 3600
#define SEGUNDOS_EN_UN_MINUTO 60
unsigned char key;
unsigned char string[6];
int32 select,Conta_Segundos,MomentoActual;
int i,b,Horas,Minutos,Segundos;
void Programa_hora(int *a)
{
string=key;
*a=atoi(string);
lcd_gotoxy(1,1);
printf(lcd_putc,"%d",*a);
// Imprimimos la Tecla pulsada
}
// Interrupcion RB4 - RB7 /////////////////////////////////////////////////////
#INT_RB
void interrupt_keypad()
{
while(select<2)
{
key= read_keypad();
Programa_hora(&Minutos);
i++;
b=i;
select++;
}
Minutos=atoi(string);
Conta_Segundos=Minutos*60;
MomentoActual=Conta_Segundos;
select=0;
//clear_interrupt(INT_RB); //Limpia bandera RBIF
portb=0x00;
}
// Programa Principal /////////////////////////////////////////////////////////
void Mi_Hora()
{
Conta_Segundos++;
MomentoActual=Conta_Segundos;
Horas=MomentoActual/SEGUNDOS_EN_UNA_HORA;
MomentoActual%=SEGUNDOS_EN_UNA_HORA; //Guarda el resto de la división entera.
Minutos=MomentoActual/SEGUNDOS_EN_UN_MINUTO;
MomentoActual%=SEGUNDOS_EN_UN_MINUTO;
Segundos=MomentoActual;
MomentoActual=1;
}
void main(void)
{
init_keypad();
lcd_init();
set_tris_d(0x00);
lcd_gotoxy(1,1);
lcd_putc("Reloj Digital");
delay_ms(1500);
lcd_putc("\fHora ");
while(1)
{
lcd_gotoxy(6,1);
printf(lcd_putc,"%02d:%02d:%02d",Horas,Minutos,Segundos);
delay_ms(1000);
Mi_Hora();
}
}
Gracias