Você está na página 1de 26

ESCUELA MILITAR DE INGENIERA MCAL.

ANTONIO JOSE DE SUCRE BOLIVIA

LABORATORIO # 5

INGENIERIA DE SISTEMAS ELECTRONICOS MICROPROCESADORES ALUMNOS: T.F. Blanco Centellas Ronald Mancilla Rivas Jael Mnica PARALELO: FECHA: 6to Semestre 01/ 10 / 2012 CI. 4915883 LP COD. A10818-9 Garca Balderrama Sal Mauro CI. 6148889 L.P. COD. A11523-1 CI. 6148335 L.P. COD. A10626-7

LA PAZ - BOLIVIA

LABORATORIO N5 TECLADO MATRICIAL 1. OBJETIVOS 1.1. OBJETIVO GENERAL. Realizar un programa en MikroC, el cual nos ayudara a resolver los ejercicios planteados por el docente. Con la ayuda del simulador ISIS 7 professional e implementar le circuito utilizando pantalla LCD o displays y un teclado matricial para observar el comportamiento de dichos circuitos. OBJETIVOS ESPECIFICOS.

1.2.

Primer programa.

Realizar un programa que tome tres nmeros desde un teclado matricial, lo guarde en un arreglo, los convierta a un nmero que se guarde a una variable tipo entera. Con este nmero se debe proporcionar la multiplicacin por 2 y la divisin entre2 de dicho nmero. Segundo programa. Disear hardware y software para un acceso codificado con numero PIN de cuatro dgitos. Si la clave es correcta se debe abrir la puerta; caso contrario debe sonar una alarma. 2. PROGRAMAS. 2.1. Diagramas de flujo.

Primer programa.

Segundo programa

Inicio
char pos,ban,alarm,cont; const char character[] = {14,31,21,31,14,14,14,0, 14,31,21,31,10,14,14,0, 14,31,21,31,10,10,14,0, 21,10,21,10,21,10,21,0, 10,21,10,21,10,21,10,0, 10,20,13,12,2,4,4,0, 10,20,9,4,0,0,0,0, 0,0,0,4,0,0,0,0}; char cadena[ 5 ]=" "; void CustomChar(void); void Out_CustomChar(char pos_row, char pos_char,char carac); char pp,b; void cancion (void); void habla (void); void caratula (void); unsigned short contador; char resu[ 4 ]=" "; unsigned int kp,un,dos,tre,cua,res,contad,cont1,cont2,cont3,acc;

cont, col, aa, contret,cont2 pos,ccol,pos2

1 kp

A
A

B
B

C
C

D
D

C1==0

C1==0

Cont=Cont+2

Cont=0x18 C1++
C1=c1+1

Cont=0xff C1++

Cont==0

C1==1
Cont=0x01

C1==1
Cont=0x24 C1++ 1

Cont=0x00 C1=0

C1==2

Cont=0x42 C1++

C1==3

Cont=0x81 C1++

C1==4

Cont=0x00 C1=0

3. SIMULADOR. Se realiza el armado de los circuitos en Proteus: 3.1. Circuito en proteus para el primer programa:

3.2.

Circuito en proteus para el segundo programa:

3.3.

Configuracin del cristal interno y externo del micro controlador.

El siguiente paso se escoge la frecuencia con la que va a trabajar el cristal externo y el interno del micro controlador:

Se analiza el siguiente diagrama para trabajar con las frecuencias deseadas:

De esta forma se realiza la configuracin en Mikro C, tomando todos los aspectos anteriores para todos los parmetros a configurar en el microprocesador:

4. CAPTURAS DE PANTALLA SIMULADOR 4.1. Ejercicios propuestos. 1. Realizar un programa que tome tres nmeros desde un teclado matricial, lo guarde en un arreglo, los convierta a un nmero que se guarde a una variable tipo entera. Con este nmero se debe proporcionar la multiplicacin por 2 y la divisin entre2 de dicho nmero.

2. Disear hardware y software para un acceso codificado con numero PIN de cuatro dgitos. Si la clave es correcta se debe abrir la puerta; caso contrario debe sonar una alarma.

5. CAPTURA DE PANTALLA DEL GRAVADOR. Primero se importa el archivo deseado:

Posteriormente se quema en el microcontrolador:

. 6. CODIGO DE LOS PROGRAMAS. Primer programa. char pos,ban; unsigned short cen,dec,uni; unsigned char num,sep,tot; char cadena[ 5 ] = " ";

