MANEJO DE TECLADO 4x4 CON PIC 16F84A--------------------------------------------------------------------------------------...
;Librería para el control de un teclado matricial 4x4 ; que fue publicado en el libro titulado:"Microcontrolador PIC16F84A...
goto TECLADO_SIGUEESPERANDOreturnTECLADO_LEEORDENTECLAclrf TECL_TECLAORDENmovlw b11111110TECL_CHEQUEAFILAmovwf PORTBTECL_C...
Esta librería posee las siguientes subrutinas:TECLADO_INICILIZA; que se encarga de configurar las líneas del puerto B para...
La conexión del teclado, display, pic se muestran en la figura, se hace uso de el integrado7448 para decodificar las salid...
include<RETARDOS.inc>include<TECLADO.inc>endAl inicio del programa se hace la configuración del puerto A, así como se habi...
CARLOS YACOELECTRONICA BASICAPrograma clase                 LIST P = PIC16F84A                 INCLUDE         "P16F84A.IN...
KB_SCAN       CLRF TECLA       INCF TECLA,F       MOVLW B00001110                      MOVWF       PORTBOTRO       NOP    ...
BTFSC PORTB,7              GOTO S4              RETURNS4   INCF TECLA     MOVLW .17              XORWF TECLA,W            ...
LIST P = PIC16F84A                              INCLUDE "P16F84A.INC"                              INCLUDE "MACRO.INC"    ...
GOTO          Espera2                ;vuelve a esperar.Espera3 BTFSS         PORTB,6                 ;Si no se suelta la t...
Upcoming SlideShare
Loading in...5
×

Manejo de teclado 4x4 con pic 16 f84a

