#include <16F877A.h> /// libreria para el manejo del pic16f877a
//#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
//ERROR SOLUCIONADO: *pnum=1; antes de break; en case 0 ocasiona que se devuelva
//a HOLA MUNDO, hay que poner esa linea al principio de case 0
#use delay(clock=4000000) //4MHz
#byte port_a=0X05
#byte port_b=0X06
#byte port_c=0X07
#byte port_d=0X08
#byte port_e=0X09
#org 0x1F00, 0x1FFF {}//para proteger el código
#include <lcd_mod.c> // Librería para el manejo del lcd para ver las conexiones
// abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
// y ahi les muestra.
// As defined in the following structure the pin connection is as follows:
// D0 unusued
// D1 rw
// D2 rs
// D3 enable
// D5 D5
// D6 D6
// D7 D7
//
// LCD pins D0-D3 are not used and PIC D3 is not used.
//#define use_portc_lcd TRUE
int num1=0; //tiene la direccion del dato de la tecla presionada
int *pnum=&num1; //puntero que direcciona donde apunta num1
int x=0; //corre el cursor del lcd con cada numero
void data_av(){
while(port_e=4){} // Espere a que se termine de presionar la tecla
while(port_e!=4){} // Espere a que se presione una tecla
return;
}
void main(){
set_tris_a(0xFF);
set_tris_b(0x0);
set_tris_c(0xFF);
set_tris_d(0x0);
set_tris_e(0x4);
port_e=0;
port_b=0;
x=0; //inicializa posicion del cursor del lcd
lcd_init(); // Antes de usar el lcd,hay que inicializarlo
lcd_putc(" HOLA MUNDO");
delay_ms(1000);
lcd_putc("\f"); //Borra el mensaje anterior
comparar:
data_av();
switch(port_c){
case 0:{
// *pnum=1;
x++; //correr cursor
pnum++; //apunto a siguiente direccion
port_b=1; //confirmar que numero se presiona
lcd_putc("1");
*pnum=1;
break;
}
case 1:{
x++;
pnum++;
port_b=2;
lcd_putc("2");
*pnum=2;
break;
}
case 2:{
pnum++;
port_b=3;
lcd_putc("3");
*pnum=3;
break;
}
case 4:{
pnum++;
port_b=4;
lcd_putc("4");
*pnum=4;
break;
}
case 14:{ // caso ENTER
pnum = &num1;
pnum++;
if(*pnum==1){
pnum++;
if(*pnum==2){
pnum++;
if(*pnum==3){ //Si se presiono el codigo
port_b=255; //123, prenda todo el port_b
lcd_putc("\f");
lcd_putc("CORRECTO");
delay_ms(2000);
lcd_putc("\f");
port_b=0;
break;
}
else{
pnum=&num1;
}
}
else{
pnum=&num1;
}
}
else{
pnum=&num1;
}
break;
}
default:
port_b=0;
break;
}
port_e=0;
goto comparar;
} // fin de programa