You are on page 1of 12

INSTITUTO TECNOLGICO SUPERIOR CORDILLERA INTERFACES ELECTRNICAS INFORME Tema: CALCULADORA Integrantes: BYRON HIDALGO MARLON HIDALGO DIEGO

CHANCHAY

INFORME

Objetivos:
Crear una calculadora.

Objetivos secundarios:

1) Realizar una prctica utilizando un teclado matricial de 16 teclas. 2) Programar el PIC para para simular una calculadora.

3) Conocer la funcin de cada material dentro del circuito.

DETALLE: En la siguiente prctica lo que vamos a realizar es una calculadora utilizando el teclado matricial de 16 teclas y un LCD. MATERIALES:
1) 2) 3) 4) 5) 6) 7) 8) 4 Protoboard PIC 16F877A RESISTENCIAS 1-220 7-330 Teclado matricial hexadecimal de 16 teclas BATERIA LCD Chicharra 4 resistencias de 4,7 K

CDIGO:

PROGRAMACIN DEL PIC Es ; CALCULADORA @ device XT_OSC trisa=0 trisb=0 define lcd_bits 4 define lcd_dreg portd define lcd_dbit 4 define lcd_rsreg portd define lcd_rsbit 2 define lcd_ereg portd define lcd_ebit 3 A var portc.4 B var portc.5 C var portc.6 D VAR portc.7 uno var portc.0 dos var portc.1 tres var portc.2 cuatro var portc.3 chicharra var portd.0 ;chicharra x var byte ;variables de operacion y var byte z var byte w var byte m var byte n var byte v var byte num var byte k var byte r var byte s var byte t var byte e var byte f var byte signo var byte PAUSE 100 lcdout $fe,1,"CALC. LISTA" pause 2000 inicio: x=0 y=0

z=0 W=0 e=0 f=0 signo=0 porta=%110000 : portb=%0000001: pause 4 lcdout $fe,1 pause 2000 lcdout $fe,1 gosub barrido gosub rebote if num!=11 then siga if num=11 then e=1 lcdout $fe,1,"-" endif gosub barrido gosub rebote siga: m=num lcdout $fe,$14 lcdout, DEC num pause 100 gosub barrido gosub rebote if signo=10 then lcdout $fe,$14,"+" =1 y=0 z=0 W=0 pause 10 endif if signo=11 then lcdout $fe,$14,"-" x=0 y=1 z=0 W=0 pause 10 endif if signo=12 then lcdout $fe,$14,"*" x=0

y=0 z=1 W=0 pause 10 endif if signo=13 then lcdout $fe,$14,"/" x=0 y=0 z=0 W=1 pause 10 endif gosub barrido gosub rebote if num!=11 then sig if num=11 then f=1 lcdout $fe,$14,"-" endif gosub barrido gosub rebote sig: n=num lcdout $fe,$14 lcdout, DEC num PAUSE 10 igual: low D if tres=0 then respuesta goto igual respuesta: high D pause 100 if x=1 then if e=0 & f=0 then v=m+n gosub lcd goto reset endif if E=1 then if n>=m then v=n-m gosub lcd

goto reset endif if n<m then v=m-n gosub lcdneg goto reset ENDIF endif endif IF y=1 THEN if e=0 & f=0 then IF m>=n THEN V=m-n gosub lcd goto reset ENDIF IF m<n THEN V=n-m gosub lcdneg goto reset ENDIF endif if e=1 then v=m+n gosub lcdneg goto reset endif endif if z=1 then if e=0 & f=0 then V=m*n gosub lcd goto reset ENDIF if e=1 & f=1 then V=m*n gosub lcd goto reset ENDIF if e=1 | f=1 then

V=m*n gosub lcdneg goto reset endif endif if w=1 then if n=0 then lcdout $fe,1,"ERROR INDEF." high chicharra for x=1 to 100 porta=%000001 : portb=%0011001: porta=%000010 : portb=%0101001: porta=%000100 : portb=%0101001: porta=%001000 : portb=%0100001: porta=%110000 : portb=%0011110: next pause 100 low chicharra PAUSE 10 goto reset endif if e=1 ^ f=1 then V=m/n lcdout $fe,$c0+7,"-" LCDOUT $fe,$14 lcdout, DEC V ,"," gosub lcddiv else V=m/n lcdout $fe,$c0+7 lcdout, DEC V ,"," k=m//n r=10*k/n gosub lcddiv pause 10 goto reset ENDIF endif reset: low d

pause pause pause pause pause

4 4 4 4 4

if uno=0 then inicio goto reset barrido: low A if uno=0 then num=1 : return if dos=0 then num=2 : return if tres=0 then num=3 : return if cuatro=0 then signo=10 num=10 return endif high A low B if uno=0 then num=4 : return if dos=0 then num=5 : return if tres=0 then num=6 : return if cuatro=0 then signo=11 num=11 return endif high B low C if uno=0 then num=7 : return if dos=0 then num=8 : return if tres=0 then num=9 : return if cuatro=0 then signo=12 num=12 return endif high C low D if dos=0 then num=0 : return if cuatro=0 then signo=13 num=13 return endif high D

if signo=10 then if signo=11 then if signo=12 then if signo=13 then goto barrido mas: porta=%000001 porta=%000010 porta=%000100 porta=%001000 porta=%110000 goto barrido menos: porta=%000001 porta=%000010 porta=%000100 porta=%001000 porta=%110000 goto barrido por: porta=%000001 porta=%000010 porta=%000100 porta=%001000 porta=%110000 goto barrido division: porta=%000001 porta=%000010 porta=%000100 porta=%001000 porta=%110000 goto barrido

mas menos por division

: : : : :

portb=%001000: portb=%001000: portb=%111110: portb=%001000: portb=%001000:

pause pause pause pause pause

4 4 4 4 4

: : : : :

portb=%1000: portb=%1000: portb=%1000: portb=%1000: portb=%1000:

pause pause pause pause pause

4 4 4 4 4

: : : : :

portb=%100010: portb=%010100: portb=%001000: portb=%010100: portb=%100010:

pause pause pause pause pause

4 4 4 4 4

: : : : :

portb=%001000: portb=%001000: portb=%101010: portb=%001000: portb=%001000:

pause pause pause pause pause

4 4 4 4 4

lcd: lcdout $fe,$14,"=" LCDOUT $fe,$14 lcdout, DEC v pause 10 return lcdneg: lcdout $fe,$14,"=" lcdout $fe,$14,"-"

LCDOUT $fe,$14 lcdout, DEC V pause 10 return lcddiv: k=m//n r=10*k/n lcdout $fe,$14, DEC r s=10*k//n t=10*s/n lcdout $fe,$14, DEC t return rebote: if uno=0 then rebote if dos=0 then rebote if tres=0 then rebote if cuatro=0 then rebote pause 10 return end

Creamos los archivos para enviar al PIC

IMGENES:

Conclusiones y Recomendaciones: Realizar la correcta instalacion de los programas. Tener cuidado con el PIC de no kemarlo