0% encontró este documento útil (0 votos)
6 vistas8 páginas

Código MPLAB para Teclado Matricial

Este documento describe un programa para un microcontrolador PIC16F628A que lee las teclas de un teclado matricial 3x4 y despliega los números presionados en un display de 7 segmentos. Incluye rutinas para escanear el teclado, decodificar las teclas presionadas y mostrar los números, así como una condición para verificar la secuencia correcta de números.

Cargado por

Axl Vejarano
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas8 páginas

Código MPLAB para Teclado Matricial

Este documento describe un programa para un microcontrolador PIC16F628A que lee las teclas de un teclado matricial 3x4 y despliega los números presionados en un display de 7 segmentos. Incluye rutinas para escanear el teclado, decodificar las teclas presionadas y mostrar los números, así como una condición para verificar la secuencia correcta de números.

Cargado por

Axl Vejarano
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

VEJARANO CERNA AXL JAIME JAVIER

Código MPLAB

list p=16f628a

include [Link]

cblock 0x20

NUM

TECLA

CODIGO

VALOR1

VALOR2

VALOR3

VALOR4

endc

CUENTA EQU 20H

NUM.1 equ b'11101100';b'11011000' ; 7

NUM.2 equ b'10000000';b'00000000' ; 8

NUM.3 equ b'10001000';b'00010000' ; 9

NUM.4 equ b'10001100';b'00011001' ; 4

NUM.5 equ b'10001001';b'00010010' ; 5

NUM.6 equ b'10000001';b'00000010' ; 6

NUM.7 equ b'11101100';b'11011001' ; 1

NUM.8 equ b'10100010';b'01000100' ; 2

NUM.9 equ b'10101000';b'01010000' ; 3

LET.A equ b'10000100' ;b'00001000' ; *


NUM.0 equ b'11000000';b'10000000' ; 0

LET.b equ b'10000001';b'00000011' ; #

org 0x00

goto INICIO

org 0x04

GOTO INTERRUP

INICIO

movlw 0x07 ; Deshabilitar comparadores

bsf STATUS,RP0 ; Cambio a banco 1

clrf TRISA ; Puerto A como salida

BSF TRISA,5

movlw b'11100001' ; Nibble alto del puerto B com

movwf TRISB ; entrada y bajo como salida

bcf OPTION_REG,NOT_RBPU ; Resistencias de pull-up

; habilitadas

bcf STATUS,RP0 ; Cambio a banco 0

;CONFIGURAR INTERRUP

BSF INTCON,GIE
BSF INTCON,INTE ; [Link]. RB0

BSF STATUS,RP0

BCF OPTION_REG,INTEDG; BAJADA

BCF STATUS,RP0

CLRF CUENTA

PRINCIPAL

call TECLADO ; Llamar a rutina de teclado

movwf VALOR1 ; Desplegar numero en puerto A

call TECLADO

movwf VALOR2

call TECLADO

movwf VALOR3

call TECLADO

movwf VALOR4

;csi

COND1 movlw NUM.2

subwf VALOR1,0

btfsc STATUS,Z

goto COND2

goto INCORRECTO

COND2 movlw NUM.9

subwf VALOR2,0

btfsc STATUS,Z

goto COND3

goto INCORRECTO
COND3 movlw NUM.9

subwf VALOR3,0

btfsc STATUS,Z

goto COND4

goto INCORRECTO

COND4 movlw NUM.2

subwf VALOR4,0

btfsc STATUS,Z

goto CORRECTO

goto INCORRECTO

INCORRECTO

btfsc PORTB,0

goto $-1

bsf PORTA,6

;bcf PORTA,4

goto PRINCIPAL

CORRECTO

btfsc PORTB,0

goto $-1

bcf PORTA,6

;bsf PORTA,4

CLRF PORTA

CLRF CUENTA

BSF INTCON,GIE
BSF INTCON,INTE

goto PRINCIPAL

;RUT_RESET

; CLRF PORTA

; CLRF CUENTA

; BSF INTCON,GIE

; BSF INTCON,INTE

INTERRUP

BCF INTCON,1; bajar flag de interrupción

INCF CUENTA,1

MOVLW B'00001111'

ANDWF CUENTA

MOVF CUENTA,0

MOVWF PORTA

bsf PORTA,6

; CUENTA = 0000 0011

SUBLW D'3'

BTFSS STATUS,Z

RETFIE

BSF PORTA,7

BCF INTCON,GIE

BCF INTCON,INTE

RETFIE
;**

;* Rutina que escanea un teclado matricial 3x4 *

;* recorriendo un 0 por cada una de sus filas y *

;* leyendo el estado de cada columna, si la co- *

;* lumna se encuentra con un estado logico alto *

;* no se presiono ninguna tecla, si se encuen- *

;* tra en bajo (0) entonces se detecta la tecla *

;* presionda *

;**

TECLADO

clrf TECLA ; Limpiar variable TECLA

movlw b'00001101' ; Poner un cero en la primer

movwf PORTB ; fila del puerto B (RB0)

CHECA_COL

btfss PORTB,5 ; Si la 1er columna es "0"

goto ANTIRREBOTES ; salta a la rutina ANTIRREBOTES

incf TECLA,f ; Si es "1" incrementa TECLA

btfss PORTB,6 ; Si la 2da columna es "0"

goto ANTIRREBOTES ; salta a la rutina ANTIRREBOTES

incf TECLA,f ; Si es "1" incrementa TECLA

btfss PORTB,7 ; Si la 3er columna es "0"

goto ANTIRREBOTES ; salta a la rutina ANTIRREBOTES

incf TECLA,f ; Si es "1" incrementa TECLA

; Si no se detecto ninguna pulsacion se realiza una comparacion

; entre la variable TECLA y el numero "12", si TECLA es menor que


; 12 el "0" en las filas del puerto B se recorre hacia la izquierda

; hacia la siguiente fila, si TECLA es igual a "12" la rutina del

; TECLADO vuelve a comenzar

movlw d'12'

subwf TECLA,w

btfsc STATUS,Z

goto TECLADO

bsf STATUS,C

rlf PORTB,f

goto CHECA_COL

;***

;* Rutina que elimina los rebotes y ademas decodifica *

;* la tecla pulsada y regresa el valor binario necesa- *

;* para desplegar los numeros de 0 a b en un display *

;* de 7 segmentos conectado al puerto A *

;***

ANTIRREBOTES

B1 btfss PORTB,5

goto B1

B2 btfss PORTB,6

goto B2

B3 btfss PORTB,7

goto B3

movf TECLA,w

call DECOD_TECLA

return
DECOD_TECLA

addwf PCL,f

retlw NUM.1

retlw NUM.2

retlw NUM.3

retlw NUM.4

retlw NUM.5

retlw NUM.6

retlw NUM.7

retlw NUM.8

retlw NUM.9

retlw LET.A

retlw NUM.0

retlw LET.b

end

También podría gustarte