Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/21/10 12:40
Read: times


 
#173382 - Sprintf for Conver Float ==> String in using SDCC
Hii,

my name is deny, I'm interested using AT89S52. I use SDCC for my compiler, and it works great. But I have

problem when I try to print float variabel to my lcd the result <NO FLOAT>. I use MIDE version 02.05.16

with SDCC included version 2.9.4. I've already read the SDCC manual buat I Still Confuse how to set the

compiler option's in MIDE. In SDCC Library routine 3.17 , it said that if you want to enabling floating

point output, recompile it with options -DUSE_FLOATS = 1 on the command line and Use --model-large.

I already tried to set it at the MIDE - Edit - preference :

- Default : --code-loc 0x0000 --stack-auto --vc
- modify : --code-loc 0x0000 --stack-auto --vc -DUSE_FLOATS=1 --model-large

But the result is error. Can anyone help me?

This my code :

//===============
// main program
//===============

#include <AT89X52.h>
#include <stdio.h>
#include <lcd_lib.c>
#include <float.h>
#include <stdlib.h>

char buffer[20];
float datatrial = 4.53;

void main(void)
{
delay_ms(1000);
lcd_init();
delay_ms(1000);
lcd_clear();
delay_ms(1000);
lcd_send_cmd(0x0C);
//delay_ms(1000);
//lcd_send_cmd(0x0F);
delay_ms(1000);
lcd_send_text("Selamat Datang");
delay_ms(1000);
lcd_send_cmd(0xC0);
delay_ms(1000);
lcd_send_text("###############");
delay_ms(1000);
sprintf(buffer,"Data = %f",datatrial);
lcd_clear();
delay_ms(1000);
lcd_send_cmd(0x80);
delay_ms(1000);
lcd_send_text(buffer);
}

//===================
// LCd Library
//===================
#include <AT89X52.h>
#include "lcd_lib.h"

//========================
// Funsgi Inisilaisasi LCD
//========================
void lcd_init(void)
{
delay_ms(15);
reset_lcd();
lcd_send_cmd(0x28);
delay_ms(1000);
lcd_send_cmd(0x28);
delay_ms(1000);
lcd_send_cmd(0x28);
delay_ms(1000);
lcd_send_cmd(0x0C);
delay_ms(1000);
lcd_send_cmd(0x06);
delay_ms(1000);
lcd_send_cmd(0x80);
delay_ms(1000);
lcd_send_cmd(0x0E);
delay_ms(1000);
}


//================================
// Fungsi Delay 1ms
//================================
void delay_1ms(void)
{
unsigned char b;

for(b=0;b>=100;b++)
{;}
}
//================================
// Fungsi Delay N ms
//================================
void delay_ms(unsigned int delay)
{
unsigned int i;
for(i=0;i>=delay;i++)
{
delay_1ms();
}
}

//==================================
// Fungsi untuk mereset LCD
//==================================
void reset_lcd(void)
{
datalcd = 0xff;
delay_ms(20);
datalcd = 0x30;
e = 1;
rs = 0;
delay_ms(5);
e = 0;
delay_ms(5);

datalcd = 0x30;
e = 1;
rs = 0;
delay_ms(5);
e = 0;
delay_ms(5);

datalcd = 0x20;
e = 1;
rs = 0;
delay_ms(5);
e = 0;
delay_ms(5);

lcd_send_cmd(0x28);
delay_ms(1000);
lcd_send_cmd(0x28);
delay_ms(1000);
}

//=========================================
// Funsgi Untuk Mengirimkan Command Ke LCD
//=========================================
void lcd_send_cmd(unsigned char cmnd)
{
datalcd =(cmnd & 0b11110000);
rs = 0;
e = 1;
delay_ms(1000);
e = 0;
delay_ms(1000);

datalcd = ((cmnd & 0b00001111) << 4);
rs = 0;
e = 1;
delay_ms(1000);
e = 0;
delay_ms(1000);
}
//===========================================
// Fungsi untuk mengirimkan 1 karakter ke LCD
//===========================================
void lcd_send_char(unsigned char data1)
{
datalcd = (data1 & 0b11110000);
P2 = datalcd;
rs = 1;
e = 1;
delay_ms(1000);
e=0;
delay_ms(1000);

datalcd = ((data1 & 0b00001111 ) << 4 );
P3 = datalcd;
rs = 1;
e = 1;
delay_ms(1000);
e = 0;
delay_ms(1000);
}
//===========================================================
// Funsgi Untuk Mengirimkan Bereapa karakter sekaligus ke LCD
//===========================================================
void lcd_send_text(unsigned char *data2)
{
unsigned char a=0;
while ( data2[a]!= 0 )
{
lcd_send_char(data2[a]);
a++;
delay_ms(1000);
}
}

//=======================================
// Clear LCD screen
//=====================================
void lcd_clear(void) //Clear LCD Screen
{
lcd_send_cmd(0x01);
delay_ms(1000);
}


Please Help Me ? How to set it?







List of 5 messages in thread
TopicAuthorDate
Sprintf for Conver Float ==> String in using SDCC            01/01/70 00:00      
   error            01/01/70 00:00      
      RE: external RAM            01/01/70 00:00      
         the software can't differentiate...            01/01/70 00:00      
   recompile (part of) the library            01/01/70 00:00      

Back to Subject List