1. Universidad de Guadalajara<br />Centro Universitario de Ciencias e Ingeniería<br />Departamento de Electrónica<br />Taller de Sistemas Digitales III<br />ET214<br />Practica #3<br />Teclado matricial<br />Objetivo:crear un programa que muestre los números del 0 al 9 por medio de un teclado matricial hacia un display de 7 segmentos<br />Aguayo Adame Gilberto<br />Codigo:399392827 <br />Carrera: cel<br />Para realizar esta pequeña aplicación utilizamos un teclado matricial de 4 x 4, es decir de cuatro filas y cuatro columnas, que nos da un total de 16 teclas, para manipular el teclado mediante el microcontrolador es necesario tener líneas de entrada y líneas de salida, en este caso las líneas de entrada están conectadas a las filas, y las líneas de salida están conectadas a las columnas. <br />Para que el teclado funcione hay que activar las columnas de manera alternada, después de activar una de las columnas hay que verificar si se ha activado alguna de las filas, el que una de las filas esté activada implica que una de las teclas ha sido presionada y si una de las teclas ha sido presionada hay que determinar qué tecla fue, la tecla presionada corresponde a la intersección de la columna activada y la fila activada, en el caso de que ninguna de las filas esté activa se asume que ninguna tecla de la columna activada fue presionada, por lo que se procede a activar una columna diferente.<br /> <br />DESCRIPCIÓN: <br />La mayoría de los teclados se leen por una técnica de exploración consistente en ir leyendo consecutivamente las filas o las columnas de éste. Hay circuitos especializados en esta tarea, pero es fácil hacer que un microcontrolador lea estos teclados matriciales (los ordenadores compatibles PC incluyen un pequeño microcontrolador que hace esta tarea y envía las teclas pulsadas a la unidad central). La disposición en matriz de los teclados responde a la necesidad de leer gran cantidad de conmutadores con pocas líneas de entrada, piénsese en que si se necesitase una línea por cada tecla del teclado de un PC, serían necesarios más de 100 líneas. El esquema muestra un esquema de un típico teclado matricial 4x4 y la conexión directa a un puerto del microcontrolador. Las resistencias de pull-up no son necesarias en el caso de que el teclado se conecte a puertos con pull-up interna (P1, P2 y P3). ”<br />Programa<br />#include <REG52.H>/*Biblioteca que contiene la declaracion de los Registros de Proposito General para el 8952 */<br />#include <stdio.h>/*Funciones I/O */<br />#include <string.h>/*Funciones de cadena*/<br />void delay_mili(int);<br />void check();<br />void deco_teclas();<br />void mem_display();<br />int set_num=1,band=0,i,selec_disp=1,rotar=0,n=0,retorna=1;<br />unsigned char Arreglo[4]={0,0,0,0};<br />unsigned char Columna[4]={0x10,0x20,0x40,0x80};<br />unsigned char Tabla1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xA2,0xB2};<br />main (void)<br />{<br />while(1)<br />{<br />mem_display();<br /> check();<br /> if (retorna==1)<br />{<br /> deco_teclas();<br /> }<br />}<br />}<br />void mem_display()<br />{<br /> P0 = Tabla1[n];<br /> delay_mili(10);<br /> <br />}<br />void check()<br />{<br /> if(rotar<4)<br /> {<br /> P3 = ~(Columna[rotar]);<br /> rotar++;<br /> retorna=1; <br /> }<br /> else<br /> {<br /> rotar=0;<br /> retorna=0;<br /> }<br />}<br />void deco_teclas()<br />{<br /> switch(P3)<br /> {<br /> case 0xB7: //Tecla 0<br /> if(set_num==1)<br /> {<br /> n = 0x00;<br /> }<br /> break;<br /> case 0x7B: //Tecla: 1<br /> if(set_num==1)<br /> {<br /> n = 0x01;<br /> }<br /> break;<br /> case 0xBB: //Tecla: 2<br /> if(set_num==1)<br /> {<br /> n = 0x02;<br /> }<br /> break;<br /> case 0xDB: //Tecla: 3<br /> if(set_num==1)<br /> {<br /> n = 0x03;<br /> }<br /> break;<br /> case 0x7D: //Tecla: 4<br /> if(set_num==1)<br /> {<br /> n = 0x04;<br /> }<br /> break;<br /> case 0xBD: //Tecla: 5<br /> if(set_num==1)<br /> {<br /> n = 0x05;<br /> }<br /> break;<br /> case 0xDD: //Tecla: 6<br /> if(set_num==1)<br /> {<br /> n = 0x06;<br /> }<br /> break;<br /> case 0x7E: //Tecla: 7<br /> if(set_num==1)<br /> {<br /> n = 0x07;<br /> }<br /> break;<br /> case 0xBE: //Tecla: 8<br /> if(set_num==1)<br /> {<br /> n = 0x08;<br /> }<br /> break;<br /> case 0xDE://Tecla: 9<br /> if(set_num==1)<br /> {<br /> n = 0x09;<br /> }<br /> break;<br /> case 0xD7://Tecla #<br /> if(set_num==1)<br /> {<br /> n = 0x09 + 1;<br /> }<br /> break;<br /> case 0x77://Tecla *<br /> if(set_num==1)<br /> {<br /> n = 0x09 + 2;<br /> }<br /> break;<br /> <br />}<br />}<br />void delay_mili(int tiempo)<br />{<br />unsigned int i,t;<br />while(tiempo)<br />{<br />for(i=1;i<=82;i++)<br />{<br />t++;<br />}<br />tiempo--;<br />}<br />}<br />