Report e Pract 4
Transcript of Report e Pract 4
Actividades prácticas.
Parte 1. Verificar el funcionamiento de los programas propuestos.
Ejemplo 1.
Simulación en proteus:
Fig1. Circuito simulado en proteus.
Explique el funcionamiento del programa al oprimir cada uno de los interruptores.
Al oprimir el botón A0 se limpia la LCD mediante la instrucción lcd_putc(`\f`), se manda imprimir
a la lcd mediante printf(lcd_putc, “micro-electronik “), se hace una pausa de 2 segundos y se
vuelve a limpiar la lcd mediante lcd_putc(`\`f`) posteriormente se imprime de nuevo Presiona un
boton.
Fig2. Mensaje al oprimir el botón A0.
Al oprimir el botón A1 se limpia la lcd mediante la instrucción lcd_putc(`\f``) y mediante un ciclo
For se inicializa una variable en 17 que será la posición donde se imprimirá el mensaje a visualizar
en la lcd, mediante la instrucción lcd_gotoxy(i,1) se ira moviendo el mensaje hacia la izquierda.
Fig3. Mensaje recorriéndose de derecha a izquierda.
Al oprimir el botón A2 se borra el lcd y nuevamente se utiliza un ciclo For para ir recorriendo el
mensaje de izquierda a derecha mediante la instrucción que posiciona el cursor lcd_gotoxy(i,1) y la
que manda imprimir en pantalla que es printf(lcd_putc,”recorriendo a la derecha”).
Fig4. Recorriendo mensaje a la derecha.
Menciona cual es la manera de recorrer un texto a la derecha o izquierda.
Se puede recorrer mediante la instrucción gotoxy(i,i) que nos indica la posición del cursor en la lcd,
variando las coordenadas y las impresiones en la lcd mediante Printf(lcd_putc,” “) se puede hacer el
recorrido hacia la derecha o izquierda.
Ejemplo2.
Simulación en proteus:
Fig5. Simulación en proteus teclado matricial.
Ejemplo3:
Este progreama utiliza las librerías lcd.c y Kbd.c para poder utilizar la pantalla LCD y la matriz de
4X3. Mediante la instrucción kbd_getch( ); se obtiene el valor de la tecla que se selecciona, ese
valor se imprime en la lcd mediante la instrucción printf(lcd_putc, “tecla=%c,k);
Simulación en proteus:
Fig6. Circuito matriz-lcd.
Fig7. Despliegue de la tecla seleccionada.
Ejemplo4:
Este programa despliega en el lcd una leyenda diferente dependiendo el valor que tome la variable
K, esta variable guarda el dato del valor de la tecla seleccionada en el teclado matricial.
Simulación proteus:
Fig8. Mensajes dependiendo la tecla.
A) Utilizando el Circuito de la figura 4.3 y el elemento actuador del circuito 4.3 (relevador),
proponga un programa que inicie con el mensaje “Contraseña” y obtenga 3 dígitos de contraseña
mediante el teclado, visualizando en un LCD uno a uno de los caracteres, al obtener los tres dígitos
visualizar la contraseña y esperar un segundo para mostrar el mensaje “acceso” recorriéndolo a la
derecha y activar el relevador durante 2 segundo, el caso de ser incorrecto que aparezca “denegado”
recorriendo el texto a la derecha durante 2 segundos, al finalizar que aparezca el texto
“Contraseña”.
Código:
Para tener una contraseña fija se guardan los dígitos de esta en memoria rom como lo muestra la
línea 11 del código, se utilizaron las librerías lcd.c y kbd.c que corresponden a las funciones de la
pantalla LCd y al teclado matricial, el valor del teclado matricial se obtiene utilizando la instrucción
kbd_getch( ); que se asigna a la variable K.
Mediante la instrucción lcd_gotoxy(i,i) se imprimen los dígitos ingresados en el teclado sobre la
segunda línea del LCD. Se leen los valores de la contraseña definida en la memoria rom mediante la
instrucción read_eeprom(i); y se comparan con los datos ingresados mediante el teclado, si los datos
son iguales se despliega de izquierda a derecha la palabra acceso y se pone en alto el pin c4 que
seria el que active el relevador, de lo contrario se despliega la palabra denegado de izquierda a
derecha.
Simulación:
Fig9. Circuito teclado-LCD.
Fig10. Mensajes de acceso.
B) Se requiere un tablero digital implementado en un LCD. El sistema deberá mostrar la
puntuación de para juegos de hockey, en ambas porterías existen sensores denominado A y
B que detectan cuando se anota un gol por lo que automáticamente se marcara el puntaje y
tiene un botón para reiniciar la cuenta.
Código:
Nuevamente se utilizo la función lcd.c para
poder habilitar la pantalla LCD. Se utilizo
la instrucción printf(lcd_putc,” “); para
desplegar información en la pantalla.
Se pregunto por el botón que se apretaba y
dependiendo este se incrementaba un
contador que era el marcador y se mandaba
imprimir a la pantalla LCD.
Simulación en proteus:
Fig11. Marcador local-visitante
C) Utilizando un LCD, teclado matricial, implemente programa que realice las función como un
horno de microondas del 0 a la 9 definidas por el usuario donde la función 0 debe durar un tiempo
100seg y las opciones restantes deben ser definidas por el programador.
En el LCD se debe iniciar con la leyenda Selecciona, posteriormente al oprimir la tecla debe
aparecer cual oprimió, luego la función (por ejemplo 0 es igual descongelar) y deben de visualizar
el tiempo que lleva al llegar a cero debe aparecer finalizado y encender un led para posteriormente
volver a seleccionar, las opciones * y # deben marcar “no validas
Código:
Para este código se utilizo las librerias lcd.c y kbd.c para poder habilitar las funciones de la pantalla
LCD así como el teclado matricial, para obtener el valor de la tecla seleccionada se utilizo la
instrucción kbd_getch( );.
Para entrara a cada función del teclado se utilizo un Switch y cada caso correspondía a un digito del
teclado matricial.
Dentro de cada caso se mando imprimir la función que correspondía (descongelar, pollo, etc)
posteriormente un contador va decrementando el valor inicial y se desplegaba continuamente en la
pantalla LCD hasta que llega a cero. Al finalizar el tiempo aparece un mensaje de “finalizado” y se
manda a alto el pin C0.
Para los botones “#” y “*” se despliega en la pantalla LCD un mensaje de “no valido” por un
periodo de dos segundos.
Simulación en proteus:
Fig12. Circuito teclado-LCD.
Fig13. Selección de dígitos.
D) Utilizando un LCD, teclado matricial, implemente programa que realice las función como un
horno de microondas donde con el teclado numérico definir el tiempo de funcionamiento En el
LCD se debe iniciar con la leyenda Selecciona tiempo , posteriormente pedir el tiempo en segundo
el valor máximo debe ser 5 minutos, al iniciar deben de visualizar el tiempo que lleva al llegar a
cero debe aparecer finalizado y encender un led para posteriormente volver a seleccionar tiempo,
las opciones * y # deben marcar ser usar para iniciar la cuenta o para reiniciar y pedir el y tiempo de
nuevo.
Código:
Simulación en proteus:
Fig14. Circuito horno de microondas.
Fig15. Ingresando valores.
Cuestionario
A) Menciona los diferentes formatos para expresar un carácter en un LCD con el compilador
de C.
El formato es %nt, donde n es opcional y pude ser:
1-9: para especificar cuantos caracteres se deben especificar.
01-09: para indicar la cantidad de ceros a la izquierda.
1.1-9.9 para coma flotante.
T puede indicar:
C carácter.
S cadena o carácter.
U entero sin signo.
d entero con signo.
Lu entero largo sin signo.
Ld entero largo con signo.
X entero hexadecimal.
Lx entero largo hexadecimal.
F flotante con truncado.
G flotante con redondeo.
E flotante en formato exponencial.
W entero sin signo con decimales insertados.
B) En el caso del archivo de manejo de LCD como de teclado, ¿Que modificaciones se tienen
que realizar para utilizar un puerto diferente al B o D?
Se puede trabajar con otros puertos, por ejemplo el PortC, modificando el fichero lcd.c.
Modificando las siguientes sentencias se puede trabajar con otro puerto (A,C,etc).
#if defined use_portb_lcd
#locate lcd = getenv(“sfr: PORTB”)
#define set_tris_lcd(x) set_tris_b(x)
#else
#locate lcd = getenv(“sfr: PORTD”)
#define set_tris_lcd(x) set_tris_d(x)
#endif
C) ¿Por qué en la instrucción #rom tiene el valor 0x2100
Porque la dirección de la memoria EEPROM comienza desde la dirección 0x2100 y termina hasta
la dirección 0x21FF
D) Que modificación se tendrían que realizar para manejar el teclado en puerto B y LCD en
el puerto C
Para utilizar el puerto B es necesario eliminar el comentario de la siguiente línea el archivo LCD.C.
#define use_port_kbd TRUE
Para poder utilizar la pantalla LCD con el puerto C necesitas modificar las sentencias en el fichero
lcd.c como se indico en la pregunta del inciso b
E) Que modificación se tendrían que realizar para manejar el teclado en puerto C y LCD en
el puerto D, si se desea utilizar un pic16f887
La pantalla LCD por defecto utiliza el puerto D, para poder utilizar el teclado en el puerto C debes
modificar las siguientes sentencias en el fichero kbd.c
#if defined use_portb_lcd
#define set_tris_lcd(x) set_tris_b(x)
#else
#define set_tris_lcd(x) set_tris_d(x)
#endif
Conclusiones:
Garcia Barajas Luis Alberto.
Esta práctica es de gran ayuda ya que el uso de una pantalla LCD o un teclado matricial son
elementos que en un proyecto son de gran utilidad. La práctica nos lleva de la mano en el uso e
implementación tanto de una pantalla LCD como un teclado matricial, nos muestra cuales son sus
principales funciones y nos ayuda a comprender como es la adquisición de datos o el despliegue de
ellos. Es evidente que el uso de estos elementos es mucho más sencillo en lenguaje C que en
lenguaje ensamblador ya que te ahorras toda la programación de la inicialización en el caso de la
pantalla LCD como en la obtención de los datos en el teclado marcial.
Chávez González Gamaliel
Al manipular una LCD y un teclado matricial hemos hecho un gran avance, la simplificación al
manejar estos dispositivos es bastante útil, el controlar una compleja LCD por medio de
ensamblador es algo tardado, pero controlarla por medio de micro C, es sencillo y el teclado
matricial también, por lo cual podremos utilizar estos elementos con gran sencillez, el manipular
esto para poder elegir el puerto que necesitamos es bastante sencillo de igual forma, solo
necesitamos cambiar una línea de la librería .C.
INSTITUTO POLITÉCNICO NACIONAL
UPIITA
MICRICONTROLADORES AVANZADOS
PRACTICA 4
LCD Y TECLADO MATRICIAL
ALUMNOS:
GARCÍA BARAJAS LUIS ALBERTO.
CHÁVEZ GONZÁLEZ GAMALIEL.
GRUPO: 4MV2