void muestra_digitos(void); void separar_digitos(void); void main(void) { tot=0; num=0;

Keypad_Init(&PORTD); Lcd_Config(&PORTB,1,3,2,7,6,5,4); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Out(1,1,"Ingrese 3 digitos:"); while(1) { muestra_digitos(); separar_digitos(); tot=cen; IntToStr(tot,cadena); Lcd_Out(3,1,"La multiplicacion x2 es:"); Lcd_Out(4,1,cadena); Delay_ms(100);

} } char LeerTeclado(void) { switch(Keypad_Read()) { case 1: return '7'; case 2: return '8'; case 3: return '9'; case 4: return 0; case 5: return '4'; case 6: return '5'; case 7: return '6';

case 8: return 0; case 9: return '1'; case 10: return '2'; case 11: return '3'; case 12: return 0; case 13: return 0; case 14: return '0'; case 15: return 0; case 16: return 0; } } void muestra_digitos(void) { num=0; do { num = LeerTeclado(); } while(!num); Lcd_Chr(2,5,num); Delay_ms(100); dec=0; do { dec = LeerTeclado(); } while(!dec); Lcd_Chr(2,6,dec);

Delay_ms(100); uni=0; do { uni = LeerTeclado(); } while(!uni); Lcd_Chr(2,7,uni); Delay_ms(100); } void separar_digitos(void) { sep = num; dec =(unsigned char) sep%16; dec =dec/2 ; dec=(unsigned char) sep%16; dec=dec/2 ; uni=(unsigned char) sep%16; uni=uni/2 ; }

//unsigned char counter, tmp; //unsigned char uno,dos,num; //int numero,mnum,numero12,mnum12;

//

0 1 2

//unsigned char seg7[]={ 0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5 E,0X79,0X71 }; //subrutinas //void separa_digitos(void); //void muestra_digitos(void); //void main(void) //{ //ADCON1 = 0X0F; //TRISC = 0x00; //TRISD = 0x00; //numero = 0x00; //PORTC = 0x00; //PORTD = 0x00; //while(1) //{ //separa_digitos(); //muestra_digitos(); //numero++; //if(numero==0xFF) //{numero=0;}

//} //} //void muestra_digitos(void) //{ //num=seg7[uno]; //PORTC=0X02; //PORTD=num;

//Delay_ms(2); //num=seg7[dos]; //PORTC=0X01; //PORTD=num; //Delay_ms(2); //} //void separa_digitos(void) //{ //mnum=numero; // uno=(unsigned char)mnum%16; //mnum=mnum/10; //dos=(unsigned char)mnum%16; //mnum=mnum/10; //} // case 0: {cont++; break;} Segundo programa. char pos,ban,alarm,cont; const char character[] = {14,31,21,31,14,14,14,0, 14,31,21,31,10,14,14,0, 14,31,21,31,10,10,14,0, 21,10,21,10,21,10,21,0, 10,21,10,21,10,21,10,0, 10,20,13,12,2,4,4,0, 10,20,9,4,0,0,0,0, 0,0,0,4,0,0,0,0}; char cadena[ 5 ]=" "; void CustomChar(void); void Out_CustomChar(char pos_row, char pos_char,char carac); char pp,b;

