Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

sprintf Kullanmadan olmaz mı?

Başlatan M_B, 16 Mayıs 2009, 10:35:03

M_B

unsigned char saat10,saat1,dakika10,dakika1,saniye10,saniye1;



sprintf(LCDsaat,"%d%d:",saat10,saat1);
sprintf(LCDsaat+3,"%d%d:",dakika10,dakika1);
sprintf(LCDsaat+6,"%d%d",saniye10,saniye1);
lcd_goto(0x00);
lcd_puts(LCDsaat);


Yukardaki kod parcasında
sprintf fonksiyonunu kullanmadan  baska bir yol la yapilamaz mı.
sprintf fonksiyonu cok yer kaplıyor
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

papsukkal

çok yer kaplayan sprintf fonksiyonu mu yoksa LCD ye yazdırdığın karakterler mi? ekran mesajları çok yer kaplıyorlar. bence sprintf yerine başka komut kullanmaktnsa ekran mesajlarını eproma yazdır daha fazla karlı çıkarsın.

fractal

sanırım glcd kullanıyorsun ve değişkenini karektere dönüştürüp ekrana basman gerekiyor.benimde bildiğim başka bir yol yok.
Restantum cogniscutur Quantum deligutur

arslan74

/* Write int to LCD */

void lcd_write_int( int val){
	
	unsigned int	temp= 0;
	unsigned int	t= 10000;
	char 	flag=1;
	char 	flag_minus=0;
	unsigned char 	sifirlar = 0;

	if (val == 0){
	lcd_puts("00000");
		return;
	}
	
	if (val < 0){
		flag_minus= 1 ;
		val*= -1;
	}


	do{

	temp= val/t;

	if (flag)
		if ( temp == 0 ){
			sifirlar++;
			lcd_putch('0');
			continue;
		}
		
		else {
			flag= 0;
			if(flag_minus)
				lcd_putch('-');
		}
		
	lcd_putch('0'+temp);

	val= val - temp*t;
	
	}while(t/=10);
	
//	while (sifirlar--)
 //		lcd_puts(" ");


}

/* Write unsiged int to LCD */

void lcd_write_uint( unsigned int val){
	
	unsigned int	temp= 0;
	unsigned int	t= 10000;
	char 	flag=1;
	char 	flag_minus=0;
	unsigned char 	sifirlar = 0;

	if (val == 0){
	lcd_puts("0    ");
		return;
	}
	
/*	if (val < 0){
		flag_minus= 1 ;
		val*= -1;
	}
*/

	do{

	temp= val/t;

	if (flag)
		if ( temp == 0 ){
			sifirlar++;
			continue;
		}
		
		else {
			flag= 0;
			if(flag_minus)
				lcd_putch('-');
		}
		
	lcd_putch('0'+temp);

	val= val - temp*t;
	
	}while(t/=10);
	
	while (sifirlar--)
 		lcd_puts(" ");


}

M_B

Yardımlarınız ıcın tesekkürler
arslan74 hocam verdiginiz fonksiyondan
lcd_putch('0'+temp);

kısmı fazlası ile işimi gördü. Teşekkür ederim.

ama  '0'+temp ; kısmını anlamadım.  
cunku bu kodu ogrenmeden once lcd_putch(temp);  
yazdıgımda ise LCD ekrana temp degerini yazmıyordu.

şimdi ise ('0'+temp);  yapınca yazıyor
burdaki hikmet nedir.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

arslan74

Merhaba,
hemen sorunuzu cevapılayım.
LCD ASCII karakter olarak girdiğin değerli ekrana gösterir. şimdi 0 dan 9 kadar sayıyı ekranda gösterebilmek için onu doğrudan ekran versen başka bir şey cıkar. Bu karakteri ASCII karatere dönüştürmeniz gerekir. ASCII tabblosuna bakarsanız. 0 -> 48 ,1->49 şeklinde dir. Eğer bir dijitlik değerinize 48 eklerseniz bu onun ASCII değeri eder. Bende bu fonksiyonda da öyle yaptım.

lcd_putch('0'+temp);

Onun yerine
lcd_putch(48+temp);


demiş olsamda aynı şeyi demiş olurdum. ASCII Sıfırın hangi değere karşılık geldiğini öğrenmek yerine '0' ASCII karakteri şeklinde yazdım.
Umarım anlaşılmıştır.

Selamlar