Sunteți pe pagina 1din 13

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

1. INTRODUCCIN
A continuacin se desarrolla la prctica de teclado matricial 4x4 en la que por medio microcontrolador se desplegara en el LCD el nmero correspondiente del botn que se presiono, para comenzar necesitamos conocer teora de los elementos de la prctica y en especfico del teclado matricial. 1.1. LDC (Liquid Crystal Display) de 16x2 Una pantalla de cristal lquido o LCD (acrnimo del ingls Liquid Crystal Display) es una pantalla delgada y plana formada por un nmero de pxeles en color o monocromos colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrnicos de pilas, ya que utiliza cantidades muy pequeas de energa elctrica.

A D 501 N
D C B D C A B

A G F

1 6
LE D LE D+ DB 7 DB 6 DB 5 D B 4 DB 3 DB 2 DB 1 DB 0 E R/ W R S V EE VC C V SS

Figura1. Estructura de un Display de Cristal Lquido alfanumrico.

Caractersticas Cada pxel de un LCD tpicamente consiste de una capa de molculas alineadas entre dos electrodos transparentes, y dos filtros de polarizacin, los ejes de transmisin de cada uno que estn (en la mayora de los casos) perpendiculares entre s. Sin cristal lquido entre el filtro polarizante, la luz que pasa por el primer filtro sera bloqueada por el segundo (cruzando) polarizador.

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

La superficie de los electrodos que estn en contacto con los materiales de cristal lquido es tratada a fin de ajustar las molculas de cristal lquido en una direccin en particular. Este tratamiento suele ser normalmente aplicable consiste en una fina capa de polmero que es unidireccionalmente frotada utilizando, por ejemplo, un pao. La direccin de la alineacin de cristal lquido se define por la direccin de frotacin. Antes de la aplicacin de un campo elctrico, la orientacin de las molculas de cristal lquido est determinada por la adaptacin a las superficies. En un dispositivo twisted nematic, TN (uno de los dispositivos ms comunes entre los de cristal lquido), las direcciones de alineacin de la superficie de los dos electrodos son perpendiculares entre s, y as se organizan las molculas en una estructura helicoidal, o retorcida. Debido a que el material es de cristal lquido birefringent, la luz que pasa a travs de un filtro polarizante se gira por la hlice de cristal lquido que pasa a travs de la capa de cristal lquido, lo que le permite pasar por el segundo filtro polarizado. La mitad de la luz incidente es absorbida por el primer filtro polarizante, pero por lo dems todo el montaje es transparente. Cuando se aplica un voltaje a travs de los electrodos, una fuerza de giro orienta las molculas de cristal lquido paralelas al campo elctrico, que distorsiona la estructura helicoidal (esto se puede resistir gracias a las fuerzas elsticas desde que las molculas estn limitadas a las superficies). Esto reduce la rotacin de la polarizacin de la luz incidente, y el dispositivo aparece gris. Si la tensin aplicada es lo suficientemente grande, las molculas de cristal lquido en el centro de la capa son casi completamente desenrolladas y la polarizacin de la luz incidente no es rotada ya que pasa a travs de la capa de cristal lquido. Esta luz ser principalmente polarizada perpendicular al segundo filtro, y por eso ser bloqueada y el pixel aparecer negro. Por el control de la tensin aplicada a travs de la capa de cristal lquido en cada pxel, la luz se puede permitir pasar a travs de distintas cantidades, constituyndose los diferentes tonos de gris.

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

2. OBJETIVOS
o Realizar un programa que sea capaz de mostrar en un LCD el nmero presionado de

un teclado matricial o Adquirir nuevos conocimientos sobre la programacin del microcontrolador MC68HC908QB8

3. MATERIAL
En esta prctica que se realizo se utilizaron los siguientes dispositivos Un protoboard Un LCD de 16x2
1 Potencimetro de 10k

Un teclado matricial Un microcontrolador MC68HC908QB8 Una fuente de alimentacin de 5 Volt Cable de conexin

4. DESARROLLO
A continuacin se explicaran las condiciones de programacin que son requeridas de la prctica, tambin veremos el diagrama de conexiones de la practica y la explicacin del programa que meteremos al microcontrolador. 4.1 EXPLIACIN DE LA PRCTICA La prctica consiste en desarrollar un programa que haga la funcin de desplegar en un LCD de 16x2 el nmero del botn presionado en el teclado matricial 4x4 mantenerlo un
JOS ARMANDO LARA GONZALEZ 3

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

