Autor Tema: Problemas con calculadora en mikroC  (Leído 3379 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ed3dmax

  • PIC10
  • *
  • Mensajes: 11
Problemas con calculadora en mikroC
« 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]
« Última modificación: 16 de Noviembre de 2010, 10:09:26 por Suky, Razón: El titulo no informaba de que se trata el tema... »

Desconectado ed3dmax

  • PIC10
  • *
  • Mensajes: 11
Re: Problemas con calculadora en mikroC
« Respuesta #1 en: 16 de Noviembre de 2010, 21:15:14 »
gracias suky por cambiar el titulo

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: Problemas con calculadora en mikroC
« Respuesta #2 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.
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA