Buen dia compañeros, estoy tratando de implementar un sistema regulador de temperatura con un pin 18f4550 y por mas que trate no pude inicializar la LCD 4x20 por el puerto D asi que lo tengo en el puerto B, tambien necesito adicionar un teclado matricial y vi en un video que se puede usar junto a la LCD en el puerto B asi que lo implemente pero al momento de correrlo en fisico si oprimo cualquier tecla dos veces me salen caracteres diferentes y a parte de esto "se digitan solos", el teclado es de membrana y esta nuevo, no se si hay que colocar resistencias pullup o pulldown, el codigop completo es bastante extenso asi que solo coloco el segmento que me causa problemas
include <18F4550.H>
#use DELAY(clock=6000000)
#define LCD_ENABLE_PIN PIN_B0 // ASIGNAMOS EL PIN "d0" COMO SALIDA PARA E
#define LCD_RS_PIN PIN_B1 // ASIGNAMOS EL PIN "d1" COMO SALIDA PARA RS
#define LCD_RW_PIN PIN_B2 // ASIGNAMOS EL PIN "d2" COMO SALIDA PARA RW
#define LCD_DATA4 PIN_B4 // ASIGNAMOS EL PIN "d3" COMO SALIDA PARA D4
#define LCD_DATA5 PIN_B5 // ASIGNAMOS EL PIN "d4" COMO SALIDA PARA D5
#define LCD_DATA6 PIN_B6 // ASIGNAMOS EL PIN "d5" COMO SALIDA PARA D6
#define LCD_DATA7 PIN_B7 // ASIGNAMOS EL PIN "d6" COMO SALIDA PARA D7
#include <lcd420.c>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD
#DEFINE USE_PORTB_KBD TRUE
#DEFINE USE_PORTB_LCD TRUE
#include <KBD4X4MOD.C> //Incluir en el encabezado el driver para
#byte porta = 0xf80 // Identificador para el puerto A.
#byte portb = 0xf81 // Identificador para el puerto B.
#byte portc = 0xf82 // Identificador para el puerto C.
#byte portd = 0xf83 // Identificador para el puerto D.
#byte porte = 0xf84 // Identificador para el puerto E.
// Variables Globales
CHAR K;
INT DIR;
//Programa Principal
VOID MAIN()
{
lcd_init(); //Inicializa el LCD
kbd_init(); //Inicializa el Teclado
//Configura las Resistencias PULL-UP del Puerto B
//port_b_pullups(0xFF); //PIC16F887
port_b_pullups(TRUE); //PIC16F877A
LCD_PUTC("\f"); //Limpia el LCD
//Ciclo infinito
WHILE(1)
{
DIR=0;
LCD_PUTC("\f");
while (DIR<20)
{
k=kbd_getc(); //Llamar la función del teclado y almacenar el
//valor digitado en una variable tipo carácter. Si
//no se oprime ninguna tecla el teclado
//retornara el carácter nulo.*/
WHILE( (k=='\0')) //si no se oprime ninguna tecla sigue llamando al teclado.
{
k=kbd_getc();
}
if( (k!='*')&&(k!='#'))
{
lcd_putc(k);
DIR++;
}
}
}
}
Muchas gracias y quedo atento a sus comentarios