1,096

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,096
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
137
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Manejo de teclado 4x4 con pic 16 f84a

  1. 1. MANEJO DE TECLADO 4x4 CON PIC 16F84A-------------------------------------------------------------------------------------------------------------- -----------------------------------------Un teclado matricial esta constituido por una matriz de pulsadores dispuestos en columnasy filas, cada pulsador se conecta a una fila y a una columna, el diagrama del teclado y laforma de conectar el teclado al pic se muestra en la figura:Como se ve en la figura las filas del teclado se conectan a las líneas RB0,RB1,RB2,RB3configuradas como salidas mientras que las columnas se conectan a las líneasRB4,RB5,RB6,RB7 configuradas como entradas .Para detectar si hay una tecla pulsada se aplica el siguiente procedimiento: Se hace unbarrido por cada una de las filas, inicialmente se aplica a la primera fila un nivel bajo y a lasotras tres un nivel alto si en este instante se pulsa alguna tecla de esta fila entonces el nivelbajo aparecerá en la columna en la que se encontraba la tecla, seguidamente se pasa averificar la segunda fila enviando un nivel bajo a esta y a las otras un nivel alto y asísucesivamente. Verificando los niveles de los terminales de las columnas se podrá deducirsi hay alguna tecla pulsada en la fila donde se esta aplicando el nivel bajo, considerandoque si no hay alguna tecla pulsada en las entradas del PIC RB4, RB5, RB6, RB7 seencontrara un nivel alto.Para realizar el programa en el pic debemos tener en cuenta que se deben de habilitar lasresistencias internas del pic.A continuación la librería para el control del teclado 4x4:;******************************************************************************************
  2. 2. ;Librería para el control de un teclado matricial 4x4 ; que fue publicado en el libro titulado:"Microcontrolador PIC16F84A;"del ;autor: ENRIQUE PALACIOS, FERNANDO REMIRO, LUCAS LOPEZ;TECLADO.inc;******************************************************************************************cblockTECL_TECLAORDENendcTECL_ULTIMATECLA equ d15TECLADO_LEEHEXcall TECLADO_LEEORDENTECLAbtfss STATUS,Cgoto TECL_FINLEEHEXcall TECL_CONVIERTEORDENENHEXbsf STATUS,CTECL_FINLEEHEXreturnTECL_CONVIERTEORDENENHEXaddwf PCL,FDT 1h,2h,3h,0FhDT 4h,5h,6h,0EhDT 7h,8h,9h,0DhDT 0Ah,0h,0Bh,0ChTECLADO_FINTABLEHEXif(TECLADO_FINTABLEHEX> 0xFF)ERROR "Atencion:la tabla a superado el tamño de la pagina de los "MESSG "Primeros 256bytes de memoria rom, no funconara correctamente "endifTECLADO_INICIALIZAbsf STATUS,RP0movlw b11110000movwf PORTBbcf OPTION_REG,7bcf STATUS,RP0call TECLADO_ESPERADEJEPULSARreturnTECLADO_COMPROBACION EQU b11110000TECLADO_ESPERADEJEPULSARmovlw TECLADO_COMPROBACIONmovwf PORTBTECLADO_SIGUEESPERANDOcall RETARDO_20MSmovf PORTB,Wsublw TECLADO_COMPROBACIONbtfss STATUS,Z
  3. 3. goto TECLADO_SIGUEESPERANDOreturnTECLADO_LEEORDENTECLAclrf TECL_TECLAORDENmovlw b11111110TECL_CHEQUEAFILAmovwf PORTBTECL_COMLUMNA1btfss PORTB,4goto TECL_GUARDARVALORincf TECL_TECLAORDEN,FTECL_COMLUMNA2btfss PORTB,5goto TECL_GUARDARVALORincf TECL_TECLAORDEN,FTECL_COMLUMNA3btfss PORTB,6goto TECL_GUARDARVALORincf TECL_TECLAORDEN,FTECL_COMLUMNA4btfss PORTB,7goto TECL_GUARDARVALORincf TECL_TECLAORDEN,FTECLA_TERMINARCOLUMNASmovlw TECL_ULTIMATECLAsubwf TECL_TECLAORDEN,Wbtfsc STATUS,Cgoto TECL_NOPULSADAbsf STATUS,Crlf PORTB,Wgoto TECL_CHEQUEAFILATECL_NOPULSADAbcf STATUS,Cgoto TECL_FINTECLADOLEETECL_GUARDARVALORmovf TECL_TECLAORDEN,Wbsf STATUS,CTECL_FINTECLADOLEEreturn
  4. 4. Esta librería posee las siguientes subrutinas:TECLADO_INICILIZA; que se encarga de configurar las líneas del puerto B para el usodel teclado .TECLADO_ESPERADEJEPULSAR; se mantiene en esta subrutina hasta que se deje depulsar un tecla.TECLADO_LEEORDENTECLA; Lee el teclado obteniendo en el registro W el orden de latecla pulsada.TECLADO_LEEHEX; Lee el teclado obteniendo en el registro W el valor hexadecimal dela tecla pulsadaSe debe distinguir entre el orden de una tecla con su respectivo valor; el orden hacereferencia a la posición de la tecla, este será el mismo para cualquier teclado; mientras queel valor hace referencia a la serigrafía del teclado que no es el mismo para todos.Se activara una interrupción al encontrarse una tecla presinada.APLICACION.-Desarrollar un programa en el cual se visualice en un display el valor de la tecla pulsada.Para lo cual haremos uso de las librerías : TECLADO.inc, RETARDOS.inc
  5. 5. La conexión del teclado, display, pic se muestran en la figura, se hace uso de el integrado7448 para decodificar las salidas del puerto A, el programa es el siguiente:;***************************************************************************;AUTOR:CARLOS ALBERTO YACO TINCUSI; programa que visualiza en un display de catodocomu el valor de la tecla pulsada en unteclado 4x4;fecha : 28-05-07;***************************************************************************list p=16f84ainclude<P16F84A.inc>cblock 0x0Ccontadorendcorg 0goto inicioorg 4gotointerupcioniniciobsf STATUS,RP0movlw b00000000movwf PORTAmovlw b11110000movlw PORTBbcf STATUS,RP0call TECLADO_INICIALIZAmovlw b10001000movwf INTCONprincipalsleepgoto principalinterupcioncall TECLADO_LEEHEXmovwf contadormovlw d10subwf contador,0btfsc STATUS,Cclrf contadormovfw contadormovwf PORTAcall TECLADO_ESPERADEJEPULSARbcf INTCON,0bsf INTCON,7goto principal
  6. 6. include<RETARDOS.inc>include<TECLADO.inc>endAl inicio del programa se hace la configuración del puerto A, así como se habilita lainterrupción por RBI, luego el pic se encuentra en un estado de bajo consumo (splep) hastael momento en que una tecla sea pulsada lo cual produce una interrupción entoncesllamamos a la subrutina TECLADO_LEEHEX la cual nos devuelve el valor de la teclapulsada, mostrando este valor por el PUERTO A, para después volver a habilitar lainterrupción por RBI, solo se muestran valores del 0-9 las demás teclas tales comoA,B,C,D,E,F nos dan el valor de cero.Una imagen del resultado final:La librería TECLADO.inc la pueden descargar de aquí.El programa ejemplo también lo pueden descargar de aquíEspero que les sirva de algo
  7. 7. CARLOS YACOELECTRONICA BASICAPrograma clase LIST P = PIC16F84A INCLUDE "P16F84A.INC" INCLUDE "MACRO.INC" CBLOCK 0X0C TECLA ENDCORG 0X00KB_PORT BANK1 MOVLW B11110000 MOVWF TRISB BCF OPTION_REG,NOT_RBPU BANK0 RETURN
  8. 8. KB_SCAN CLRF TECLA INCF TECLA,F MOVLW B00001110 MOVWF PORTBOTRO NOP BTFSC PORTB,4 GOTO S1 RETURNS1 INCF TECLA,F BTFSC PORTB,5 GOTO S2 RETURNS2 INCF TECLA,F BTFSC PORTB,6 GOTO S3 RETURNS3 INCF TECLA,F
  9. 9. BTFSC PORTB,7 GOTO S4 RETURNS4 INCF TECLA MOVLW .17 XORWF TECLA,W BTFSS STATUS,Z GOTO S5 MOVLW 0X80 MOVWF TECLA RETURNS5 BSF STATUS,C RLF PORTB,F GOTO OTRO
  10. 10. LIST P = PIC16F84A INCLUDE "P16F84A.INC" INCLUDE "MACRO.INC" CBLOCK 0X0C TECLA ENDCKB_Port;Inicializa la puerta B para las entradas del;teclado. Programa RB0-3 como salidas y RB4-7;entradas con las resistencias de polarización;habilitadas------------------------------------------- BSF STATUS,RP0 ;Selecciona Pagina 1 (Banco) MOVLW 0F0h ;PB4-7 como entradas MOVWF TRISB ;y PB0-3 como salidas BSF OPCION,RBPU ;Habilita R de polarización en entradas BCF STATUS,RP0 ;Vuelve a la pagina 0 (Banco) 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;comprueba si se a escaneado todo el teclado MOVLW d17 ;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_ColNTeclas 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
  11. 11. 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 = 0RETLW 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

×