Вы находитесь на странице: 1из 11

Caja fuerte en mplab INTEGRANTES: Cristian granda FECHA: 29 03 2012

1. TEMA: Realizacin de una caja fuerte con teclado matricial 2. OBJETIVOS: Programar las lneas de cdigo necesarios para el funcionamiento adecuado de la caja fuerte con teclado matricial Implementar el circuito correspondiente y verificar su funcionamiento 3. LISTA DE MATERIALES: N 1 2 3 4 5 6 7 CANTIDAD 1 1 6 6 1 1 1 DESCRIPCION PIC16F877A Potencimetro Resistencia Leds LCD Micro pulsante Teclado Matricial SUMA TOTAL(dlares): PRECIO/u 7.00 0.40 0.10 0.15 9.00 0.10 9.00 Total 7.00 0.40 0.60 0.90 9.00 0.10 9.00 27.00

4. LISTA DE INSTRUMENTOS: N 1 2 3 4 5 6 7 DESCRIPCION PC Fuente de voltaje Protoboar Multmetro Pinza Corta fro Cables con bananas

5. PROGRAMA: @ device pic16F877a, xt_osc, wdt_off, bod_off, lvp_off DEFINE OSC 4 ; valor del oscilador DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTD DEFINE LCD_RSBIT 0 DEFINE LCD_EREG PORTD

DEFINE LCD_EBIT 1 DEFINE ADC_BITS 8 ; Fija num de bits del resultado ADCON1 = %00000110; EL PUERTO A Es DIGITAL ;Configutracin del modulo PWM TRISA = %00000000 ; Hago al puerto A de salida. TRISC = %00000000 ; SALIDA DEL PWM TRISB = %11110000 PORTB=%11110000 TRISE.0=0 PORTE.0=0 PR2 = 255 CCPR1L = 0 LOW TRISC.2 T2CON = %00000111 CCP1CON = %00001111 ;DECLARACION DE VARIABLES DATO1 VAR BYTE X VAR BYTE A VAR PORTB.0 B VAR PORTB.1 C VAR PORTB.2 D VAR PORTB.3 FUNO VAR PORTB.4 FDOS VAR PORTB.5 FTRES VAR PORTB.6 FCUATRO VAR PORTB.7 TECLA VAR WORD N1 VAR WORD N2 VAR WORD N3 VAR WORD N4 VAR WORD M1 VAR WORD M2 VAR WORD M3 VAR WORD MC VAR BYTE MD VAR BYTE MU VAR BYTE PAUSE 200 INTCON=%10001000 INICIO:

LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000001 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000010 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000100 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00001000 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00100000 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000000 PORTE =%00000001 FOR X=0 TO 30 pause 10

IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTE =%00000000 PORTA =%00100000 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00001000 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000100 FOR X=0 TO 30 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT LCDOUT $FE,1 LCDOUT $FE,$80," AUTO " LCDOUT $FE,$C0," FANTASTICO " PORTA =%00000010 FOR X=0 TO 25 pause 10 IF FUNO = 0 THEN GOSUB CLAVE NEXT ON INTERRUPT GOTO CLAVE GOTO INICIO TECLADO: LOW A IF FUNO = 0 THEN UNO IF FDOS = 0 THEN DOS IF FTRES = 0 THEN TRES IF FCUATRO = 0 THEN CUATRO HIGH A

LOW B IF FUNO = 0 THEN CINCO IF FDOS = 0 THEN SEIS IF FTRES = 0 THEN SIETE IF FCUATRO = 0 THEN OCHO HIGH B LOW C IF FUNO = 0 THEN NUEVE IF FDOS = 0 THEN DIEZ IF FTRES = 0 THEN ONCE IF FCUATRO = 0 THEN DOCE HIGH C LOW D IF FUNO = 0 THEN TRECE IF FDOS = 0 THEN CATORCE IF FTRES = 0 THEN QUINCE IF FCUATRO = 0 THEN DICISEIS HIGH D goto TECLADO UNO: tecla="1" return DOS: tecla="2" return TRES: tecla="3" return CUATRO: tecla="A" return CINCO: tecla="4" return SEIS: tecla="5" return

SIETE:

tecla="6" return OCHO: tecla="B" return NUEVE: tecla="7" return DIEZ: tecla="8" return ONCE: tecla="9" return DOCE: tecla="C" return TRECE: tecla="*" return CATORCE: tecla="0" return QUINCE: tecla="#" return DICISEIS: tecla="D" RETURN DISABLE CLAVE: LCDOUT $FE,1,$FE,2, " INGRESE CLAVE " PAUSE 300 gosub TECLADO SWAP tecla, N1 LCDOUT $FE,$C5, "*" pause 300 gosub TECLADO

