lcd ye sözel değişken yazdırma sorunu

Başlatan f628, 20 Ağustos 2012, 17:35:41

AsHeS

Alıntı yapılan: AsHeS35 - 20 Ağustos 2012, 23:12:37
z değişkenini    char z[]="12345678" diye tanımla printf() fonksiyonunda     
for(i=0;i<8;i++)
printf(lcd_putc,"\f %c ",z);
yap tabi program içerisinde i değişkeninide tanımla.
köşeli parantezlerin içinde ki [ i ] kayboylmuş kod eksik gözüküyor benim yazdığım doğrusu şöyle olacak:
char z[]="12345678" diye tanımla
for(i=0;i<8;i++)
printf(lcd_putc,"\f %c ",z[ i ]);
----------------------------
köşeli parantezler içerisinde ki z[ i ] olacak forumda sanırım bir karaktere denk gelmiş o alıntı yaparak bakarsan göreceksin.

arm-beginner


arslan74

Alıntı yapılan: AsHeS35 - 22 Ağustos 2012, 00:35:58
köşeli parantezlerin içinde ki [ i ] kayboylmuş kod eksik gözüküyor benim yazdığım doğrusu şöyle olacak:
char z[]="12345678" diye tanımla
for(i=0;i<8;i++)
printf(lcd_putc,"\f %c ",z[ i ]);

----------------------------
köşeli parantezler içerisinde ki z[ i ] olacak forumda sanırım bir karaktere denk gelmiş o alıntı yaparak bakarsan göreceksin.

O şekilde yazmak karışık ve zahmetli.
char z[]="12345678";
printf(lcd_putc,"\f %s ",z);


Bu şekilde daha basit, ayrıca yazının uzunluğu değişse bile kendisi bütün yazıyı yazacaktır. Yukardaki koddaki gibi yazının uzunluğuna göre for döngüsünü ayarlamak zorunda kalmassın.

arm-beginner

@arlan74
AsHeS35 isimli üyeyi adım adım pointer konusuna yakınlaştıracatım.
Hep unutuyorum: biz Türkler her zaman kısa ve kolay yolu kullanırız. Zahmetli yol diğerler için tasarlanmıştır ;)



arslan74

Alıntı yapılan: arm-beginner - 22 Ağustos 2012, 13:04:14
@arlan74
AsHeS35 isimli üyeyi adım adım pointer konusuna yakınlaştıracatım.
Hep unutuyorum: biz Türkler her zaman kısa ve kolay yolu kullanırız. Zahmetli yol diğerler için tasarlanmıştır ;)

Sen yine arkadaşımızı pointer konusuna yakınlaştırabilir sin, bu konuda seni engelleyen hiçbir şey yok.

Unutkanlık, dalgınlık ve işin kolayını seçmek bütün insanların genel özelliğidir. Bunu sadece Türklere özgü olarak indirgeme,aksi takdirde çok büyük hata yapmış olursun.

AsHeS

#20
Alıntı yapılan: arm-beginner - 22 Ağustos 2012, 13:04:14
@arlan74
AsHeS35 isimli üyeyi adım adım pointer konusuna yakınlaştıracatım.
Hep unutuyorum: biz Türkler her zaman kısa ve kolay yolu kullanırız. Zahmetli yol diğerler için tasarlanmıştır ;)
Bilginin kötüsü olmaz anlatın hocam dinliyorum.

mesaj birleştirme:: 22 Ağustos 2012, 16:55:57

Alıntı yapılan: arslan74 - 22 Ağustos 2012, 10:49:16
O şekilde yazmak karışık ve zahmetli.
char z[]="12345678";
printf(lcd_putc,"\f %s ",z);


Bu şekilde daha basit, ayrıca yazının uzunluğu değişse bile kendisi bütün yazıyı yazacaktır. Yukardaki koddaki gibi yazının uzunluğuna göre for döngüsünü ayarlamak zorunda kalmassın.
Hocam %s çağırım şekli için "string.h" kütüphanesini dahil edip etmediğimizi hatırlayamadım o yüzden öyle hızlıca karaladım.

