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.
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);
}
}
}