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
%d ile stringe cevir.
%d ile nasıl stringe dönüyor küçük bir örnek verebilirmisin
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.
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');}
}
Şu şekilde yapabilirsin :
IntToStr(deger,yazi); Ltrim(yazi); Lcd_Out(1,6,yazi);
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(' ');
}
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.
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...
int ival = 12345;
char name[7];
sprintf (name,"%d", ival);
Lcd_Out(1,6,name);
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.
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);
}
İ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 )
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.
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.
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)
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