Muy wenas, les agradesco a todos los que aportan sus ideas y resuelven dudas. Este es el primer tema que creo ya que me encuentro con una serie de problemas y por mas que le doy vueltas no me encuentro con la solucion. Espero que alguno de ustedes tenga una idea mejor que la mia.
Estoy trabajando con CCCompiler y como simulador el proteus y trabajando con el pic16f877.
El programa es que tengo 3 display's (de catodo comun) con los que trabajo por el puerto C y un teclado 3x4. Por el puerto A multiplexo los 3 display's que van a mostrar lo que pulse en cada tecla. Lo que hago en el programa es ir desplazando las unidades, decenas y centenas; Aqui es donde viene el problema: Cuando tengo ya los 3 digitos pulso la tecla # para almacenarlos en la EEprom los numeros que tengo en centenas y decenas estan correctos al mirarlos en la eeprom, pero en las unidades me almacena la # y no logro que me guarde los 3 digitos despues de pulsarla. Esto es lo que llevo hecho hasta ahora:
#include <16f877.h>
#use delay(clock=4000000)//Trabajo a 4MHz
#Fuses XT, NOWDT
#include <kbd.c>//Libreria del teclado
#byte PORTA=0x05//El puerto a que se encargue del multiplexado
#byte PORTC=0x07//Para el display
#byte PORTD=0X08//Para el teclado
char k;//Variable que almacena la tecla pulsada
int uds=10,dec=10,cen=10,i=0;
byte const display[11]= {0x3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X67, 0x40 };//Array que contiene los numeros que voy a mostrar en mi display
//Funcion de multiplexado
multiplexado(int uds,int dec, int cen){
output_a(0b11111110);//Habilito el display de las unidades
portc=display[uds];//muestro el valor de mi display
delay_ms(1);
output_a(0b11111101);//Habilito el display de las decenas
portc=display[dec];
delay_ms(1);
output_a(0b11111011);//Habilito el display de las centenas
portc=display[cen];
delay_ms(1);}
void main(void)
{
set_tris_a(0b00000000);//Puerto a como salida
set_tris_c(0b00000000);//Puerto c como salida
set_tris_d(0b11100000);//Los 4 bits de menor peso como entrada para el teclado
while(1)
{
do{
k=kbd_getc();//Almaceno en k la tecla pulsada
if(k!=0){//Si detecta que ha pulsado tecla
cen=dec;
dec=uds;
uds=k-48;}
multiplexado(uds,dec,cen);}
while(k!=35);//Hasta que la tecla de guardar se pulse
write_eeprom(0,uds);
write_eeprom(1,dec);
write_eeprom(2,cen);
}
}