TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ed3dmax en 16 de Noviembre de 2010, 01:45:26

Título: Problemas con calculadora en mikroC
Publicado por: ed3dmax en 16 de Noviembre de 2010, 01:45:26
Hola quisiera que me ayuden con este problema que tengo he hecho una calculadora basica usando el mikroc y usando el pic 16f887, funcionan las cuatro operaciones basicas pero al momento de hacer una operacion por ejemplo la suma de 15 + 24 me sale 38.99999 y nose como redondearlo he utilizado la funcion ceil pero nada les dejo el programa para que alguien lo pueda arreglar y hasta mejorarlo porque solo realiza operaciones con numeros enteros y no decimales ya que nose como introducir el punto decimal gracias por sus respuestas.
Código: [Seleccionar]

sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB0_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB0_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;



char cadena[15];
unsigned short int tabla[16]=
{
0,1,2,3,
4,5,6,7,
8,9,'+','-',
'*','/','^','=',
};
double numero[3];
unsigned short int dato;
unsigned short int col;
unsigned short index;
double resultado;
unsigned char signo;

void main() {
col=1;
index=0;
resultado=0;
ANSEL=0;
ANSELH=0;
trisa=0xff;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
while (1)
{

    if (RA4_bit)
  {
  dato=porta & 0x0f;
    if (tabla[dato]>=0&&tabla[dato]<=9)
     {
           numero[index]=tabla[dato]+numero[index]*10;
            Lcd_Chr(1,col,tabla[dato]|0x30);
            col++;
     }
    
     else if (tabla[dato]!='=')
     {
     Lcd_Chr_CP(tabla[dato]);
     signo=tabla[dato];
     col++;
     index=1;
     }
     else
     {
      switch (signo)
       {
       case '+':
       resultado=numero[0]+numero[1];
       break;
       case '-':
       resultado=numero[0]-numero[1];
       break;
       case '*':
       resultado=numero[0]*numero[1];
       resultado=ceil(resultado);
       break;
       case '/':
       resultado=numero[0]/numero[1];;
       break;
       case '^':
       resultado=pow(numero[0],numero[1]);
       break;
       }
       floatToStr(resultado,cadena);
       Lcd_out(2,1,rtrim(cadena));
      }
        while(RA4_bit);
  }
 }
}[code=cpp]
         
 [/code]
Título: Re: Problemas con calculadora en mikroC
Publicado por: ed3dmax en 16 de Noviembre de 2010, 21:15:14
gracias suky por cambiar el titulo
Título: Re: Problemas con calculadora en mikroC
Publicado por: bigluis en 16 de Noviembre de 2010, 23:16:38
Prueba a utilizar la función ByteToString en vez de la función FloatToString pero antes convierte el float a tipo byte o short.