Que tal amigos he estado utilizando el pic18f4550 he implementarle una lcd alfanumerica 16x2 y una teclado matricial 4x4 con el compilador c18 de mplab; basicamnete lo que estoy haciendo es un directorio telefonico donde el usuario digita el numeros y nombres, ademas una opcion de buscar dichos contactos.
todo me sale bien menos cuando intento buscar el contacto no se que estoy haciendo mal
la funcion int buscar(void); es la que me busca (no se si la estoy haciendo mal o q)
todo me sale bien menos cuando intento buscar el contacto no se que estoy haciendo mal
la funcion int buscar(void); es la que me busca (no se si la estoy haciendo mal o q)
Código:
#include <p18f4550.h>
#include <delays.h>
#include <xlcd.h>
void DelayFor18TCY(){Delay10TCYx(2);}
void DelayPORXLCD(){Delay1KTCYx(15);}
void DelayXLCD(){Delay1KTCYx(5);}
int numero[10];
int nombre[10];
int search[10];
short long m=0, cont=0, a=0;
int interfaz(void);
int menu_inicio(void);
int buscar(void);
int teclado_musa(void){
a1:
PORTD=1;
if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;for(a=0; a<40000; a++){PORTD=1;if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;}}
switch(cont){case 1:return 1;break; case 2:return 49;break; case 3:return 50;break; case 4:return 51;break;}}
else if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;for(a=0; a<40000; a++){PORTD=1;if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;}}
switch(cont){case 1:return 2;break; case 2:return 52;break; case 3:return 53;break; case 4:return 54;break;}}
else if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;for(a=0; a<40000; a++){PORTD=1;if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;}}
switch(cont){case 1:return 3;break; case 2:return 55;break; case 3:return 56;break; case 4:return 57;break;}}
else if(PORTDbits.RD7==1){while(PORTDbits.RD7==1){} return 12;}
PORTD=2;
if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;for(a=0; a<40000; a++){PORTD=2;if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;}}
switch(cont){case 1:return 4;break; case 2:return 58;break; case 3:return 59;break; case 4:return 60;break;}}
else if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;for(a=0; a<40000; a++){PORTD=2;if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;}}
switch(cont){case 1:return 5;break; case 2:return 61;break; case 3:return 62;break; case 4:return 63;break;}}
else if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;for(a=0; a<40000; a++){PORTD=2;if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;}}
switch(cont){case 1:return 6;break; case 2:return 64;break; case 3:return 65;break; case 4:return 66;break;}}
else if(PORTDbits.RD7==1){while(PORTDbits.RD7==1){} return 13;}
PORTD=4;
if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;for(a=0; a<40000; a++){PORTD=4;if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){}cont++;}}
switch(cont){case 1:return 7;break; case 2:return 67;break; case 3:return 68;break; case 4:return 69;break;}}
else if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;for(a=0; a<40000; a++){PORTD=4;if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){}cont++;}}
switch(cont){case 1:return 8;break; case 2:return 70;break; case 3:return 71;break; case 4:return 72;break;}}
else if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;for(a=0; a<40000; a++){PORTD=4;if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){}cont++;}}
switch(cont){case 1:return 9;break; case 2:return 73;break; case 3:return 74;break; case 4:return 74;break;}}
else if(PORTDbits.RD7==1){while(PORTDbits.RD7==1){} return 14;}
PORTD=8;
if(PORTDbits.RD4==1){while(PORTDbits.RD4==1){} return 10;}
else if(PORTDbits.RD5==1){while(PORTDbits.RD5==1){} return 0;}
else if(PORTDbits.RD6==1){while(PORTDbits.RD6==1){} return 11;}
else if(PORTDbits.RD7==1){while(PORTDbits.RD7==1){} return 15;}
cont=0;
goto a1;
}
void main(){
int m=0;
/*for(m=0; m<=255; m++)
{
Write_b_eep(m,0);
Busy_eep();
Write_b_eep(255,0);
Busy_eep();
}*/
TRISD=0xF0;
TRISA=0;
ADCON1=15;
OpenXLCD(FOUR_BIT & LINES_5X7);
while(1){menu_inicio();}
}
int menu_inicio(void){
int dato=0, on, opcion;
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD(" Para comenzar ");
SetDDRamAddr(0x40);
putrsXLCD(" oprima D ");
a1:
on=teclado_musa();
if(on==15)
{
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("DIRECTORIO");
SetDDRamAddr(0x40);
putrsXLCD("Telefonico");
Delay10KTCYx(100);
WriteCmdXLCD(1);
interfaz();
}
else
WriteCmdXLCD(1);
putrsXLCD(" Dato erroneo");
SetDDRamAddr(0x40);
putrsXLCD(" Oprima D");
goto a1;
}
int interfaz(void){
int i, j;// pos0, pos1, pos2, pos3, pos4, pos5, pos6, pos7, p, h, k, block=0
int numcc, numpass, num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;
int opcion;
a1:
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("Numero:");
SetDDRamAddr(0x40);
for(i=0; i<10; i++)
{
numcc=teclado_musa();
numero[i]=numcc;
if(numcc==13)
{
SetDDRamAddr(0x40+i-1);
WriteDataXLCD(0x20);
SetDDRamAddr(0x40+i-1);
i=i-2;
}
else if(numcc!=13)
{
WriteDataXLCD(0x30+numcc);
if(i==0){num1=numcc;}
else if(i==1){num2=numcc;}
else if(i==2){num3=numcc;}
else if(i==3){num4=numcc;}
else if(i==4){num5=numcc;}
else if(i==5){num6=numcc;}
else if(i==6){num7=numcc;}
else if(i==7){num8=numcc;}
else if(i==8){num9=numcc;}
else if(i==9){num10=numcc;}
}
}
// pos0=(num1*10)+num2;
// pos1=(num3*10)+num4;
// pos2=(num5*10)+num6;
// pos3=(num7*10)+num8;
// pos4=(num9*10)+num10;
if(i == 10)
{
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("Nombre:");
SetDDRamAddr(0x40);
for(j=0; j<10; j++)
{
numpass=teclado_musa();
nombre[j]=numpass;
if(numpass==13)
{
SetDDRamAddr(0x40+j-1);
WriteDataXLCD(0x20);
SetDDRamAddr(0x40+j-1);
j=j-2;
}
else if(numpass!=13)
{
WriteDataXLCD(0x30+numpass);
if(j==0){num1=numpass;}
else if(j==1){num2=numpass;}
else if(j==2){num3=numpass;}
else if(j==3){num4=numpass;}
else if(j==4){num5=numpass;}
else if(j==5){num6=numpass;}
else if(j==6){num7=numpass;}
else if(j==7){num8=numpass;}
else if(j==8){num9=numpass;}
else if(j==9){num10=numpass;}
}
}
}
if(j == 10)
{
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("1)Buscar");
SetDDRamAddr(0x40);
putrsXLCD("2)Continuar");
Delay10KTCYx(100);
WriteCmdXLCD(1);
opcion=teclado_musa();
if(opcion==1){
buscar();}
else goto a1;
}
}
int buscar(void){
int k;// pos0, pos1, pos2, pos3, pos4, pos5, pos6, pos7, p, h, k, block=0
int busca, num11, num22, num33, num44, num55, num66, num77, num88, num99, num100;
a3:
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("Buscando...");
SetDDRamAddr(0x40);
for(k=0; k<10; k++)
{
busca=teclado_musa();
search[k]=busca;
if(busca==13)
{
SetDDRamAddr(0x40+k-1);
WriteDataXLCD(0x20);
SetDDRamAddr(0x40+k-1);
k=k-2;
}
else if(busca!=13)
{
WriteDataXLCD(0x30+busca);
if(k==0){num11=busca;}
else if(k==1){num22=busca;}
else if(k==2){num33=busca;}
else if(k==3){num44=busca;}
else if(k==4){num55=busca;}
else if(k==5){num66=busca;}
else if(k==6){num77=busca;}
else if(k==7){num88=busca;}
else if(k==8){num99=busca;}
else if(k==9){num100=busca;}
}
}
Delay10KTCYx(100);
if(k == 10){
if( search==nombre || search==numero){
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
WriteDataXLCD(0x30+nombre);
SetDDRamAddr(0x40);
WriteDataXLCD(0x30+numero);
}
else if(search!=nombre || search!=numero){
WriteCmdXLCD(1);
SetDDRamAddr(0x00);
putrsXLCD("Error");
goto a3;
}
}
}
Última edición: