What i can better, regarding LCD interface with 8051

Status
Not open for further replies.

kumeemb

Junior Member level 3
Joined
Nov 12, 2006
Messages
26
Helped
1
Reputation
2
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,502
Hi,
I need your piece of advice. I am kind of novice to programming C. I am trying to create a Generic LCD_printf function, that can print decimals, string, characters.

The following is the code i am trying

Code:
#include <all necessary h file>

// declaration
void lcd_printf (const char *,...);

//definition
void lcd_printf(const char *identifier, const int idata *datastring)
 {
char id;
while  (*identifier !='\0')
{
 if (*identifier == '%')
        {
                identifier++;
                id = *identifier;
                switch (id)
                        {
                                case 'd' :
                                                dectolcd(datastring); // converts decimal to                                             string
                                                break;

        }               }
 else
        {
        _lcd_data(*identifier); // prints the character in LCD
        }
identifier++;
}
 }

void dectolcd(int *datastring)
  {     char *temp;
        sprintf(temp,"%d",datastring); // converts decimal to string
        lcd_display(temp);   // prints string on the lcd
  }

Void main
{
lcd_printf("Initialising");   // this works fine
lcd_printf("%d",123);
}
Now when I run this code, I am not getting the 123 on the LCD. I know i am messing with the pointers somewhere. Can someone help as what i can do better ??
 

See this:

Generic formats for LCD_Printf function
https://help.bipom.com/index/319513/exa/exa.115.html

Code:
#include <stdio.h>
#include <stdarg.h>
#include <8052.h>
#include <mcs51\bipomlib\types.h>
#include <mcs51\bipomlib\bipomlib.h>
#include <mcs51\bipomlib\lcd.h>

void main()
{
   	// Initialize the serial port 

   	serinit(CBR_19200);
    
	puts( "\rSDCC LCD PRINTF Example" );
	
	// Initialize the LCD 

	LCD_Init();

	// -----------------------------------------

	LCD_Clear();
	LCD_SetTopLine();
	LCD_Write("TEXT FORMAT");
	
	LCD_SetBottomLine();
	LCD_Printf("%s and %s", "PART1", "PART2");

	delay(5000);
	
	// -----------------------------------------

	LCD_Clear();
	LCD_SetTopLine();
	LCD_Write("CHARACTER FORMAT");
	
	LCD_SetBottomLine();
	LCD_Printf("Char1: '%c', Char2: '%c'", 'A', 'Z');

	delay(5000);

	// -----------------------------------------

	LCD_Clear();
	LCD_SetTopLine();
	LCD_Write("INTEGER FORMAT");
	
	LCD_SetBottomLine();
	LCD_Printf("Num1: %d, Num2: %d", 100, -200);

	delay(5000);
	
	// -----------------------------------------

	LCD_Clear();
	LCD_SetTopLine();
	LCD_Write("FLOAT FORMAT #1");
	
	LCD_SetBottomLine();
	LCD_Printf("Number1: %f", 10.5);

	delay(5000);

	// -----------------------------------------

	LCD_Clear();
	LCD_SetTopLine();
	LCD_Write("FLOAT FORMAT #2");
	
	LCD_SetBottomLine();
	LCD_Printf("Number1: %.3f", 1.23456789);

	delay(5000);
	
	puts( "\rDone" );
	while(1);
}



Why to avoid sprintf() ? You can have all formating.
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…