void cancion (void); void habla (void); void caratula (void); unsigned short contador; char resu[ 4 ]=" "; unsigned int kp,un,dos,tre,cua,res,contad,cont1,cont2,cont3,acc; void ingreso_numero(void); void abrir(void); void alarma(void); void main (void) { LATA=0X00; ADCON1=0X0F; CMCON=0X07; TRISA=0X00; pos=0; ban=0; Keypad_Init(&PORTD); Lcd_Config(&PORTB,1,3,2,7,6,5,4); Lcd_Cmd(LCD_CURSOR_OFF); caratula(); Lcd_Out(1,1,"Puerta "); Lcd_Out(2,1,"Con Contrasena"); cancion(); Delay_ms(700); Lcd_Cmd(LCD_BLINK_CURSOR_ON); contad=3; cont1=0; cont2=1; cont3=2; alarm=0; while(1){ Inicio: Lcd_Out(1,1,"Enter password:");

Lcd_Out(2,1," Delay_ms(10); Lcd_Chr(2,4,' '); ingreso_numero(); acc=res; if(acc==contad){

");

Lcd_Out(1,1,"Bienvenido Adm."); Lcd_Out(2,1,"Ingrese opcion:"); Delay_ms(2000); Lcd_Out(1,1,"1. Abrir Puerta"); Lcd_Out(2,1,"2. Activar Alarm"); Delay_ms(1500); Lcd_Out(1,1,"3. Cambiar Una "); Lcd_Out(2,1," Delay_ms(1500); Lcd_Out(1,1,"Ingrese opcion:"); Lcd_Out(2,1," Lcd_Chr(2,4,' '); do{kp=keypad_Read();} while(!kp); switch (kp){ case 1:{ abrir();break;} case 2:{ alarma(); break;} case 3:{ Lcd_Out(1,1,"1.Admin 2.User1"); Lcd_Out(2,1,"3.User2 4.User3"); Delay_ms(2000); Lcd_Out(1,1,"Que usuario? Lcd_Out(2,1," Delay_ms(1000); Lcd_Chr(2,4,' '); Delay_ms(300); "); "); "); "); "); Lcd_Out(2,1," contrasena

do{kp=keypad_Read();} while(!kp); switch (kp){ case 1:{ Lcd_Out(1,1,"New password:?"); Lcd_Out(2,1," Lcd_Chr(2,4,' '); ingreso_numero(); contad=res; Lcd_Out(1,1,"Password Cambio"); Delay_ms(1000); break;} case 2:{ Lcd_Out(1,1,"New password:?"); Lcd_Out(2,1," Lcd_Chr(2,4,' '); ingreso_numero(); cont1=res; Lcd_Out(1,1," Lcd_Out(2,1," Delay_ms(1000); break;} case 3:{ Lcd_Out(1,1,"New password:?"); Lcd_Out(2,1," Lcd_Chr(2,4,' '); ingreso_numero(); cont2=res; Lcd_Out(1,1," Lcd_Out(2,1," Delay_ms(1000); "); "); "); "); "); "); ");

Lcd_Out(1,1,"Password Cambio");

Lcd_Out(1,1,"Password Cambio");

break;} case 4: { Lcd_Out(1,1,"New password:?"); Lcd_Out(2,1," Lcd_Chr(2,4,' '); ingreso_numero(); cont3=res; Lcd_Out(1,1," Lcd_Out(2,1," Delay_ms(1000); break;} } goto Inicio; break; } } } if(acc==cont1){ abrir(); goto Inicio; } if(acc==cont2){ abrir(); goto Inicio; } if(acc==cont3){ abrir(); goto Inicio; } else{ alarm++; "); "); ");

Lcd_Out(1,1,"Password Cambio");

if(alarm==1){ Lcd_Out(1,1,"Incorrecto Delay_ms(1500); } if(alarm==2){ Lcd_Out(1,1,"Incorrecto Delay_ms(1500); } if(alarm==3){ Lcd_Out(1,1,"Ud. Activo la "); Lcd_Out(2,1,"Alarma.........."); alarma(); alarm=0; } } } } void ingreso_numero(void){ Delay_ms(200); kp=0; do{kp=keypad_Read();} while(!kp); if(cont==0){ if(kp==16){ kp=0; } cua=kp*1000; Lcd_Out(2,4,"*"); Sound_Play(900, 80); Delay_ms(300); cont++; "); Lcd_Out(2,1,"Le queda 1 intentos"); "); Lcd_Out(2,1,"Le queda 2 intentos");

} if(cont==1){ do{kp=keypad_Read();} while(!kp); if(kp==16){ kp=0; } tre=kp*100; Lcd_Out(2,4,"**"); Sound_Play(1100, 80); Delay_ms(300); cont++; } if(cont==2){ do{kp=keypad_Read();} while(!kp); if(kp==16){ kp=0; } dos=kp*10; Lcd_Out(2,4,"***"); Sound_Play(1200, 80); Delay_ms(300); cont++; } if(cont==3){ do{kp=keypad_Read();} while(!kp); if(kp==16){ kp=0; } un=kp; res=(un+dos+tre+cua);

Lcd_Out(2,4,"****"); Sound_Play(1100, 80); Delay_ms(300); cont=0; } } void abrir(void){ PORTA=0x06; Delay_ms(3000); PORTA=0; Delay_ms(2000); PORTA=0x04; Delay_ms(3000); PORTA=0; alarm=0; } void alarma(void){ alarm=0; while(alarm<10){ PORTA=0x01; Sound_Play(1174, 200); Delay_ms(200); PORTA=0; Sound_Play(2000, 200); Delay_ms(200); } }

BIBLIOGRAFIA Apuntes tomados en laboratorio Pereira e informacin dada por el Ingeniero

http://www.facebook.com/l.php?u=http%3A%2F%2Fpicrobot.blogspot.com% 2F2009%2F05%2Fpuente-h.html&h=UAQHmG9Fu http://www.facebook.com/l.php?u=http%3A%2F%2Fpdf1.alldatasheet.com% 2Fdatasheet-pdf%2Fview%2F173462%2FUTC%2F2SD669A-B-AA3K%2F%2B05_WJWVSSwauhzC.HHKIlLGMZ%2B%2Fdatasheet.pdf&h=UAQHmG9Fu http://www.facebook.com/l.php?u=http%3A%2F%2Fpdf1.alldatasheet.com% 2Fdatasheet-pdf%2Fview%2F173462%2FUTC%2F2SD669A-B-AA3K%2F%2B05_WJWVSSwauhzC.HHKIlLGMZ%2B%2Fdatasheet.pdf&h=UAQHmG9Fu

Você também pode gostar