Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <16F887.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay(clock=4M)
#define use_portb_lcd TRUE
#include <lcd.c>
#include <kbd.c>
#use fast_io(C)
#use fast_io(E)
#byte portc = 0x07
#byte porte = 0x09
#bit BT1 = 0x09.0
int t,n,a=1,d=29;
void inicializar(void)
{
setup_adc_ports(NO_ANALOGS);
set_tris_e(0b11111111);
set_tris_c(0b00000000);
output_c(0x00);
lcd_init();
kbd_init();
}
void main(void)
{
inicio:
inicializar();
for(;;)
{
if(BT1==1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"ACTIVADO");
output_c(0x1);
do
{
t=kbd_getc();
n=t-48;
if(t!=0)
{
if(t=='*')
{
output_C(0x00);
goto inicio;
}
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Tiempo Desc: %d\r",d);
delay_ms(1000);
a++;
d--;
}
while(a<=30);
output_C(0xFF);
}
}
}
Después de realizar algunas modificaciones al programa y al diseño, ya lo tengo funcionando.el archivo lcd.c lo dejé tal cual para que trabaje por defecto en el puerto d, mientras que en el archivo kbd.c para poder trabajar por el puerto b "descomente" la siguiente linea
#define use_portb_kbd TRUE
Lo raro es que el lcd funciona, pero el teclado no.
Después de realizar algunas modificaciones al programa y al diseño, ya lo tengo funcionando.
Al parecer existe un bug con la instrucción port_b_pullups(true); al trabajar con el PIC16F887.
No activa las resistencias pull-up en el puerto B
Como no había usado esa instrucción del PCWHD Compiler con este PIC, no lo había notado.
Adjunto el proyecto con las modificaciones realizadas para activar las resistencias pull-up en el puerto B,
y trabajando con el oscilador interno a 8MHz.
Saludos.
Simple, los teclados matriciales necesitan resistencias pull-up en las líneas de entrada para trabajar.Pero??? Cuéntame, como te diste cuenta de ese problema?
El problema que tienes en tu diseño, es que usas resistencias limitadoras, en vez de resistencias pull-up.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.
#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);
}
}
}
gracias por responder, sigue sin funcionar lo mas raro de todo, los pines del lcd están de color gris, sera error de lo libreria lcd.c??
mmm no es eeror de la libreria, porque descargue un programa que aarreglaste enun anterior post y si funciona ese muy bien, no entiendo porque no funciona el mio si le agregaste las mismas cosas :s
Que raro ese programa que arreglaste en otro post lo copie y lo pegue en otro archivo nuevo que hice y ahora si no funciono, entonces el problema sera el compilador??
¿Ya hiciste eso?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.