top of page

Teclado Matricial con Convertidor A/D

  • Asenat Sarai Velazquez Arzola
  • 30 jun 2016
  • 2 Min. de lectura

Tradicionalmente se ha conectado un teclado de estos a un PIC usando 8 pines de éste, 4 para las filas y 4 para las columnas y se leían poniendo en alto las filas, o las columnas, y leyendo las columnas, o las filas, para detectar qué tecla se había pulsado. Esta técnica es muy fácil de implementar pero tiene el costo de usar muchos pines del PIC. Lo que aquí vamos a desarrollar es la idea de poder hacer esto mismo pero haciendo uso de un solo pin del PIC, pero que tenga la especial función de Conversor Analógico a Digital. Para ello tenemos que conseguir que al pulsar cada una de las teclas obtengamos un voltaje distinto en una única línea. Leyendo este voltaje con el Conversor AD del PIC podemos llegar a saber qué tecla es la que se ha pulsado.

R1=0, R2=470R, R3=1K, R4=2.2K, R5=220R, R6=330R, R7=470R, R8=560R y R9=1.2K

CONEXION EN PROTEUS:

NOTA: Al presionar cada tecla se debe verificar que los voltajes no coincidan para que los valores que arroje el Convertidor A/D no sean iguales.

Programacion:

include "modedefs.bas" DEFINE OSC 4 define LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTD DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTD DEFINE LCD_EBIT 1 DEFINE ADC_BITS 8 ' Define la conversión A/D a 8 Bits DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS A VAR Byte ' Declaración de una variable tipo Byte (8 bits) ADCON1 = %00000000 ' Configura el registro ADCON1 LCDOut $fe, 1

Inicio: ADCIN 0, A ' Inicia la conversión, almacena el resultado en "A" LCDOut $fe, 1, Dec A ' Muestra dato en la línea 2

PAUSE 100

GOTO INCIO

END

Cuando se presione cada tecla aparecera un valor de 0 a 255, apuntar en una tabla la tecla que es y su valor de la LCD. Para finalizar declaramos cada tecla con su respectivo valor.

Programación final:

INCLUDE "MODEDEFS.BAS"

DEFINE OSC 4

DEFINE LCD_DREG PORTB

DEFINE LCD_DBIT 4

DEFINE LCD_RSREG PORTD

DEFINE LCD_RSBIT 0

DEFINE LCD_EREG PORTD

DEFINE LCD_EBIT 1

DEFINE ADC_BITS 8 ' DEFINE LA CONVERSIÓN A/D A 8 BITS

DEFINE ADC_SAMPLEUS 50 ' TIEMPO DE MUESTREO EN EL CONVERSOR A/D ES 50 US

A VAR BYTE ' DECLARACIÓN DE UNA VARIABLE TIPO BYTE (8 BITS)

ADCON1 = %00000000 ' CONFIGURA EL REGISTRO ADCON1

LCDOUT $FE, 1

DATO VAR BYTE

INICIO:

ADCIN 0, A ' INICIA LA CONVERSIÓN, ALMACENA EL RESULTADO EN "A"

LCDOUT $FE, 1, DEC A ' MUESTRA DATO EN LA LÍNEA 2

LCDOUT $FE,$C0,DATO

PAUSE 100

IF A=183 THEN DATO="1"

IF A=143 THEN DATO="2"

IF A=115 THEN DATO="3"

IF A=200 THEN DATO="4"

IF A=153 THEN DATO="5"

IF A=121 THEN DATO="6"

IF A=216 THEN DATO="7"

IF A=162 THEN DATO="8"

IF A=126 THEN DATO="9"

IF A=137 THEN DATO="0"

IF A=174 THEN DATO="."

IF A=111 THEN DATO="="

IF A=84 THEN DATO="/"

IF A=82 THEN DATO="*"

IF A=79 THEN DATO="-"

IF A=77 THEN DATO="+"

GOTO INICIO

END

コメント


Entradas destacadas
Vuelve pronto
Una vez que se publiquen entradas, las verás aquí.
Entradas recientes
Archivo
Buscar por tags
Síguenos
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page