determinado tiempo encendido y despus se debe de apagar, si ya no se presiona ningn otro botn. Condiciones para el desarrollo del programa de la prctica: 1. EL LCD inicia apagado. 2.- Al presionar botones aparecer el cdigo del botn en el LCD de 16x2. 3.- El LCD presentar el mensaje (LARA) (apellido paterno del programador) en su primera lnea y en la segunda el nmero correspondiente al botn presionado en un determinado tiempo la informacin y despus se apagara. Antes de realizar el programa vamos a conocer el esquema de las conexiones de los circuitos.

4.2. DIAGRAMA DE LA PRCTICA. Figura. Diagrama electrnico que muestra la forma de hacer las conexiones para que funcione de manera adecuada el programa. Como se puede observar

+5V 1 4.7k 5 4.7k 9 4.7k A2 13 4.7k 14 15 16 A3 10 11 12 6 7 8 A1 2 3 4 A0 VCC B0 B1 B2 B3 D4 D5 E E D6 D7 RS

+5V

VCC
5V

MC68HC908QB8

AND501
B D 5V C A B

Vo

10k

A G

GND

B7 B6

GND

Figura 4. Esquema de conexiones de la prctica.

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

4.3. EXPLICACIN DEL PROGRAMA En las primeras dos lneas son para habilitar las instrucciones de la macro y para la declaracin de funciones. #include <hidef.h> #include "derivative.h" A continuacin se declaran las funciones y variables que se utilizan en el programa void tec_matrix(void);//Funcin que captura el nmero del botn presionado void ret (int basta);//Funcin de retardo void lcd_coman(char coma);//Funcin para mandar comandos del LCD al micro. void lcd_dato(char dat);//Funcin que despliega un carcter en el LCD void lcd_mens(char men[]);//Funcin que despliega una cadena de caracteres void lcd_char(char var);//Funcin para desplegar nmeros void prog_lcd(void);//Funcin para programar el LCD A continuacin se muestran todas las variables del programa int tec=0,pa,dest=199,des=0,i,dec=0,uni=0,condicion;//Variables const char comandos[6]={0x33,0x22,0x28,0x0C,0x06,0x01};//Variable en forma vector void main(void) {//Inicio del main del programa

CONFIG1_COPD=1; //Deshabilitamos el perro guardin afectando el archive config1. OSCSC=0X20; //Modificamos la velocidad del oscilador interno para que trabaje a la mayor velocidad. DDRB=0XCF; //Declaramos como salida todos los pines del Puerto excepto 5 y 6. prog_lcd();//Se llama la funcin para programar el LCD for(;;) {//Inicio del ciclo infinito del programa principal lcd_coman(0x84);//Funcin que posiciona el cursor en la linea 1 posicin 4 del LCD lcd_mens("PRACTICA 4 $"); //Funcin que despliega el mensaje PRACTICA 4

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

tec_matrix();();//Mandamos llamar la funcin para leer el teclado y dejar en la variable tec el nmero correspondiente al botn o un cero en caso de que no se haya presionado ninguno.

