Manejar teclado matricial y mostrar en lcd

Funciona como deseo, bien.

Ahora, tiene un dato retardado, que se queda en la memoria aun cuando hago el "clear" o "reset" del MR.
Debo introducir un dato de mas, para que aparezca en el display, ¿esto a que se debe?... :unsure:

Lo he probado con 2 y en el adjunto muestro con 4 displays y va de arriba hacia abajo el corrimiento.

Olvidé lo del inversor. Ya lo coloqué y funciona correctamente.
Gracias por la ayuda brindada.
 

Adjuntos

  • teclado de matriz - corrido y retenido!.JPG
    teclado de matriz - corrido y retenido!.JPG
    96.2 KB · Visitas: 99
Última edición:
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.

:D
 

Adjuntos

  • Teclado Paralelo Simulacion en Pro.JPG
    Teclado Paralelo Simulacion en Pro.JPG
    178.5 KB · Visitas: 118
Esto probando el circuito del teclado paralelo y me salieron unos problemas en mi montaje.

Los pulsos no son mandados correctamente por el AND, estoi usando un 7421.

Me imagino que ese es el problema principal, por que el teclado funciona con el 1, 4, 8, 9 y los dempas tienen un fallo.

Alguna sugerencia en lo que intento componer un poco mi circuito. :D
 
Solucioné lo de la entrada de los digitos con un pulso (monoastable) para filtrar el "ruido" y asi conseguir que la entrada de pulsos fuera fiel.

=D
 
oye diskulpa me podrias pasar tu diagrama eske yo tengo k hacer una calculadora y estoy utilizando el mismo teklado que usaste teclado de membrana y tambien tengo el decodifcador 74922 pero no logro k me funcione lo quiero a hacer en dos displays de catodo comun muchas gracias saludosss....
 
creo que mi hardware essta ok, con las pull/ups externas y todo pero no se ssi mi soft no reconoce el tecladola rutina de mi teclado es:

Código:
;**************************** Librería "TECLADO2.INC" ***********************************
;
; Librería de subrutinas para la gestión de un teclado organizado en una matriz de 4 x 4 y 
; conectado al Puerto B según la disposición siguiente:
;
;	 	  RC4  RC5  RC6  RC7
;		   ^    ^    ^    ^
;		|----|----|----|----|
;	RC0 -->	|  0 |  1 |  2 |  3 |
;		|----|----|----|----|
;	RC1 -->	|  4 |  5 |  6 |  7 |
;		|----|----|----|----|
;	RC2 -->	|  8 |  9 | 10 | 11 |
;		|----|----|----|----|
;	RC3 -->	| 12 | 13 | 14 | 15 |
;		|----|----|----|----|
;
; Los números que se han dibujado dentro de cada cuadrado son el orden de las teclas
; que no tienen por qué coincidir con lo serigrafiado sobre ellas. El paso del número de orden
; de la tecla al valor que hay serigrafiado sobre la misma se hace con una tabla de conversión.
;
; ZONA DE DATOS **********************************************************************
;
	CBLOCK
	Tecl_TeclaOrden				; Orden de la tecla a chequear.
	Caracter_Hex
	ENDC
Tecl_UltimaTecla	EQU	d'15'		; Valor de orden de la última tecla utilizada.

; Subrutina "Teclado_LeeHex" ************************************************************
;
; Cada tecla tiene asignado un número de orden que es contabilizado en la variable
; Tecl_TeclaOrden. Para convertir a su valor según el tipo de teclado en concreto se
; utiliza una tabla de conversión. 
; A continuación se expone la relación entre el número de orden de la tecla y los
; valores correspondientes para el teclado hexadecimal utilizado.
;
;	    ORDEN DE TECLA:		TECLADO HEX. UTILIZADO:
;		 0   1   2   3 			1  2  3  A
;		 4   5   6   7 			6  5  4  B
;		 8   9  10  11 			7  8  9  C
;		12  13  14  15 			E  0  F  D
;
; Así, en este ejemplo, la tecla "7" ocupa el orden 8, la tecla "F" ocupa el orden 14 y la
; tecla "9" el orden 10.

; Si cambia el teclado también hay cambiar de tabla de conversión.
;
; Entrada:	En (W) el orden de la tecla pulsada.
; Salida:	En (W) el valor hexadecimal para este teclado concreto.
;

	ORG	0x00E0

Tecl_ConvierteOrdenEnHex			; Según el teclado utilizado resulta:
	addwf	PCL,F
	DT	1h,2h,3h,0Ah		; Primera fila del teclado.
	DT	4h,5h,6h,0Bh		; Segunda fila del teclado
	DT	7h,8h,9h,0Ch		; Tercera fila del teclado.
	DT	0Eh,0h,0Fh,0Dh		; Cuarta fila del teclado.
