lcd ye int deger yazdırma sorunu

Başlatan korcenk, 20 Ekim 2013, 14:44:50

korcenk

arkadaşlar int degeri lcdye nasıl gönderiliyor.
int'i stringe çevirdiğimde ben 1.satır 1.sutuna yaz diyorum. 1.satır 5.sutuna yazıyor.
yardımcı olurmusunuz.

herkese iyi çalışmalar

arslan74


korcenk

%d ile nasıl stringe dönüyor küçük bir örnek verebilirmisin

arslan74

Alıntı yapılan: korcenk - 20 Ekim 2013, 15:34:33
%d ile nasıl stringe dönüyor küçük bir örnek verebilirmisin

Benim sana kod vermem senin sorunu çözmeyecek. Sadece daha fazla soru sormana neden olacak. O yüzden önce sen nasıl string'e çevirdiğini görmemiz gerekiyor ki nerede hata yaptığını söyleyelim.

Kazım

#4
http://www.edaboard.com/thread233538.html -> linkinden alıntı yapılmıştır.

You can display in any order like decimal, hexadecimal or binary.

void lcd_number(unsigned int no, char base, char digit)
{char i,j,di[10];
for(i=0;i<=9;i++) di[i]=0;
i=0;
do{
	di[i]=no%base;
	no=no/base;
	i++;}
while(no!=0);
for(j=digit;j>0;j--){
	if(di[j-1]<=9) lcd_write(di[j-1]+'0');
	else lcd_write(di[j-1]-10+'A');}
}

erpay

Şu şekilde yapabilirsin :


IntToStr(deger,yazi); Ltrim(yazi); Lcd_Out(1,6,yazi);

arslan74

Bu örnek kodu dene

/* Write unsig 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_putch('0');
        return;
    }

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

    do
    {

        temp = val / t;

        if (flag)
            if (temp == 0)
            {
                //	lcd_puts((const far rom char *)"0");
                //	LCD_PutChar(' ');
                sifirlar++;
                continue;
            }
            else
            {
                flag = 0;
                if (flag_minus)
                    LCD_PutChar('-');
            }

        lcd_putch('0' + temp);

        val = val - temp*t;

    }
    while (t /= 10);

    while (sifirlar--)
        LCD_PutChar(' ');

}

/* Write unsig int to LCD */

void lcd_write_int(int val)
{


    int t_val = 0;
    int t_val2 = 0;
    int t = 10000;
    unsigned char flag = 1;
    unsigned char sifirlar = 0;

    if (val == 0)
    {
        lcd_putch('0');
        return;
    }

    if (val < 0)
    {
        val *= -1;
        LCD_PutChar('-');
    }


    do
    {

        t_val = val / t;

        if (flag)
        {
            if (t_val == 0)
            {
                //	lcd_puts((const far rom char *)"0");
                //	LCD_PutChar(' ');
                sifirlar++;
                continue;
            }
            else
            {
                flag = 0;
            }
        }
        lcd_putch('0' + t_val);

        t_val2 = t_val*t;
        val -= t_val2;

    }
    while (t /= 10);

    while (sifirlar--)
        LCD_PutChar(' ');
}

1nsane

Elimizdeki sayı 1234 diyelim

10'dan büyükse ( eşitsede ) ikinci kolona git
100 10 üzeri iki demek. üçüncü kolona git.
10000 10 üzeri 4 demek 5. kolona git.
...

1) Elindeki sayı 1234.
2) 1000'den büyük veya eşit. 10 üzeri 3 dolayısı ile 4. kolona git
3) Elindeki sayının 10'a bölümünden kalan 4. LCD'nin 4. kolonuna char yazar gibi bu sayıyı yazdır. Basit tür dönüşümü. Komple int çeviremezsin.
4) Yazdırdığın rakamı elindeki sayıdan çıkart. 1234 - 4 = 1230. Bu sayıyı 10'a böl = 123. LCD'nin 3. kolonuna gel. 123 sayısının 10 bölümünden kalanı yazdır.
5) Yazdırdığın rakamı elindeki sayıdan çıkart. 120. 10'a böl 12. 10'a bölümünden kalan 2. İkinci kolona yazdır.
6) Bir önceki sayıyı çıkart. 10 kaldı. 10'a böl 1. 10'a bölümünden kalan 1. Ekrana bas.

