calculadora

TET523-CONTROL CON MICROS INFORME N°5 BUSES DE COMUNICACIÓN/ LECTURA DE PROCESAMIENTO DE DATOS PARA PRESENTARLOS EN UN

Views 346 Downloads 9 File size 668KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

TET523-CONTROL CON MICROS

INFORME N°5 BUSES DE COMUNICACIÓN/ LECTURA DE PROCESAMIENTO DE DATOS PARA PRESENTARLOS EN UN LCD/ CALCULADORA DIGITAL

AZAÑA TOAPANTA CRISTIAN ROBERTO CAIZA TIPAN MARCO AURELIO CARDENAS QUINAPAXI ANGEL FERNANDO 29 JUNIO 2015 RESUMEN:

La presente práctica desarrolla el diseño, ensamblaje y programación de

un circuito

capaz de simular una calculadora numérica con las operaciones básicas como son suma resta multiplicación y división

donde utilizaremos el puerto c

del pic 16f870 para

conectar un teclado numérico y en el pórtico b nos servirá para conectar un lcd para mostrar resultados

ABSTRACT

Teclado Matricial con PIC This practice develops the design, assembly and programming a circuit able to of simulating a numerical calculator with basic operations such as addition subtraction multiplication and division where we use port c of pic 16F870 to connect a numeric keypad on the porch and we will por b for connecting a lcd next show results I Marco

Teórico

LCD

Un método para

conectar un teclado matricial tipo

membrana a un microcontrolador. El método que proponemos permite conectar a nuestro microcontrolador 16 teclas usando solamente 8 pines. El código debería ser válido para cualquier microcontrolador, incluso de otras marcas, aunque siempre habrá que revisarlo y posiblemente realizar algunas adaptaciones si se migra a

El LCD(Liquid Crystal Dysplay) o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un microcontrolador el cual dirige todo su funcionamiento.

otra plataforma, sin embargo, el algoritmo permanece

En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.

que haríamos para multiplexar leds o diplays de 7

igual con cualquier microcontrolador.

¿Cómo funciona un teclado matricial? El principio de funcionamiento es sencillo y es similar a lo

segmentos. El programa configura el puerto B del PIC de la siguiente forma: RB4 a RB7 funcionan como salidas y la otra mitad (RB0-RB3) como entradas. Las filas (horizontal) del teclado matricial se conectan a los bits más significativos que funcionan como salidas, mientras

TET523-CONTROL CON MICROS que las columnas (vertical) se conectan a los bits menos significativos del puerto que funcionan como entradas con resistencias pull-down. Cualquier tecla que se oprima en una columna causará que uno de los bits menos significativos del puerto (RB0 – RB3) cambie de un estado lógico bajo a un estado alto. La siguiente imagen muestra las conexiones del teclado al puerto c del microcontrolador. La imagen muestra el teclado en reposo (sin teclas oprimidas).

De esta manera el microcontrolador sabe que se ha oprimido una tecla al detectar un cambio de nivel en ¿Qué pasa cuando se oprime una tecla en un teclado matricial? la corriente puede fluir a través del switch y el voltaje de los pines conectados a las filas del teclado (5 V o nivel alto) aparece ahora también en alguno de los pines RB0 a RB3 según la columna en la que se encuentra la tecla oprimida. La siguiente imagen ilustra lo que sucede al oprimir una tecla: al oprimir el botón 6 provocamos un cambio en el PIN RB2 que ahora recibe un 1 o estado alto. Sabemos entonces que se ha pulsado un botón en la segunda columna y se muestra como un nivel lógico alto aparece en los bits menos significativos del puerto B, específicamente en RB2.

los bits menos significativos. Hasta el momento, se sabe que se ha oprimido una tecla en alguna columna (dependiendo del bit activo RB3 a RB0), sin embargo, no sabemos en cual fila. Para resolver en que fila se oprimió una tecla, hay que realizar un proceso de escaneo del teclado. En este proceso, colocaremos en secuencia un 1 lógico (estado alto) en los 4 bits más significativos del puerto y leeremos el estado de los 4 bits menos significativos. Sigamos con el ejemplo en el que se ha oprimido la tecla 6 pero ahora viéndolo gráficamente en una animación:

TET523-CONTROL CON MICROS pulsada, sino una cadena de bits que representan las teclas, es posible detectar cuando se presiona más de una tecla de forma simultánea. El código de esta función es el siguiente

El microcontrolador escanea en forma sucesiva los pines de salida, mientras lee las entradas en la parte baja del puerto, de manera que puede detectar que teclas están oprimidas en cada fila. Ahora solo falta escribir nuestro codigo en C que implemente los procedimientos mencionados anteriormente y nos devuelva un valor de la tecla oprimida, por ejemplo, mediante un número binario. Programa en C para teclado matricial El programa es bastante sencillo e implementa todos los procesos

que

describimos

en

la

teoría

vista

anteriormente. El código se ha mantenido simple intencionalmente para que se pueda apreciar el funcionamiento de la manera más obvia posible. La función keypad_read() es la encargada de realizar la mayor parte de las tareas para determinar que tecla ha sido pulsada. El valor que retorna es una palabra de 16 bits en la cual, cada uno de los bits representa una tecla, en donde un bit en estado alto representa una tecla oprimida. Como la función no retorna como tal la tecla

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

Procesa las entradas del teclado matricial y determina la tecla que esta siendo oprimida. Retorna una palabra binaria de 16 bits en la cual los bits que se encuentran en estado alto representan teclas oprimidas. * Esta función esta diseñada para poder detectar cuando se oprimen varias teclas sin embargo, debido a limitantes de la forma de conexión del teclado matricial, no se deben esperar resultados correctos al oprimir varias teclas * @return Retorna una palabra de 16 bits, cada bit representa una tecla. */ uint16_t keypad_read() { unsigned char count = 0; unsigned char bitmask = 0x10; // Valor de retorno de la funcion keypad_read() entero de 16 bits uint16_t keys =0; // Revisamos si alguna de las lineas en la parte baja esta en estado alto // debido a que se ha cerrado un switch en el teclado. if( PORTB & 0x0F ) { // Escaneamos las filas una por una para determinar la tecla oprimida do { // Apagamos todas las filas (parte alta) PORTB &= 0x0F; // Seleccionamos solo una como salida (bit del registro tris = 0) TRISB &= ~bitmask; // Y colocamos el pin en estado alto PORTB |= bitmask; // Esperamos unos cuantos milisegundos y leemos las columnas delay_ms(100); // Guardamos las columnas en una variable de 16 bits keys |= (PORTB & 0x0F); // Si ya hemos leido 4 columnas, las siguientes instrucciones no son // necesarias, por lo que salimos del ciclo if( count == 3 ) break; // Recorremos la lectura a la izquierda para hacer espacio

TET523-CONTROL CON MICROS keys = keys