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
コメント