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

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

f628

öncelikle merhaba arkadaşlar;

eğer değişkenimi char olarak tanımlar ve içine  tek harflik bir değer atarsam sıkıntı çıkmıyor, lcd'e yazabiliyorum lakin değişkenim 2 harf ve üstü olursa sorun çıkıyor, char tanımlasam kabul etmiyor, string zaten tanımlayamıyorum, ne yapacağımı bilemedim.

tavsiyesi olan birisi olur diye danışayım dedim.

tacettin

yazdığın programı eklersen yardım edecek çok hocam olacağına inanıyorum...

f628

****

#include <16F628A.h>

#FUSES XT,NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD                   

#use delay(clock=4000000)

#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd.c>

char z='b';

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
    set_tris_b(0x00);
    lcd_init();
   
    basla:
   
      lcd_send_byte(0,0x0d);
      lcd_gotoxy(1,10);
      printf(lcd_putc,"\f %c ",z);
      delay_ms(200);
   
    goto basla;
}

****

bu program çalışıyor, lcd ekran da 'b' harfini görüyorum lakin z değişkenine herhangi bir kelime yazarsam program derlenmiyor.

AsHeS

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.

arm-beginner

CCS C bilgim dışında. Ama bu compiler birazcık standartlara uyuyorsa, senin printf biraz garip geldi bana.
Şuraya bir göz atarsan:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Onun dışında C'de goto komutu no-go! olarak sayılır. Hele hele bir döngü oluşturmak için kullanırsan, adamı döverler :)

while(1)
{ 
   bla bla;
   bla bla;
}



f628

tamamdır arkadaşlar, teşekkür ederim her iki cevap için de...

AsHeS

#6
Alıntı yapılan: arm-beginner - 20 Ağustos 2012, 23:13:55
CCS C bilgim dışında. Ama bu compiler birazcık standartlara uyuyorsa, senin printf biraz garip geldi bana.
Şuraya bir göz atarsan:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Onun dışında C'de goto komutu no-go! olarak sayılır. Hele hele bir döngü oluşturmak için kullanırsan, adamı döverler :)

while(1)
{ 
   bla bla;
   bla bla;
}

lcd_gotoxy   fonksiyonu ccs c nin lcd imleci için özelleştirdiği bir fonksiyon ccs c  de ki printf fonksiyonu standart kütüphaneden azcık farklı onu da lcd ye göre özelleştirmiş ccs c yi yazan elemanlar zaten forumda hi-tech ve c18 e geçişin başlıca sebepleri bunlar bu dil standartların dışına kaçabiliyor bazen.Altta ki goto ifadesi de arkadaş Asm den geçmiştir büyük ihtimal alışana kadar devam etsin bence öyle ne dersiniz ?

atomx

Alıntı yapılan: f628 - 20 Ağustos 2012, 22:16:25
****

#include <16F628A.h>

#FUSES XT,NOWDT,INTRC_IO,NOPUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD                    

#use delay(clock=4000000)

#use fast_io(b)
#define use_portb_lcd TRUE
#include <lcd.c>

char z='b';

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
    set_tris_b(0x00);
    lcd_init();
    
    basla:
    
      lcd_send_byte(0,0x0d);
      lcd_gotoxy(1,10);
      printf(lcd_putc,"\f %c ",z);
      delay_ms(200);
    
    goto basla;
}


****

bu program çalışıyor, lcd ekran da 'b' harfini görüyorum lakin z değişkenine herhangi bir kelime yazarsam program derlenmiyor.

sanırım söyle bi sorun var.

char z; ' tanımladıktan sonra

void main()
{
z="abc";
}


olmalı
Hüseyin TECER

f628

#8
Alıntı yapılan: atomx - 21 Ağustos 2012, 16:59:44
sanırım söyle bi sorun var.

char z; ' tanımladıktan sonra

void main()
{
z="abc";
}


olmalı

evet sorun buydu ve arkadaşların yardımıyla hallettim sorunu lakin şimdi de başka bir sorun açığa çıktı, tanımladığım değişkeni ekrana yazdıramıyorum. örneğin;


z="abc";

   while(1)
{
for(x=0;x<3;x++){
printf(lcd_putc,"\%c",z);}
}
}

yazınca karşıma çıkan ekranda doğal olarak 'abc' harflerini değil bütün ekranı kaplayan a harflerini görüyorum, yan harfe nasıl geçeceğimi bilemiyorum.

arm-beginner

Sende gitmişin C'nin en zor konularından birisine takılmışın: pointer işi. :)
Bence ilkönce şunları bir dene, sonra devam ederiz: (while döngeyi şu an kaldır.)

z="abc";  // eminmisin? Bence z[] = "abc" olmasi laizm, ama dedigim gibi CCS 'yi tanimiyorum
printf(lcd_putc,"\%c",z[0]);
printf(lcd_putc,"\%c",z[1]);
printf(lcd_putc,"\%c",z[2]);


arslan74

Merhaba,

CCS kullaniyorum. Ama C dilieyle bazı yanlış bilgiler var onları acıklayayım.

char z='b'; Bir byte bilgi tanımlamış sın.

'b' yerine bir sayı belirte bilirdin, bir fark olmazdı. Ancak z değişkene z="abc" şeklinde bir atama yapamazsın. Cünkü "abc" nin  türü char * dır. yani bir pointerdir. senin tanımladığın z nin türü ise char değişken dir. Eğer yazı saklamak istiyorsanız, o zaman söyle yazmalısınız.

char * z="b"; // burda string yanı yazı tanımlamışsın.

şeklinde olursa o zaman tamamen farklı bir tür olur. Onuda çok rahat ekrana basabilirsin.

O zaman şöyle yazabilirsin.

printf(lcd_putc,"\f %s ",z); // s parametresi string için kullanılıyor.

Selamlar


arm-beginner

PIC konusunda tamamen bilgisiz olduğum için soruyorum: C89 veya C99 standardına uygun bir compiler yokmu PIC dünyasında?

arslan74

Alıntı yapılan: arm-beginner - 21 Ağustos 2012, 20:20:23
PIC konusunda tamamen bilgisiz olduğum için soruyorum: C89 veya C99 standardına uygun bir compiler yokmu PIC dünyasında?

Olmaz olur mu, elbette var.
Örneğin: Microchip'in kendi derleyicileri öyledir.
Veya IAR derleyicisi zaten ANSI-C derleyicisidir.

Hatta Microchip pic32 için kullandığı derleyicisinin ana cekirdeği, gcc den alınmadır.

arm-beginner

Hmmm, peki o zaman neden bu biraz standart dışı olan compiler'ı kullanıyorsunuz?

arslan74

#14
Alıntı yapılan: arm-beginner - 21 Ağustos 2012, 21:18:38
Hmmm, peki o zaman neden bu biraz standart dışı olan compiler'ı kullanıyorsunuz?

Alıntı yapılan: arslan74Merhaba,

CCS kullaniyorum. Ama C dilieyle bazı yanlış bilgiler var onları acıklayayım.

mesaj birleştirme:: 21 Ağustos 2012, 22:31:28

Merhaba,
Alıntı Yap
CCS kullaniyorum. Ama C dilieyle bazı yanlış bilgiler var onları acıklayayım.

Acele yazmadan bazı imla hatası yapmışım.
Düzeltilmiş hali.
Alıntı Yap
CCS kullanmıyorum. Ama C diliyle bazı yanlış bilgiler var onları acıklayayım.

Selamlar