arslan74

Merhaba,

%s parametresi printf fonksiyonula ilgili dir. Eğer printf 'i kullanabiliyorsa o zaman %s parametresini de kullanabilir.

<string.h> kütüphanesi string ve memory işlemleri yapmak için gerekli.

Aşağıdaki linke ayrıntılı acıklamış:
http://www.cplusplus.com/reference/clibrary/cstring/


f628

teşşekkürler arkadaşlar, sorun;

char z[]="12345678" diye tanımla
for(i=0;i<16;i++)
printf(lcd_putc,"\%c ",z[ i ]);

şeklinde halloldu.

fatih6761

CCS de char 1 byte'lık değişkendir.16 adet karakter indekslemeye kalkarsanız bellek sorunuyla karşılaşırsınız.PIC te bellek koruma ünitesi olmadığı için Z işaretçisinin belirttiği adresten sonraki 8 byte "12345678" iken, geriye kalan 8 bytelık alanda "â?^1%&3=" gibi bir veride olabilir.En uygun yöntem printf'nın %s parametresini kullanmaktır.
char z[] = "12345678";
printf(lcd_putc, "%s", z);

dir.CCS de bu şekilde çok uygulama yaptım.Hepside gayet güzel çalıştı.En kötü uygulamanızı yapabilirsiniz.Printf nin yaptığı şeyde pointer'dan okunan veri 0x0 olana kadar ekrana( veya LCD'ye) karakter yazdırmaktır.Sondaki '\0' karakterini ( bu 0x0 demektir ) C derleyicileri otomatik yerleştiririr.Assembly dillerinde de kendiniz en sona bir 0 karakteri koyarsınız...

AsHeS

Alıntı yapılan: f628 - 23 Ağustos 2012, 11:47:30
teşşekkürler arkadaşlar, sorun;

char z[]="12345678" diye tanımla
for(i=0;i<16;i++)
printf(lcd_putc,"\%c ",z[ i ]);

şeklinde halloldu.
Bu kullanım çok doğru bir kullanım değil haberiniz olsun string uzunluğunu kafanızda tutmak istemiyorsanız şöyle yapabilirsiniz:
char z[]="12345678"
int uzunluk;
uzunluk=sizeof(z)/sizeof(char);
for(i=0;i<uzunluk;i++)
printf(lcd_putc,"\%c ",z[ i ]);
ya da
char z[]="12345678"
for(i=0;i<100;i++)
{
if(z[ i ] ==\0)
break;
printf(lcd_putc,"\%c ",z[ i ]);
}

şeklinde olabilir lakin 1. kullanım istediğiniz gibidir ikincisi hoş değildir ama en garantisi
char z[]="12345678"
printf(lcd_putc,"\%s",z);
dir

f628

sorun daha önce attığım mesajda ki programla hallolmuştu lakin madem 'o çok güvenilir değil bunları kullan' diyorsunuz, tamamdır onları kullanırım bundan sonra. teşekkürler tekrardan yardımlarınız için.

AsHeS

Alıntı yapılan: f628 - 23 Ağustos 2012, 19:40:12
sorun daha önce attığım mesajda ki programla hallolmuştu lakin madem 'o çok güvenilir değil bunları kullan' diyorsunuz, tamamdır onları kullanırım bundan sonra. teşekkürler tekrardan yardımlarınız için.
Deitel&Deitel C ve C++ diye bir kitabı var ANSI C yi ben dahil çoğu öğrenci o kitaptan sökmüştür size de tavsiye ederim güzel kitaptır sorularını falanda oturun çözün öyle boş beleş sorular yoktur içerisinde kaliteli sorular mevcuttur öneririm hatta o kitaptan sonra CCS yi bırakıp Hi-Tech ya da C18 e geçmenizi öneririm çünkü CCS standartlardan biraz farklı.