selimkoc

LCD'lere karakter olarak yazdırılabilir. Bunun için önce int değer karaktere çevrilmeli.
MikroC'de bunu fonksiyonu var;

Şöyle int değerinin max değeri 65535 yani 5 karakter bir karakter de dizi sonu için dolayısı ile 6 elemanlık char dizisi tanımlanır.

char txt[6];


program içinde karaktere çevirmek için ByteToStr(deger, txt); fonksiyonu ile karaktere çevrilir.

yazdırmak için Lcd_Out(1,1,txt); ile 1.satır 1. sütuna yazdırılır.

veya her basamağı karaktere çevirip değere 48 ekleyerek çevirebilirsin.

Kolay gelsin...

arslan74

int ival = 12345;
char name[7];

sprintf (name,"%d", ival);

Lcd_Out(1,6,name);

Kazım

Alıntı yapılan: selimkoc - 21 Ekim 2013, 12:13:57
LCD'lere karakter olarak yazdırılabilir. Bunun için önce int değer karaktere çevrilmeli.


ASCII karakter olarak demek daha doğru olacaktır.

korcenk

arkadaşlar aşağıdaki gibi yapınca sorun düzeliyor.bu seferde değişkenleri unsigned tanımlayıp 65535 yazınca lcd ekranda -1 yazıyor.

unsigned int sayi=65535;
unsigned char txt[6];

void main()
{
     adcon1 |=0x0f;    //an pinleri dijital i/o olarak ayarlandı
     cmcon  |=0x07;    //karşılaştırıcılar pasif edildi

     Lcd_Init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     lcd_cmd(_lcd_clear);
     lcd_out(1,1, "korcenk");
     intToStr(sayi,txt);
     Ltrim(txt);
     lcd_out(2,1,txt);
}


Kazım

#12
İnteger sayıyı, stringe çevirmen işi çok uzatıyor.  boş yere stack  limitini tüketiyorsun ( dallanma yaparak ).

Edit: mesajı arkadaşın tecrube seviyesinin üstünde yazdığımı düşünerek editledim ( kısalttım )

erpay

unsigned int sayi=65535;
unsigned char txt[12];

void main()
{
     adcon1 |=0x0f;    //an pinleri dijital i/o olarak ayarlandı
     cmcon  |=0x07;    //karşılaştırıcılar pasif edildi

     Lcd_Init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     lcd_cmd(_lcd_clear);
     lcd_out(1,1, "korcenk");
     LongToStr(sayi,txt);
     Ltrim(txt);
     lcd_out(2,1,txt);
}


Bu şekilde yaparsan düzelir. Sorun 65535'i çevirmek için LongToStr kullanman lazım ayrıca bu çeviriciyi kullandığın zaman 12 hanelik bir char değişkeni oluşturman gerekiyor.

arslan74

Merhaba,

Ansi-C anlamı Temel C komutları ve fonksiyonlarını tanımlar. Eğer Ansi-C uyumlu kod yazarsanız, bir başka ansi-c derleyicisine geçseniz bile sorun yaşamazsınız. Zira ikisininde ortak arayüzü var.

Şimdi Arkadaşların veriği örnekler de bu kurala dikkat etmemişler. Dolaysıyla kodlar derleyici bağımlı hale gelmiş. Eğer benim verdiğim en son örneği kullanırsanız, kesinlikle böyle bir sorun yaşamazsınız. Bu kodu hem uC hemde PC derleyip çalıştırabilirsiniz.