Autor Tema: pic con teclado matricial  (Leído 2040 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado orsaja

  • PIC10
  • *
  • Mensajes: 1
pic con teclado matricial
« en: 17 de Noviembre de 2004, 19:19:00 »
necesito saber como hacer una rutina ya tengo el programa que reconoce el teclado pero ahora quiero por ejemplo que al apretar la tecla con el nuemro 5 el pic mande una señal por el puerto que estoy utilizando como salida y active un optoacoplador para generar una corriente y esta haga girar un motor por 5 minutos. despues de esto se apaga el motor y espera otra tecla a pulsar por ejemplo el 3 y hace girar el motor por 3 minutos asi cualquier tecla hasta el 9
gracias

Desconectado fenix_jn

  • PIC18
  • ****
  • Mensajes: 418
RE: pic con teclado matricial
« Respuesta #1 en: 06 de Diciembre de 2004, 19:54:00 »
Ok, por lo que veo el programa es bastante sencillo, si ya puedes reconocer que tecla has presionado y sabes su valor, entonces lo que haces es crearte una rutina de tiempo base de un minuto, lo demas es incluir el valor que has obtenido del teclado y repetir esa rutina base de un minuto tantas veces el valor leido desde el teclado, por supuesto, antes de ingresar en la rutina debes elevar a un estado alto el pin, ejecutar el retardo y finalmente bajar el pin y colocar al PIC listo para otra lectura desde el teclado, la secuencia seria mas o menos asi:

a) Inicializa puertos
b) Lee Teclado
c) Si existe un valor entonces envia este valor a una variable
d) HIGH en el pin de salida
e) Comienza retardo base de 1 minuto
f) Decrementa el valor de la variable en 1
g) Si el valor de la variable es distinto de 0 entonces repite ciclo desde e)
h) LOW en el pin de salida
j) Repetir ciclo desde a)
FIN

Por supuesto esta es una vista muy general, depende del lenguaje q uses para crear el programa...

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: pic con teclado matricial
« Respuesta #2 en: 06 de Diciembre de 2004, 20:02:00 »
Bueno, si estás realizando el programa en asembler, este pedazo de codigo te ayudará mucho. Si lo realizas en C de CCS, te recomiendo que llames el driver del teclado que viene incluido. Empieza a hacer el programa y ya iremos mejorandolo.

gfp Sonrisa


;ESTA RUTINA DECODIFICA EL TECLADO DE 4X4 Y EL RESULTADO ES GUARDADO EN EL
;REGISTRO "TECLA"

CONTBYTE   EQU   0X0C
CONTADOR   EQU   0X1C
TECLA   EQU   0X2C
COLUMNA   EQU   0X3C
FILA   EQU   0X4C
CONTA1   EQU   0X4F
REG1   EQU   0X0E
REG2   EQU   0X13
CONT   EQU   0X0D
#DEFINE   BANK1   BSF STATUS,5   ;Macro para abreviar el Banco 1
#DEFINE   BANK0   BCF STATUS,5   ;Macro para abreviar el Banco 0
TECLADO   BANK1         ;Seleccion de banco1
   MOVLW   0XF0      ;W = 0XF0, PORTB 0,1,2,3 = OUT; 4,5,6,7 = IN
   MOVWF   TRISB      ;TRISB=W
   BANK0         ;Seleccion de banco0
NEW   CLRF   FILA
   MOVLW   .1
   MOVWF   COLUMNA
   MOVLW   0XFE      ;Columna 1
   MOVWF   PORTB
   MOVLW   .4
   MOVWF   CONTBYTE
SCAN   BTFSS   PORTB,4      ;Oprimieron tecla de Fila 0?
   GOTO   SUEFIL0      ;si
   INCF   FILA,1      ;no
   BTFSS   PORTB,5      ;Oprimieron tecla de Fila 1?
   GOTO   SUEFIL1      ;si
   INCF   FILA,1      ;no
   BTFSS   PORTB,6      ;Oprimieron tecla de Fila 2?
   GOTO   SUEFIL2      ;si
   INCF   FILA,1      ;no
   BTFSS   PORTB,7      ;Oprimieron tecla de Fila 3?
   GOTO   SUEFIL3      ;si
   DECFSZ   CONTBYTE,1
   GOTO   RESET
   GOTO   NEW
RESET   CLRF   FILA      ;no
   INCF   COLUMNA,1
   BSF   STATUS,0
   RLF   PORTB,1
   GOTO   SCAN
SUEFIL0   BTFSS   PORTB,4
   GOTO   SUEFIL0
   GOTO   TECLAD
SUEFIL1   BTFSS   PORTB,5
   GOTO   SUEFIL1
   GOTO   TECLAD
SUEFIL2   BTFSS   PORTB,6
   GOTO   SUEFIL2
   GOTO   TECLAD
SUEFIL3   BTFSS   PORTB,7
   GOTO   SUEFIL3
   GOTO   TECLAD
TECLAD   MOVLW   .3
   MOVWF   CONTBYTE
   MOVF   FILA,0
SUMA   ADDWF   FILA,1
   DECFSZ   CONTBYTE,1
   GOTO   SUMA
   MOVF   FILA,0
   MOVWF   TECLA
   MOVF   COLUMNA,0
   ADDWF   TECLA,1      ;Tecla decodificada!
PUERTOS   BANK1         ;Seleccion de banco1
   CLRF   TRISB      ;trisb=w
   BANK0         ;Seleccion de banco0
   RETURN


 

anything