Hola, e tenido problemas para simular un teclado 4x3 en el proteus (keypad phone) pues e estado investigando en varias paginas como por ejemplo que quite la instruccion de las resistenciasv pullup internas del pic y las ponga físicamente en el proteus, pero nada, muchos dicen que la librería del ccs esta mal, pero la verdad nose, e tratado de simularlo con el pic 16f887 y 16f877A pero no da resultado, a la hora de simularlo los pines del keypad están de color gris y pues no sucede nada, quisieran que me ayuden por favor.
El problema que tienes en tu diseño, es que usas resistencias limitadoras, en vez de resistencias pull-up.
Pero con las resistencias pull-up del puerto B, debe funcionar sin problemas.
Ahora, por lo que no funciona tu programa, es porque la definición de usar el puerto B para el teclado,
se hace en la librería KBD.C, no en el código fuente, y también tienes otros problemas en el código.
Éste sería tu programa corregido...
Código:
#include <16f887.h>
#fuses NOWDT,NOMCLR,NOLVP
#use delay(internal = 8000000)
#include <lcd.c>
#include "kbd.c"
#byte OPTION_REG = getenv("SFR:OPTION_REG") // Referencia hacia el registro OPTION_REG
#bit RBPU = OPTION_REG.7 // Referencia hacia el bit 7 de OPTION_REG (RBPU)
//#define use_porb_kbd TRUE // Ésto se define en la librería kbd.c
void main()
{
char k;
int x;
RBPU = 0;
lcd_init();
kbd_init();
lcd_putc("\fPRESIONE TECLA\n");// Mensaje inicial
while(TRUE)
{
k = kbd_getc(); // faltaba agregar k =
x= k - 48; // Conversion de ASCII a decimal
if(k!=0)
{
if(k=='*') // Se debe usar 'X' no "X" para comparar los caracteres
lcd_putc("\fTecla=???");
else
printf(lcd_putc,"\fTecla=%u",x);
delay_ms(1000);
}
}
}
Cómo verás, el tema de la activación de las resistencias pull-up en el PIC16F887, se trató unos posts atrás.
Y fue lo que añadí a tu programa, con eso ya debe funcionar, pero faltaría agregar algunos parámetros.
Por ejemplo, el ajuste del oscilador interno, para que trabaje a 8MHz de forma estable.
Sólo tendrías que agregar esto a tu programa en la parte del main...
setup_oscillator(OSC_8MHz|OSC_STATE_STABLE);
En la simulación elimina las resistencias, y conecta el teclado directamente.
Al montarlo físicamente si se pueden poner resistencias limitadoras.
Espero que con los cambios agregados, funcione tu programa.
Suerte.