Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informe Calculadora PIC
Informe Calculadora PIC
Diagrama de flujo
Programa PIC C
#include <16F877A.h>
//#fuses XT,NOWDT,NOPROTECT,NOLVP
#include "lcd.c"
#include "kbd_LIB.c"
#include <string.h>
#INCLUDE <stdlib.h>
#INCLUDE <math.h>
char xoper();
void main()
lcd_init();
kbd_init();
port_b_pullups(TRUE);
char nume[10];
char actual=0;
char operador;
int i=0;
float num1;
float num2;
//set_tris_b(0x00);
set_tris_c(0xff);
//output_b(0x00);
//output_c(0x00);
while(true)
inicio:
while(actual!='+' && actual!='-' && actual!='*' && actual!='/' &&actual!= '^' && actual!='t')
if(actual=='.')
lcd_putc('\f');
operador=0;
strcpy(nume, "");
actual=0;
i=0;
goto inicio;
actual=getch;
lcd_putc(actual);
nume[i]=actual;
i++;
operador=actual;
num1=atoi(nume);
goto operar;
strcpy(nume, "");
actual=0;
i=0;
while(actual!='=')
if(actual=='.')
lcd_putc('\f');
operador=0;
strcpy(nume, "");
actual=0;
i=0;
goto inicio;
actual=getch;
lcd_putc(actual);
nume[i]=actual;
i++;
//prfloatf(lcd_putc,"!%s",nume);
num2=atoi(nume);
float valor;
operar:
switch(operador)
case '+':
valor=suma(num1,num2);
printf(lcd_putc,"%f",valor);
break;
case '-':
valor=resta(num1,num2);
printf(lcd_putc,"%f",valor);
break;
case '*':
valor=multi(num1,num2);
printf(lcd_putc,"%f",valor);
break;
case '/':
valor=divi(num1,num2);
printf(lcd_putc,"%f",valor);
break;
case '^':
valor=(num1*num1);
printf(lcd_putc,"\f%f^2=%f",num1,valor);
break;
case 't':
valor=(tan(num1));
printf(lcd_putc,"\ftan(%f)=%f",num1,valor);
break;
delay_ms(5000);
num1=0;
num2=0;
lcd_putc('\f');
operador=0;
strcpy(nume, "");
actual=0;
i=0;
char xoper()
if(input(PIN_C0)==1)
return '^';
if(input(PIN_C1)==1)
return 't';
return '0';
return (num1+num2);
return (num1-num2);
}
float multi(float num1,float num2)
return (num1*num2);
if(num2==0)
return 0;
else
return (num1/num2);
Circuito Proteus
Conclusiones