domingo, 26 de junio de 2011

Teclado y Porta

Este es parte del circuito para controlar los desvíos de mi maqueta, pero sirve también como un buen ejemplo para ver como conectar un teclado a un 16F628A y como utilizar las salidas del puerto A, en este caso para encender un led, pero también podemos conectarle relés o lo que se os ocurra.

También es un buen ejemplo para ver como encender y apagar un led con un solo pulsador mediante IF THEN y ELSE

Este Chip seria el esclavo para mi maqueta y con el solo controlaría el teclado y las 7 salidas para activar o desactivar los desvíos. Solo utiliza los 7 primeros dígito del teclado, los demás los utilizare para la rotonda, la estación y el desenganchador mediante Serout.

Este es el esquema:


Y este es el programa en PBP:


@ DEVICE PIC16F628A, WDT_OFF
@ DEVICE PIC16F628A, PWRT_ON
@ DEVICE PIC16F628A, BOD_ON
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F628A, LVP_OFF

include "modedefs.bas"

CMCON=7 ' Todo digital

' Salida de datos serout
salida var portb.0

'Teclado
La var portb.1
Lb var portb.2
Lc var portb.3
Ld var porta.4
Funo var portb.5
Fdos var portb.6
Ftres var portb.7

'Salidas
Duno Var porta.0
Ddos Var porta.1
Dtres var porta.2
Dcuatro var porta.3
Dcinco var portb.4
Dseis var porta.6
Dsiete var porta.7

Trisa=000000
Porta=000000

'Bits de control

Buno var bit
Bdos var bit
Btres var bit
Bcuatro var bit
Bcinco var bit
Bseis var bit
Bsiete var bit

menu:
  pause 100
  serout salida,T9600,[Buno,Bdos,Btres,Bcuatro,Bcinco,Bseis,Bsiete]

; Etiqueta para el teclado
teclado:
  low La : high lb
  high lc : high ld
  if funo = 0 then uno
  if fdos = 0 then Dos
  if ftres = 0 then tres

  high La : low lb
  high lc : high ld

  if Funo = 0 then cuatro
  if Fdos = 0 then cinco
  if Ftres = 0 then seis


  HIGH La : HIGH Lb
  LOW Lc : HIGH Ld

  if funo = 0 then siete

pause 10
goto teclado

Uno:
  if Buno = 0 then
    high Duno
    Buno = 1
    pause 100
  else
    low dDun
    Buno = 0
    pause 100
  endif
Goto menu

Dos:
  if bdos = 0 then
    high ddos
    bdos = 1
    pause 100
  else
    low ddos
    bdos = 0
    pause 100
  endif
Goto menu

Tres:
  if Btres = 0 then
     high Dtres
     Btres = 1
     pause 100
  else
    low Dtres
    Btres = 0
    pause 100
  endif
Goto menu

cuatro:
  if Bcuatro = 0 then
    high Dcuatro
    Bcuatro = 1
    pause 100
  Else
    low Dcuatro
    Bcuatro = 0
    pause 100
  endif
Goto menu

cinco:
  if Bcinco = 0 then
    high Dcinco
    Bcinco = 1
    pause 100
  Else
    low Dcinco
    Bcinco = 0
    pause 100
  endif
Goto menu

seis:
  if Bseis = 0 then
    high Dseis
    Bseis = 1
    pause 100
  Else
    low Dseis
    Bseis = 0
    pause 100
  endif
Goto menu

siete:
  if Bsiete = 0 then
    high Dsiete
    Bsiete = 1
    pause 100
  Else
    low Dsiete
    Bsiete = 0
    pause 100
  endif
Goto menu

END

No hay comentarios :

Publicar un comentario