C18 değişken tanımlama ve fonksiyon yazma

Başlatan computerboy, 14 Aralık 2011, 14:40:15

JKramer

Glcd ve rom ile ilgili bir şey diyemeyeceğim, yalnız sprintf'de sorun neymiş? Buffer'ı doldurmayı nasıl başardınız?

computerboy

unsigned long x_int;        // main'den önce tanımlanacak // tanımlamayı neden main içine alamıyoruz anlayamadım.
unsigned char buffer[9];  // main'den önce tanımlanacak
void main(void)
{

x_int=(unsigned long)254589;
sprintf(buffer,(const far rom char*)"X: %ld",(unsigned long)x_int); //(const far rom char*) ve veri tipleri (unsigned long) v.b veri tipleri eklenecek,


bu şekilde bufferin sağlıklı bir şekilde dolduğunu debug modda görebiliyorum.

JKramer

Unsigned için muhtemelen %Lu olması gerekiyor.

computerboy

#48
Yardımlarınız için çok teşekkür ederim arkadaşlar.


static char rom data;
char buffer [8];
float x=20.25539;
unsigned int x_int, x_dec;

void main(void)
{

x_int = (unsigned int)x;
x_dec = (unsigned int)(((float)x - (float)x_int) * 100000);
sprintf(buffer,(const far rom char*)"%d.%04d", x_int, x_dec);
data=(rom char rom)buffer;

glcd_Init();
InitLEDs();
glcd_ClearScreen();
glcd_SetPos(3,14);
glcd_PutMessage((rom char*)data);
glcd_Box(0,0,127,63);
}


data=(rom char rom)buffer;
data=(char)buffer;
data=(rom char*)buffer;

data atamalarını bu şekilde denedim ama grafik lcd'den hala bir sonuç alamadım nasıl yaparım anlayamadım bir türlü ?

computerboy

#49
Şimdi denedim olmadı hocam. Debug penceresinden bufferin içeriğini görebiliyorum tam istediğim gibi ama bufferi glcdye aktaramıyorum.

computerboy

char buffer[11];
float x=20.25539;
unsigned int x_int, x_dec,i;

void main(void)
{
x_int = (unsigned int)x;
x_dec = (unsigned int)(((float)x - (float)x_int) * 100000);
sprintf(buffer,(const far rom char*)"X: %d.%04d",x_int, x_dec);

glcd_Init();
InitLEDs();
glcd_ClearScreen();
glcd_Box(0,0,127,63);

glcd_SetPos(3,14);
i=0;
while(buffer!=0)
{glcd_PutChar(buffer[i++]);}
}

arkadaşlar istediğim şekilde glcd' ye veri yazdırmayı başaramadım ama bu şekilde bir çözüm buldum. belki birinin işine yarar. herkese çok teşekkür ediyorum.

haydarpasamikro

c18 derleyici stdio.lib kütüphanesini kullanırken dikkat etmek lazım. Çünkü:
sprintf(dizi,"format",long sayı) şeklinde sayı long kabul etmez. Sonuç hatalı veya hiçtir.
Kısaca long bir değeri ascii stringe çeviremezsiniz. Sadece integer değerli çevirebilirsiniz. c18 için böyle. zayıf yanı.

Metod diğer:

stdlib.h kütüphanesindeki ultoa(long sayı, dizi) fonksiyonunu kullanınız. unsigned long tan ascii dizi üretir.

Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

computerboy

#52
Aydınlatıcı bilgin için teşekkür ederim üstad. hocam bu kod çok uzun uzadıya gidiyor. nasıl bir fonsksiyon ile sadeleştiririm bu kodları. bunun gibi 5 tane daha kod ekleyiince up uzun oluıyor :)

char x_kor[8];char x_buf[11];unsigned long x_long;int xi;int xxi;

void main(void){
glcd_ClearScreen();

for(xi=0;xi<8;xi++)
{x_kor[xi]=veri.paket.x_step.byte[xi];}
x_long = atol(x_kor);
//sprintf(x_buf,(const far rom char*)"X: %lu",x_long);
ultoa(x_long, x_buf); 
glcd_SetPos(0,7);
xxi=0;
while(x_buf[xxi]!=0)
{glcd_PutChar(x_buf[xxi++]);}
delay_100us(1);
UsbVeriGonder((rom char*)"OK!");
}