no puedo trabajar las dos cosas juntas si la LCD no tiene problemas, me funciona bien pero es el teclado el que me esta dando problemas..
#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portb_lcd TRUE //definir salida del puerto B para la lcd
#include<lcd.c> //libreria manejo lcd
#use standard_io(D)
///PROGRAMA
void main(void)
{
int j;
lcd_init(); //inicializa lcd
While(TRUE){
SET_TRIS_D( 0xF1 );
delay_ms(60);
SET_TRIS_D( 0xF2 );
delay_ms(60);
SET_TRIS_D( 0xF4 );
delay_ms(60);
SET_TRIS_D( 0xF8 );
delay_ms(60);
if(input(PIN_D4)){ //¿se ha pulsado el boton?
j=1;}
if(input(PIN_D5)){ //¿se ha pulsado el boton?
j=2;}
if(input(PIN_D6)){ //¿se ha pulsado el boton?
j=3;}
if(input(PIN_D7)){ //¿se ha pulsado el boton?
j=4;}
printf(lcd_putc,"tecla:%i",j ); //...presentacion
lcd_gotoxy(1,1);
}
}#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portb_lcd TRUE //definir salida del puerto B para la lcd
#include<lcd.c> //libreria manejo lcd
#use standard_io(D)
///PROGRAMA
void main(void)
{
int i,j,filas;
char Keypad[4][4] = { {'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'E','0','F','D'} };
lcd_init(); //inicializa lcd
filas=0xF1;
output_d(filas );
While(TRUE){
for(i=0;i<5;i++){
rotate_left(&Filas,1);
output_d(Filas); //Trasladamos el 0 a siguiente Pin.
if(!input(PIN_D4)){ //¿se ha pulsado el boton?
j=1;}
if(!input(PIN_D5)){ //¿se ha pulsado el boton?
j=2;}
if(!input(PIN_D6)){ //¿se ha pulsado el boton?
j=3;}
if(!input(PIN_D7)){ //¿se ha pulsado el boton?
j=4;}
if(i==5){i=0;}
}
printf(lcd_putc,"tecla:%c",Keypad[j][i] ); //...presentacion
lcd_gotoxy(1,1);
}
} #include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portb_lcd TRUE //definir salida del puerto B para la lcd
#include<lcd.c> //libreria manejo lcd
#use standard_io(D)
int i,j,x;
char Teclas[4][4]={{'1','2','3','A'}
{'4','5','6','B'}
{'7','8','9','C'}
{'D','0','E','F'}};
void main(){
lcd_init(); //inicializa lcd
while(TRUE){
i++;
switch( i )
{
case 1:
output_high(PIN_D4);
output_high(PIN_D5);
output_high(PIN_D6);
output_low(PIN_D7);
break;
case 2:
output_high(PIN_D4);
output_high(PIN_D5);
output_low(PIN_D6);
output_high(PIN_D7);
break;
case 3:
output_high(PIN_D4);
output_low(PIN_D5);
output_high(PIN_D6);
output_high(PIN_D7);
break;
case 4:
output_low(PIN_D4);
output_high(PIN_D5);
output_high(PIN_D6);
output_high(PIN_D7);
break;
case 5:
break;
default:
}
if(i==5){i=0;}
if(!input(PIN_D0)){j=0;x=i;}
if(!input(PIN_D1)){j=1;x=i;}
if(!input(PIN_D2)){j=2;x=i;}
if(!input(PIN_D3)){j=3;x=i;}
printf(lcd_putc,"tecla:%c",Teclas[j][x]); //...presentacion
lcd_gotoxy(1,1);
}}
char leer_teclado(void)
{
while(1)
{
PORTB = 0b0001<<4;
if(columna1){ while(columna1); return '1';}
if(columna2){ while(columna2); return '2';}
if(columna3){ while(columna3); return '3';}
if(columna4){ while(columna4); return 'A';}
PORTB = 0b0010<<4;
if(columna1){ while(columna1); return '4';}
if(columna2){ while(columna2); return '5';}
if(columna3){ while(columna3); return '6';}
if(columna4){ while(columna4); return 'B';}
PORTB = 0b0100<<4;
if(columna1){ while(columna1); return '7';}
if(columna2){ while(columna2); return '8';}
if(columna3){ while(columna3); return '9';}
if(columna4){ while(columna4); return 'C';}
PORTB = 0b1000<<4;
if(columna1){ while(columna1); return '*';}
if(columna2){ while(columna2); return '0';}
if(columna3){ while(columna3); return '#';}
if(columna4){ while(columna4); return 'D';}
}
return 0;
}
#include <16F877a.h>
#device adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000) //Fosc=20Mhz
#define use_portd_lcd TRUE //definir salida del puerto D para la lcd
#include<lcd420.c> //libreria manejo lcd
#include <keypad.c> //Libreria de teclado 4x4
#include <stdlib.h>
unsigned char key; //Variable global tecla
char variable;
int i;
// Interrupcion RB4 - RB7 /////////////////////////////////////////////////////
#INT_RB
void interrupt_keypad()
{
key=read_keypad(); //Asigna la tecla pulsada
clear_interrupt(INT_RB); //Limpia bandera RBIF
}
// Programa Principal /////////////////////////////////////////////////////////
void main()
{
lcd_init();
while(true)
{
init_keypad();
variable=key;
if(variable>=48){
i=variable-48;}
printf(lcd_putc,"Escriba:%i",i);
lcd_gotoxy(1,1);
}}