Teclado_FinTablaHex
;;
;	ORG	0x0750
Teclado_LeeHex
	call	Teclado_LeeOrdenTecla	; Lee el Orden de la tecla pulsada.
	btfss	STATUS,C		; ¿Pulsa alguna tecla?, ¿C=1?
	goto	Tecl_FinLeeHex		; No, por tanto sale.
	call	Tecl_ConvierteOrdenEnHex	; Lo convierte en su valor real mediante tabla.
	movwf	Caracter_Hex
	call	Teclado_EsperaDejePulsar
	bsf	STATUS,C		; Vuelve a posicionar el Carry, porque la
Tecl_FinLeeHex				; instrucción "addwf PCL,F" lo pone a "0".
	return
;
;
; Esta tabla se sitúa al principio de la librería con el propósito de que no supere la
; posición 0FFh de memoria ROM de programa. De todas formas, en caso que así fuera 
; visualizaría el siguiente mensaje de error en el proceso de ensamblado:
;
;	IF (Teclado_FinTablaHex > 0xFFF)
;		ERROR	"Atención: La tabla ha superado el tamaño de la página de los"
;		MESSG	"primeros 256 bytes de memoria ROM. NO funcionará correctamente."
;	ENDIF
;;	
; Subrutina "Teclado_Inicializa" --------------------------------------------------------
;
; Esta subrutina configura las líneas del Puerto B según la conexión del teclado realizada
; y comprueba que no hay pulsada tecla alguna al principio.

Teclado_Inicializa
	bsf	STATUS,RP0		; Configura las líneas del puerto:
	movlw	b'11110000'		; <RC7:RC4> entradas, <RC3:RC0> salidas
	movwf	PORTD
	bcf	STATUS,RP0		; Acceso al banco 
	return
; Subrutina "Teclado_EsperaDejePulsar" --------------------------------------------------
;
;Permanece en esta subrutina mientras siga pulsada la tecla.
;
Teclado_Comprobacion	EQU	b'11110000'

Teclado_EsperaDejePulsar
	movlw	Teclado_Comprobacion	; Pone a cero las cuatro líneas de salida del 
	movwf	PORTD			; Puerto B.
Teclado_SigueEsperando
	call	Retardo_20ms		; Espera a que se estabilicen los niveles de tensión.
	movf	PORTD,W			; Lee el Puerto B.
	sublw	Teclado_Comprobacion	; Si es lo mismo que escribió es que ya no pulsa 
	btfss	STATUS,Z		; tecla alguna.
	goto	Teclado_SigueEsperando
	return
;
; Subrutina "Teclado_LeeOrdenTecla" -----------------------------------------------------
;
; Lee el teclado, obteniendo el orden de la tecla pulsada. 
;
; Salida:	En (W) el número de orden de la tecla pulsada. Además Carry se pone a "1" si
;		se pulsa una tecla ó a "0" si no se pulsa tecla alguna.
;
Teclado_LeeOrdenTecla:
	clrf	Tecl_TeclaOrden		; Todavía no ha empezado a chequear el teclado.
	movlw	b'11111110'		; Va a chequear primera fila.
Tecl_ChequeaFila			; (Ver esquema de conexión).
	movwf	PORTD			; Activa la fila correspondiente.
	call	Retardo_1ms		; Espera a que se estabilicen los niveles de tensión.
Tecl_Columna1
	btfss	PORTD,4			; Chequea la 1ª columna buscando un cero. 
	goto	Tecl_GuardaValor	; Sí, es cero y por tanto guarda su valor y sale.
	incf	Tecl_TeclaOrden,F	; Va a chequear la siguiente tecla.
Tecl_Columna2				; Repite proceso para las siguientes 
	btfss	PORTD,5			; columnas.
	goto	Tecl_GuardaValor
	incf	Tecl_TeclaOrden,F
Tecl_Columna3		
	btfss	PORTD,6
	goto	Tecl_GuardaValor
	incf	Tecl_TeclaOrden,F
Tecl_Columna4		
	btfss	PORTD,7
	goto	Tecl_GuardaValor
	incf	Tecl_TeclaOrden,F
;
; Comprueba si ha chequeado la última tecla, en cuyo caso sale. Para ello testea si
; el contenido del registro Tecl_TeclaOrden es igual al número de teclas del teclado.
;
Tecl_TerminaColumnas
	movlw	Tecl_UltimaTecla
	subwf	Tecl_TeclaOrden,W	; (W) = (Tecl_TeclaOrden)-Tecl_UltimaTecla.
	btfsc	STATUS,C		; ¿C=0?, ¿(W) negativo?, ¿(Tecl_TeclaOrden)<15?
	goto	Tecl_NoPulsada		; No, se ha llegado al final del chequeo.
	bsf	STATUS,C		; Sí. Va a chequear la siguiente fila.
	rlf	PORTD,W			; Apunta a la siguiente fila.
	goto	Tecl_ChequeaFila	
Tecl_NoPulsada
	bcf	STATUS,C		; Posiciona C=0, indicando que no ha pulsado
	goto	Tecl_FinTecladoLee	; tecla alguna y sale.
Tecl_GuardaValor
	movf	Tecl_TeclaOrden,W	; El orden de la tecla pulsada en (W) y sale.
	bsf	STATUS,C		; Como hay tecla tecla pulsada, pone C=1. 
Tecl_FinTecladoLee
	return

no se si deberia agregar algun otro retardo, cuando lo simulo en proteus no hay problema pero en el circuito falla y no le encuentro error

amigo una pregunta esa rutina es para .bas, pbp, asm? mi duda es esa xq necesito configurar un teclado matricial en proton y me piden guardarlo en .basic
 
oie diskulpa kamarada el diagrama que hiciste sii me puede funcionar kon un teclado matricial de membrana eske e batallado y no me funciona tambien use el decodificador 74922 para el teclado y estoy usando un deocodificador 7448 para display de 7 segementos eske a mi me encargaron hacer una calculadora y keria saber si me puede funcioanr tu diagrama para el teclado saludoss
 
oie diskulpa yo tambien tengo dudas sobre mi teclado pero el mio es de membrana y yo ya lo konecte con su respectivo decodifador 74c922 pero a la salida no me nada me podrias pasar tu diagrama para verificar donde tengo mi error yo tengo k hacer una calculadora saludoss.......
 
Que tal teban2pac.

Podría esto ayudarte de alguna manera, pero esto también depende del diseño de tu calculadora.

me puede funcionar kon un teclado matricial de membrana...

Me imagino que tu teclado de membrana es un 4x4, si es asi, el [74922] hace todo el trabajo.
Asi mismo puedes ver en el diagrama las conexiones.

usando un deocodificador 7448 para display de 7 segementos
Estas utilizando de cátodo común, no hay ningun problema.
Para tus operaciones, debes de hacer arreglos correspondientes para los corrimientos y el trabajo de las operaciones, recuerda que en los displays no puedes colocar los valores superiores al 9 [ 0-9 ]

me encargaron hacer una calculadora y keria saber si me puede funcioanr tu diagrama para el teclado...

Puede que te funcione.
La parte de los flip-flops es para retencion y corrimiento, utilizas los [74273] que son de tipo D, pero dependen de tu diseño.
 
oie diskulpa yo tambien tengo dudas sobre mi teclado pero el mio es de membrana y yo ya lo konecte con su respectivo decodifador 74c922 pero a la salida no me nada me podrias pasar tu diagrama para verificar donde tengo mi error yo tengo k hacer una calculadora saludoss.......

Ahí te mando un RAR del diagrama, espero te sirva.saludos
 

Adjuntos

  • TECLADO_4X4_ds.rar
    94.9 KB · Visitas: 56
oie perdon por haberte kontestado eske staba komprando el material y donde lo kompro se tardan en traermelo!!! diskulpa en el programa k hicste tu diagrama los ceros k stan en un rekuadro azul k signifikan es tierra???
 
oie diskulpa no me funciona el tecladoo nose donde este mi error ya lo konecte komo viene y simplemente nomas no me sale tendras una imagen de komo armaste tu tecladoo en mi teclado viene 1 y asi hasta el 8 y dice k el 1 va a row 2 k viene siendo Y2 en el pin 2 del 74922 asii lo konecte y no me salee nada =(
 
oie diskulpa no me funciona el tecladoo nose donde este mi error ya lo konecte komo viene y simplemente nomas no me sale tendras una imagen de komo armaste tu tecladoo en mi teclado viene 1 y asi hasta el 8 y dice k el 1 va a row 2 k viene siendo Y2 en el pin 2 del 74922 asii lo konecte y no me salee nada =(

las conexiones que tengo son:

Teclado-Pin 922-pin
1............................2
2............................3
3............................12
4............................4
5............................10
6............................8
7............................7
8............................1

Conecta 4 led en forma binaria a las salidas del 922 y conectale los capacitores donde te pida, recuerda que es debe ser uno muy pequeño como de .01pf y otro como de 10mf si mal no recuerdo, las salidas te deben dar de 1 hasta el 16, no es exacto, ya que los símbolos en mi caso me cuentan como números, te mando unas imagenes, algo borrosas pero espero te sirvan de algo
 

Adjuntos

  • DSC00843.rar
    281 KB · Visitas: 35
esta configuración es para el teclado sólido que puse al principio, no sé honestamente si te vaya a funcionar, revisaré las últimas conexiones que tengo y a veré en que te puedo ayudar
 
a ok!!! pero un chavo me dijo k siii funcionaba igual k un teclado normal nada mas k el tecklado membrana es mas fragil de usar me dijo k son las mismas konecxioness k el diagrama k me pasaste!!!
 
mira, estas son las conexiones restantes del 922,
pin 9-GND
pin 18-VCC
pin 13 GND

hice un pequeño video sobre como trabajan las teclas y la salida con LEDS
 

Adjuntos

  • MOV00846.rar
    313.8 KB · Visitas: 36
Atrás
Arriba