domingo, 9 de julio de 2017

Programa PIC 18F4550 "Calculadora"

Les comparto el codigo para una calculadora de un solo digito, este programa utiliza la libreria que ya les comparti.



#include <18f4550.h>
#fuses XT,WDT,NOPROTECT,NOPUT, NOPBADEN
#use delay(clock= 20000000)
#BUILD(reset=0x2000,interrupt=0x2008)
#ORG 0x0000,0x1fff {}
#define use_portb_kbd true
#define use_portd_lcd true
#include <lcd.c>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <kbd4x4_1.c>
#use standard_io(b)

void saludo (){
lcd_gotoxy (1,1);
printf (lcd_putc,"Electronica");
lcd_gotoxy (1,2);
printf (lcd_putc,"Calculadora");
delay_ms (7000);
printf (lcd_putc,"\f");
delay_ms (2000);
}
void main()
{
float k=0,op;
float res;
float a=0, b=0;
lcd_init ();
Kbd_init ();
saludo();
port_b_pullups (TRUE);
for(;;){
   k=kbd_getc();
   if (k!=0&&k!='#'&&k!='A'&&k!='B'&&k!='C'&&k!='D'&&k!='*'){ ///# es igual A es mas B es menos C es multiplicar D es divicion
   lcd_gotoxy (1,1);
   lcd_putc (k);
   a=k-48;
   }
   if (k=='A'){
   lcd_gotoxy (1,1);
   lcd_putc (k);
   op=k;
   b+=a;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
    if (k=='B'){
   lcd_gotoxy (1,1);
   lcd_putc (k);
   op=k;
   b-=a;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='C'){
   lcd_gotoxy (1,1);
   lcd_putc (k);
   op=k;
   b*=a;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='D'){
   lcd_gotoxy (1,1);
   lcd_putc (k);
   op=k;
   b/=a;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='#'&&op=='A'){
   printf(lcd_putc,"\f");
   delay_ms(1);
   b=b+a;
   res=(char)b;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='#'&&op=='B'){
   printf(lcd_putc,"\f");
   b=b-a;
   res=(char)b;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='#'&&op=='C'){
   printf(lcd_putc,"\f");
   b=b*a;
   res=(char)b;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b);
   }
   if (k=='#'&&op=='D'){
   printf(lcd_putc,"\f");
   b=b/a;
   res=(char)b;
   lcd_gotoxy (1,2);
   printf(lcd_putc,"%f",b) ;
   }
   if (k=='*'){
   lcd_gotoxy (1,1);
   b=a;
   }
}
}

El programa es muy sencillo, si tienen alguna implementación o algún comentario por favor compartanlo.

1 comentario:

  1. Funciona,se muestra la bienvenida en el lcd pero parece que hay un error porque no se digitan la mayoria de numeros ni signos matematicos,el dos no mas se digite y cada vez que lo presiono aumenta o baja de cantidad,además que el equipo simulado demora casi un minuto en estar operativo

    ResponderBorrar