Picproje Elektronik Sitesi

DERLEYİCİLER => MikroC - PIC => Konuyu başlatan: korcenk - 20 Ekim 2013, 14:44:50

Başlık: lcd ye int deger yazdırma sorunu
Gönderen: korcenk - 20 Ekim 2013, 14:44:50
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
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: arslan74 - 20 Ekim 2013, 15:19:59
%d ile stringe cevir.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: korcenk - 20 Ekim 2013, 15:34:33
%d ile nasıl stringe dönüyor küçük bir örnek verebilirmisin
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: arslan74 - 20 Ekim 2013, 17:38:54
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.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: Kazım - 20 Ekim 2013, 18:53:36
http://www.edaboard.com/thread233538.html (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');}
}
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: erpay - 20 Ekim 2013, 19:26:31
Şu şekilde yapabilirsin :


IntToStr(deger,yazi); Ltrim(yazi); Lcd_Out(1,6,yazi);
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: arslan74 - 20 Ekim 2013, 21:17:24
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(' ');
}

Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: 1nsane - 21 Ekim 2013, 03:12:32
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.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: selimkoc - 21 Ekim 2013, 12:13:57
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...
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: arslan74 - 21 Ekim 2013, 14:18:12


int ival = 12345;
char name[7];

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

Lcd_Out(1,6,name);


Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: Kazım - 21 Ekim 2013, 15:32:39
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.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: korcenk - 21 Ekim 2013, 23:28:18
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);
}

Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: Kazım - 22 Ekim 2013, 09:02:35
İ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 )
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: erpay - 22 Ekim 2013, 09:56:21
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.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: arslan74 - 22 Ekim 2013, 14:46:45
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.
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: bilsisco - 06 Ağustos 2016, 11:52:11
char yazi[8];
char m=128;

void main()
{
LCD_Init();
LCD_CMD(_LCD_CURSOR_OFF);
LCD_CMD(_LCD_CLEAR);

IntToStr(m, yazi);  // yazi " 128" (bir boşluk).
//m değerini stringe cevir yazi değişkenine at.
//Boşluk için Ltrim() kullanılmalı

LCD_CMD(_LCD_CLEAR);
Lcd_Out(2, 1, yazi);          // 2. satır 1. sıradan LCD'ye yazmaya başla
Delay_ms(1000);
//LCD çıktısı _ _ _ 128 (3 boşluk var)

kaynak:
http://download.mikroe.com/documents/compilers/mikroc/pic/help/conversions_library.htm#inttostr (http://download.mikroe.com/documents/compilers/mikroc/pic/help/conversions_library.htm#inttostr)
Başlık: Ynt: lcd ye int deger yazdırma sorunu
Gönderen: 35Murat35 - 10 Eylül 2016, 23:44:51
Hangi işlemciyi kullanıyosun. 18 serisi ve üstünde sprinx fonksiyonlarını kullanabilirsin.
Döküman burda : http://download.mikroe.com/documents/compilers/mikroc/pic/help/sprint_library.htm