Autor Tema: calculadora mejorada en mikroc  (Leído 6363 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ed3dmax

  • PIC10
  • *
  • Mensajes: 11
calculadora mejorada en mikroc
« en: 20 de Noviembre de 2010, 00:55:57 »
hace una semana puso el codigo de una calculadora hecha en mikroc pero no sumaba numeros decimales ahora lo he mejorado y se las doy para que lo vean y lo puedan mejorar aunque todavia tiene un pequeño problema no puedo redondear los numeros decimales pero bueno veanlo ustedes.

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;



signed 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 int index;
unsigned short int punto;
unsigned short int signo1;
unsigned short int y;
unsigned short int habilita_punto;
unsigned short int habilita_signo;
float  resultado;
unsigned char signo;

void main() {
col=1;
index=0;
resultado=0;
punto=0;
habilita_punto=1;
habilita_signo=1;
signo1=0;
y=1;
numero[0]=0;
numero[1]=0;
ANSEL=0;
ANSELH=0;
trisa=0xff;
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
//index= ceil(pow(10,2));
//ByteToStr(index,cadena);
Lcd_chr(1,1,'0');
while (1)
{

    if (RA4_bit)
  {
  dato=porta & 0x0f;
 
   if(tabla[dato]>=0&&tabla[dato]<=9)
     {
        if (punto){ 
  numero[index]=numero[index]+(1/ceil(pow(10,y)))*tabla[dato];
  y++;
  }
else
numero[index]=tabla[dato]+numero[index]*10;
       
Lcd_Chr(1,col,tabla[dato]|0x30);
        col++;
     }
     
   else if (tabla[dato]!='='&&tabla[dato]!='.')
          {
          if (habilita_signo)
          {

          Lcd_Chr_CP(tabla[dato]);
          signo=tabla[dato];
          col++;
          y=1;
          index=1;
          punto=0;
          habilita_signo=0;
          habilita_punto=1;
          }
          }
     
     else if (tabla[dato]=='.')
     {
      if (habilita_punto)
      {
  punto=1;
      Lcd_Chr_CP('.');
      col++;
      habilita_punto=0;
      }
      }
    else
     {
      switch (signo)
       {
       case '+':
       resultado=numero[0]+numero[1];
       break;
       case '-':
       resultado=numero[0]-numero[1];
       break;
       case '*':
       resultado=numero[0]*numero[1];
       break;
       case '/':
       resultado=numero[0]/numero[1];;
       break;
       }
       floatToStr(resultado,cadena);
       Lcd_out(2,1,rtrim(cadena));
      }
        while(RA4_bit);
  }
 }
}


Desconectado gilig17

  • PIC10
  • *
  • Mensajes: 1
Re: calculadora mejorada en mikroc
« Respuesta #1 en: 15 de Julio de 2011, 11:26:50 »
Hola =) podrías postear el código q te funciona y el archivo .hex o bien el .cof para poder simularlo?? se ve muy interesante, pero no logré compilarlo con Mikroc, saluods