rutina para teclado de 4*4

Hola alguien tiene por ahi la rutina para manejar un teclado de 4*4 , estoy programanso un pic16f877a y en asembler, agradecido de ante mano.
 
Aqui te va una muy completa y sencilla, adaptala a tu uC.


Código:
KB_Port                        ;Inicializa la puerta B para las entradas del
                               ;teclado. Programa RB0-3 como salidas y RB4-7
                               ;entradas con las resistencias de polarizacion
                               ;habilitadas.           
                BSF     STATUS,RP0      ;Selecciona P gina 1             
                MOVLW   0F0h            ;PB4-7 como entradas  
                MOVWF   TRISB           ;y PB0-3 como salidas
                BSF     OPCION,RBPU     ;Habilita R de polarizacion en entradas
                BCF     STATUS,RP0      ;Vuelve a la p gina 0.
                RETURN                  ;Retorna.
                                        
KB_Scan                                 ;Escanea el teclado
                CLRF    Tecla           ;Borra Tecla y
                INCF    Tecla,f         ;prepara Tecla para primer c¢digo.
                MOVLW   0Eh             ;Saca 0 a la primera fila
                MOVWF   PORTB           ;de la Puerta B
                NOP                     ;Nada para estabilizaci¢n de señal.  
Cheq_Col        BTFSS   PORTB,4         ;Primera columna = 0        
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
                BTFSS   PORTB,5         ;Segunda columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
                BTFSS   PORTB,6         ;Tercera columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada, incrementa tecla.
                BTFSS   PORTB,7         ;Cuarta columna = 0
                GOTO    antirebotes     ;Sale si se ha pulsado tecla.
                INCF    Tecla,f         ;Si no tecla pulsada,incrementa Tecla.
                                        
Ultima_Tecla    MOVLW   d'17'           ;Carga W con el n£mero de Teclas + 1.
                SUBWF   Tecla,w         ;y lo compara con el valor actual de Tecla.
                BTFSC   STATUS,Z        ;Si Tecla + 1 = valor actual.
                GOTO    NTeclas         ;No ha sido pulsada ninguna tecla.
                BSF     STATUS,C        ;Pone a 1 Bit C.    
                RLF     PORTB,f     ;as¡ la Fila 1 pasa a 1 con la rotaci¢n a izqda.
                GOTO    Cheq_Col                                             
                                                            
NTeclas         CLRF    Tecla           ;Coloca variable Tecla a 0
                RETURN                  ;y regresa.         
                                                            
antirebotes	;ahora se espera a que la tecla sea soltada para evitar rebotes
		;y reactivaciones de tecla
		;esta parte puede ser eliminada si para nuestro proyecto no es necesaria
      		;o es un inconveniente.

Espera1         BTFSS   PORTB,4         ;Si no se suelta la tecla FILA 1
                GOTO    Espera1         ;vuelve a esperar. 
Espera2         BTFSS   PORTB,5         ;Si no se suelta la tecla FILA 2
                GOTO    Espera2         ;vuelve a esperar.
Espera3         BTFSS   PORTB,6         ;Si no se suelta la tecla FILA 3
                GOTO    Espera3         ;vuelve a esperar.              
Espera4         BTFSS   PORTB,7         ;Si no se suelta la tecla FILA 4
                GOTO    Espera4         ;vuelve a esperar.          
                
                MOVF    Tecla,w		;pone en w el numero contenido en la variable
                CALL    T_Conv          ;llama a la tabla de conversion y retorna
                MOVWF   Tecla  		;con el valor en hexadecimal y lo pone en la variable.
                RETURN       		;vuelve al programa principal que hizo la llamada.
                 
                             
T_Conv          ADDWF   PCL,1
                RETLW   '0'             ;Tecla nº0 = 0
                RETLW   '1'             ;Tecla nº1 = 1
                RETLW   '4'             ;Tecla nº2 = 4
                RETLW   '7'             ;Tecla nº3 = 7 
                RETLW   'A'             ;Tecla nº4 = A                       
                RETLW   '2'             ;Tecla nº5 = 2 
                RETLW   '5'             ;Tecla nº6 = 5 
                RETLW   '8'             ;Tecla nº7 = 8 
                RETLW   '0'             ;Tecla nº8 = 0 
                RETLW   '3'             ;Tecla nº9 = 3 
                RETLW   '6'             ;Tecla nº10 = 6
                RETLW   '9'             ;Tecla nº11 = 9
                RETLW   'B'             ;Tecla nº12 = B
                RETLW   'F'             ;Tecla nº13 = F
                RETLW   'E'             ;Tecla nº14 = E
                RETLW   'D'             ;Tecla nº15 = D
                RETLW   'C'             ;Tecla nº16 = C

PD: ( Tecla ) ;Devuelve la tecla pulsada


Saludos
 
Hola pic-man, he intentado descargarme el archivo .zip que dices pero no se puede visualizar el codigo. Podrias decir por favor como podriamos verlo??

Ademas querria hacerte otra pregunta. Usando el PIC16F628A, tendrias el conexionado y el programa para un teclado de 4x3?

Muy agradecido. Aprovecho para mandarte un cordial saludo!
 
Atrás
Arriba