if(tec!=0){ //Preguntamos si tec es diferente de 0, es decir, si se presiono algn botn. des=tec; //guardamos el valor de tec en la variable des. dest=0; //iniciamos contador que usaremos para desplegar el numero del botn correspondiente durante un tiempo determinado si es que no se presiona otro botn. } else{//este else comienza a funcionar si es que no presionamos ningn botn, es decir tec=0. dest++;//Aumenta en 1el contador } if(dest<200){ //con esta condicin vamos a desplegar mientras el contador sea menor que 200. if(des<=9){//Condicin, establece que si des menor o igual a 9, realiza las instrucciones que estn dentro de esta. lcd_coman(0xC6);//Funcin que coloca el cursor en la posicin 6 de la primera lnea lcd_char(des);//Funcin que despliega el valor de des en el LCD que es un valor menor de 10 lcd_coman(0xC7);//Posiciona el cursor en la posicin 7 de la segunda lnea lcd_dato(' ');//Despliega un espacio en blanco en la posicin ubicada. Que es para borrar el digito de decena, una vez presionado el de la decena y si se presiona un nmero menor que 10 borra l numero de decena para que se vea el digito menor que 10. } else{//Si el nmero no cumple la condicin realiza las instrucciones siguientes. lcd_coman(0xC6);//Posiciona el cursor en el espacio 6 de segunda lnea

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

lcd_char(des);//Como no cumpli la condicin despliega el nmero del cdigo des que es un nmero mayor o igual a 10 dependiendo de la tecla presionada }

} else {//Si no cumple la condicin de dest < 200 realiza las instrucciones siguientes lcd_coman(0xC6); lcd_dato(' '); //Borra el numero de las unidades para un valor menor a 10 o el digito de decena para el mayor a 9. lcd_coman(0xC7); lcd_dato(' '); //Borra el digito de la unidad para un nmero mayor a 9

dest--;//Decremanta en 1 el valor de dest. } } }//Fin del programa del main void ret (int basta){ //Rutina retardo la cual es llamada en el programa principal int tiempo; //se declara la variable entera tiempo for(tiempo=0;tiempo<=basta;tiempo++);//genera el tiempo del retardo de acuerdo al valor de basta void lcd_coman(char coma){//Rutina que manda comandos al LCD

PTB_PTB7=0;//Se deshabilita el RS del LCD PTB_PTB6=1;//Se habilita el Enable del LCD PTB&=0XF0; //Afectamos con 0 mediante una AND la parte baja del PTB. PTB|= (coma>>4);//Colocamos el cdigo ASCII de cma en la parte baja del PTB PTB_PTB6=0; //Se deshabilita el Enable del LCD

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

PTB_PTB7=1; //Se habilita el RS del LCD

PTB_PTB7=0; PTB_PTB6=1; PTB&=0XF0; Afectamos con 0 mediante una AND la parte baja del PTB. PTB|= (coma&0x0F);//Se le asigna el valor de coma afectado por una AND al PTB PTB_PTB6=0; PTB_PTB7=1;

ret (350);

void lcd_dato(char dat){//Rutina que se utiliza para desplegar un carcter

PTB_PTB7=1; PTB_PTB6=1; PTB&=0XF0; PTB|= (dat>>4); PTB_PTB6=0; PTB_PTB7=0;

PTB_PTB7=1; PTB_PTB6=1; PTB&=0XF0;


JOS ARMANDO LARA GONZALEZ 8

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

PTB|= (dat&0x0F); PTB_PTB6=0; PTB_PTB7=0;

ret(5);//Se realize un retardo } void lcd_mens(char men[ ]){//Rutina que sirve para desplegar una cadena de caracteres char m;// se declara la variable m como char for(m=0;m<15;m++){//genera el tiempo del retardo de acuerdo al valor de m if(men[m]=='$')//Condicin utilizada para realizar la funcin break; break;//Instruccin que se sale del for else//Si no se cumple la condicin de arriba ejecuta la instruccin de abajo. lcd_dato(men[m]);//Rutina que se utiliza para desplegar una cadena de caracteres } } void lcd_char(char var){//Rutina para desplegar nmeros char auxlcd,nume=0;//Variables declaradas auxlcd=(var/100)+0x30;//Al valor de var Se divide entre 100 para obtener el nmero (un digito) que corresponde a las centenas y se le suma 0x30 para obtener el nmero en cdigo ASCII y lo iguala a la variable auxlcd if(auxlcd != '0')//Condicin que indica que si es diferente de cero el digito de la centena (auxlcd )realice la instruccion de desplegar lcd_dato(auxlcd);//Funcin que despliega el digito de la centena else nume=1;//Si no se cumple la condicin establece a la variable nume=1

auxlcd=((var/10)%10)+0x30;//Al valor de var e divide entre 10 y se le aplica la operacin de modulo para obtener el numero que corresponde a las decenas y se le suma 0x30 para obtener el nmero en cdigo ASCII y lo iguala a la variable auxlcd

JOS ARMANDO LARA GONZALEZ

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

if(nume==0 || auxlcd != '0')//Condicin que establece que si el valor de la centena fue diferente de 0 o que el digito de la decena es diferente de 0 despliega el digito de la decena en el LCD lcd_dato(auxlcd);//Despliega el digito de la decena auxlcd=(var%10)+0x30;//Al valor de var se le aplica la operacin modulo para obtener en auxlcd el digito que corresponde a la unidad lcd_dato(auxlcd);//Se despliega la variable auxlcd que corresponde a la unidad

void prog_lcd(void){//Rutina que se utiliza para programar el LCD char i;//Variable declarada for (i=0;i<=5;i++){ //genera el tiempo del retardo de acuerdo al valor de i lcd_coman(comandos[i]);//Se Mandan los comandos guardados en el vector comando[] para programar el microcontrolador } } void tec_matrix(void){//Funcin para capturar el numero del botn presionado. for(i=1;i<=8;i*=2){//Mandamos los cdigos al teclado desde el 1(0001), hasta el 8(1000). PTB&=0xF0;//Afectamos con 0 mediante una AND la parte baja del PTB. PTB|=i;//Colocamos el numero i en el puerto B del C mediante la OR. pa=PTA&0x0F;//Guardamos en pa el nmero ledo en el Puerto A que es el nmero correspondiente al botn presionado.

JOS ARMANDO LARA GONZALEZ

10

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

if(i==1){//Preguntamos se i=1para saber que cdigo es que estamos mandando al teclado en este caso 0001. Si esta condicin se cumple seguimos en este if. if(pa==0)//Si pa=0 quiere decir que no se presiono ningun botn tec=0;//Si pa=0 se hace tec=0. else if(pa==1){//Ahora preguntamos se pa=1 entonces quiere decir que presionamos el boton numero 1 tec=1;//Colocamos el nmero 1 debido a que para que pa=1 es necesario presionar el botn 1. break;//Instruccin que nos saca de la funcin y nos manda al programa principal. } else if(pa==2){ Ahora preguntamos se pa=2 entonces quiere decir que presionamos el botn numero 5 tec=5;// Colocamos el nmero 5 en tec debido a que para que pa=1 es necesario presionar el botn 5. break;// Instruccin que nos saca de la funcin y nos manda al programa principal. } De aqu en adelante la funcin hace lo mismo y solo cambiamos el numero de tec de acuerdo al valor que tenga pa, ya que para que se genere un valor de pa es necesario presionar un cierto botn. else if(pa==4){ tec=9; break; } else if(pa==8){ tec=13; break; }

JOS ARMANDO LARA GONZALEZ

11

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

} if(i==2){ if(pa==0) tec=0; else if(pa==1){ tec=2; break; } else if(pa==2){ tec=6; break; } else if(pa==4){ tec=10; break; } else if(pa==8){ tec=14; break; } } if(i==4){ if(pa==0) tec=0; else if(pa==1){ tec=3; break; } else if(pa==2){ tec=7; break; } else if(pa==4){ tec=11; break; } else if(pa==8){ tec=15; break; } } if(i==8){ if(pa==0) tec=0;
JOS ARMANDO LARA GONZALEZ 12

MICROCONTROLADORES Y MICROPROCESADORES MATRICIAL Y LCD

PRCTICA 12.- TECLADO

else if(pa==1){ tec=4; break; } else if(pa==2){ tec=8; break; } else if(pa==4){ tec=12; break; } else if(pa==8){ tec=16; break; } } } }

5. CONCLUSIN
En esta prctica se realizo un programa que detecta el numero de botn que se ha presionado del teclado matricial, y se desplego este nmero en un LCD, este nmero depende del botn que se haya presionado. Esta prctica cumpli muy bien con los objetivo que se plantearon al inicio de esta, ya que nos ayudo a tener una comprensin ms detallada del microcontrolador, y lo ms importante de esta prctica fue el manejo de un LCD para visualizar informacin alfanumrica. Un detalle rescatable de esta prctica fue que pudimos comprobar que se puede usar los mismos pines del microcontrolador para varias funciones en una misma prctica. La dificultad para llevar a cabo esta prctica no fue muy grande, lo ms importante fue la configuracin de los comandos de inicializacin del LCD a 4 bits dentro del programa, asi como el tener cuidado en las conexiones que hay entre el bus del Microcontrolador el teclado matricial y el LCD para que no se tengan resultados indeseados y que los nmeros que se desplieguen sean los correctos.

JOS ARMANDO LARA GONZALEZ

13

S-ar putea să vă placă și