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 <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#define LCD_DATA_PORT getenv("SFR:PORTC")
#use delay(clock= 4000000)
#define use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>
void main() {
char k;
int x;
lcd_init();
kbd_init();
port_b_pullups(TRUE);
lcd_putc("\fListo...\n");
while (TRUE) {
k=kbd_getc();
x=k-48; //Conversión numérica
if(k!=0){
if(k=='*')
lcd_putc('\f');
else
lcd_putc(k); //Imprime carácter
delay_ms(500);
printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
delay_ms(500);
printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
delay_ms(500);
printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
delay_ms(500);
lcd_putc("\fListo...\n");
}
}
}
List P=16f84A
Include <P16F84.INC>
CBLOCK 0x0C
TECLA
ENDC
ORG 0
INICIO
bsf STATUS,RP0
movlw 0xF0
movwf PORTB
clrf PORTA
bcf OPTION_REG,NOT_RBPU
bcf STATUS,RP0
PRINCIPAL
call TECLADO
movwf PORTA
goto PRINCIPAL
;subrutina teclado
;detecta si es pulsada una tecla y regresa el valor de la tecla pulsada
;*************************************************************************************************
TECLADO
clrf TECLA ;Tecla se pone en ceros
movlw b'00001110' ;se pone cero en la Fila1
movwf PORTB
COL0
btfss PORTB,4 ;Hay un 0 en la columna 0?
goto REBOTE ;si, atenuar rebote y asignar un valor a la tecla
incf TECLA,F ;no, incrementa el valor de la tecla
COL1
btfss PORTB,5 ;Hay un 0 en la columna 1?
goto REBOTE ;si, atenuar rebote y asignar un valor a la tecla
incf TECLA,F ;no, incrementa el valor de la tecla
COL2
btfss PORTB,6 ;Hay un 0 en la columna 2?
goto REBOTE ;si, atenuar rebote y asignar un valor a la tecla
incf TECLA,F ;no, incrementa el valor de la tecla
COL3
btfss PORTB,7 ;Hay un 0 en la columna 3?
goto REBOTE ;si, atenuar rebote y asignar un valor a la tecla
incf TECLA,F ;no, incrementa el valor de la tecla
ULTIMA_TECLA
rlf PORTB,F ;pone un cero a la izquierda para checar la siguiente Fila
movlw .16
subwf TECLA,W
btfsc STATUS,Z ;compara si es la ultima tecla
goto TECLADO ;no es, regresa a teclado
bsf STATUS,C ;si lo es, pone a 1 el bit C
goto COL0 ;regresa a seguir probado teclas
REBOTE
call Retardo_20ms ;espera a que se estabilize el rebote
B0 btfss PORTB,4
goto B0
B1 btfss PORTB,5
goto B1
B2 btfss PORTB,6
goto B2
B3 btfss PORTB,7
goto B3
movlw TECLA
return
include <RETARDOS.INC>
END
Quiero compartir el diseño que termine ya hace algunas noches con un teclado paralelo.
Esto es por si le puede llegar a servir a alguien.
El diseño adjunto.
El funcionamiento, descrito al principio.
Se inserta un digito y se muestra en el display, al siguiente digito, se recorre en el display.
El Flip-Flop cuenta con un push para el reset.
Los pulsos se mandan con 7408 al CLK del flip-flop.
Hola juliocesar71
El circuito que mostró Darzeck en su mensaje #8 no tiene la tecla para el 0.
Tendrías que agregar una circuiteria como se muestra en el circuito adjunto en la imagen.
Hay otro circuito con el cual puedes experimentar. Te lo adjunto
saludos
a sus ordenes
Hola juliocesar71
El circuito que mostró Darzeck en su mensaje #8 no tiene la tecla para el 0.
Tendrías que agregar una circuiteria como se muestra en el circuito adjunto en la imagen.
Hay otro circuito con el cual puedes experimentar. Te lo adjunto
saludos
a sus ordenes
Hola juliocesar71
Lo que tienes que hacer es enviar:
las 4 salidas de los INVERTER,
la salida de la compuerta OR U6-A
y la terminal del botón Reset,
al otro circuito. O al circuito actual.
Esto lo puedes hacer con compuertas de 3 estados como por ejemplo: 74LS365, 74LS241, 74LS44.
Te adjunto un ejemplo de cómo sería con el 74LS365.
saludos
a sus ordenes
Hola juliocesar71
Creo que no hiciste el circuito como te mencioné:
Lo que tienes que hacer es enviar:
A)- las 4 salidas de los INVERTER,
B)- la salida de la compuerta OR U6-A
C)- y la terminal del botón Reset,
al otro circuito. O al circuito actual.
Te faltó el punto B)- y Parte Del C)-
Si utilizas el 74LS241 requerirás cuando de menos 2 de ellos.
Uno para enviar los datos de número al primer circuito o al otro
Otro para enviar las lineas de control al primer circuito o al otro.
Te sobrarían BIT’s utilizando este 74LS241.
saludos
a sus ordenes
Hola juliocesar71
Quiere decir que no puedes trabajar con ese IC –74LS365- pues tu ISIS no trae las librerías para poder hacerlo.
Se requeriría conseguir la versión 7.8 de ISIS de Proteus para poder utilizarlo.
Pero sí puedes trabajar con el 74LS241. Cierto??
Pues hazlo como se muestra en la imagen adjunta o en el archivo comprimido que te envío.
Solo tienes que completarlo con los decodificadores y los Display’s.
saludos
a sus ordenes