SWAP tecla, N2 LCDOUT $FE,$C6, "*" pause 300 gosub TECLADO SWAP tecla, N3 LCDOUT $FE,$C7, "*" pause 300 IF (N1="2" AND N2="5" AND N3="8") THEN GOTO MENU ELSE GOSUB ERROR ENDIF INTCON.1=0 RESUME ENABLE GOTO CLAVE MENU: LCDOUT $FE,1,$FE,2, "MOTOR DC (1)" LCDOUT $FE,$C0,"CLAVE (2)" pause 300 gosub TECLADO if tecla = "1" then goto MOTOR_DC if tecla = "2" then GOTO MOTOR_PASO If (tecla != "1" and tecla!= "2") then goto ERRORTECLA goto MENU MOTOR_DC: LCDOUT $FE,1 LCDOUT $FE,$80," MOTOR DC " LCDOUT $FE,$C0," PWM: " PAUSE 300 Gosub TECLADO SWAP tecla, M1 LCDOUT $FE,$C5, M1 pause 500 gosub TECLADO SWAP tecla, M2 LCDOUT $FE,$C6, M2 pause 500 gosub TECLADO SWAP tecla, M3 LCDOUT $FE,$C7, M3 pause 500 IF M1="0" THEN MC=0

IF M1="1" THEN MC=1 IF M1="2" THEN MC=2 IF M2="0" THEN MD=0 IF M2="1" THEN MD=1 IF M2="2" THEN MD=2 IF M2="3" THEN MD=3 IF M2="4" THEN MD=4 IF M2="5" THEN MD=5 IF M2="6" THEN MD=6 IF M2="7" THEN MD=7 IF M2="8" THEN MD=8 IF M2="9" THEN MD=9 IF M3="0" THEN MU=0 IF M3="1" THEN MU=1 IF M3="2" THEN MU=2 IF M3="3" THEN MU=3 IF M3="4" THEN MU=4 IF M3="5" THEN MU=5 IF M3="6" THEN MU=6 IF M3="7" THEN MU=7 IF M3="8" THEN MU=8 IF M3="9" THEN MU=9 DATO1=(100*MC)+(10*MD)+(MU) CCPR1L = DATO1 PAUSE 15000 CCPR1L=0 RETURN MOTOR_PASO LCDOUT $FE,1,$FE,2, " CLAVE SEGURIDAD" pause 1000 gosub TECLADO SWAP tecla, N1 LCDOUT $FE,$C5, "*" pause 500 gosub TECLADO SWAP tecla, N2 LCDOUT $FE,$C6, "*" pause 500 gosub TECLADO SWAP tecla, N3 LCDOUT $FE,$C7, "*" pause 500 gosub TECLADO SWAP tecla, N4

LCDOUT $FE,$C8, "*" pause 500 IF (N1="5" AND N2="0" AND N3="2" AND N4="4") THEN GOTO ABRIENDO ELSE GOTO ERROR ENDIF RETURN ABRIENDO: LCDOUT $FE,1,$80,"ABRIENDO..." PAUSE 600 TRISC =%00000000 FOR X=0 TO 1 PORTC.4 =1 pause 600 PORTC.4 =0 PORTC.5 =1 PAUSE 600 PORTC.5 =0 PORTC.6 =1 PAUSE 600 PORTC.6 =0 PORTC.7 =1 PAUSE 600 PORTC.7 =0 NEXT X PORTC.4 =1 pause 600 PORTC.4 =0 PORTC.5 =1 PAUSE 600 PORTC.5 =0 GOTO CERRANDO RETURN ERROR: LCDOUT $FE,$80,"CLAVE INCORRECTA" PAUSE 2000 RETURN ERRORTECLA: LCDOUT $FE,1,$FE,2, "ERROR DE OPCION" ;Si pulsamos una pause 500 GOTO MENU

CERRANDO: LCDOUT $FE,1,$C0," ABIERTO " GOSUB TECLADO IF TECLA = "C" THEN LCDOUT $FE,1 LCDOUT $FE,$80,"... CERRANDO" PAUSE 600 TRISC = %00000000 FOR X=0 TO 1 PORTC.7 =1 pause 600 PORTC.7 =0 PORTC.6 =1 PAUSE 600 PORTC.6 =0 PORTC.5 =1 PAUSE 600 PORTC.5 =0 PORTC.4 =1 PAUSE 600 PORTC.4 =0 NEXT X PORTC.7 =1 pause 600 PORTC.7 =0 PORTC.6 =1 PAUSE 600 PORTC.6=0 LCDOUT $FE,1 LCDOUT $FE,$80," CERRADO " PAUSE 600 RETURN ENDIF GOTO CERRANDO end

6. CONCLUSIONES Y RECOMENDACIONES: Conclusiones: Como conclusin podra decir que la realizacin de esta prctica fue de gran ayuda para reforzar los conocimientos antes aprendidos en sistemas micro-procesados 1. Tambin se podra decir que se tuvo inconvenientes en el uso de la interrupcin, puesto que cuando se inicia la interrupcin nos imposibilita volver a testear el teclado matricial, motivo x el cual no se puede ingresar las claves.

10

Recomendaciones: Se recomienda no olvidar las alimentaciones as como tambin la tierra; tanto de nuestro PIC como del LCD, para as poder evitarnos inconvenientes a futuro. 7. BIBLIOGRAFIA: Microchip pic16f87XA Data Sheet. 28/40/44-Pin Enhanced Flash Microcontrollers. Reyes Carlos A. (2006). Microcontroladores programacin en Basic. 2da edicin, QuitoEcuador: Rispergraf.

11

Вам также может понравиться