Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

grafik lcd de değişken yazmak?

Başlatan 707yunus, 05 Ağustos 2008, 17:36:41

707yunus

arkadaşalar grafik lcd de nasıl değişken yazdırılır?

mucitotomasyon

ccs icerindeki  driverler kullanırsan bu şekilde


printf(glc_put"%x",mucit);

707yunus

hocam değişkenin lcd de ki konumunu nasıl belirlerim?

707yunus

bide hata veriyor hangi dosyayı include etmem lazım

bkrtncr

hangi tür glcd kullaniyorsun bilmiyorum ama, standart fontlarda yazmak istediginde ornekleri driver dosyasinda veriliyor..

ama fontun standart değilse(yani glcd icindeki fontu kullanmiyorsan).. butun basamaklardaki sayıları hesaplayıp ekrana tek tek yazdırman gerekiyor...

ASCII kodlarına gore bir algoritma da üretebilirsin fakat bu biraz daha karisik olur...
Bildigini paylaşan, ALİM'dir...

707yunus

128x64 ks0108 kontrollü lcd kullanıyorum.yahu adamlar hiç grafik lcd için değişken fonksiyonu düşünmemişler mi.?
bide hocam bn float türü yazdıracaktım.bunun için kendim algoritma yazsam çok uğraştırır gibime geliyor.sizin verdiğiniz 'printf(glc_put"%x",mucit);' driver dosyasının  hangi klasöründe bulunmaktadır?yada ccs nin neresinde geçmektedir?helpte bulamadım.. elektrotekno.com da biri adc sonucunu yazdırabilmiş.bn üye olmadığım için mahrum kaldım.üye olanlar baksa çok iyi olur.


selamlar...

aliveli

Hantronix HDM64GS12 128x64 grafik lcd için hazır dirver var ccs de bunu kullanmayı dene

707yunus

Alıntı yapılan: "aliveli"Hantronix HDM64GS12 128x64 grafik lcd için hazır dirver var ccs de bunu kullanmayı dene


abi yanlış anladın.bn  nasıl değişken yazdırabilirim diyorum.

707yunus

sevgili forum üyeleri bu konu bnce önemli bir konu özellikle grafik lcd ile uğrasanlar için ve grafik lcd ile proje yapacaklar için. onun için ortak bi çözüm bulalım herkes kullansın.bn araştırma yapıyorum ve üzerinde çalısıyorum bişeyler üretirsen yollayacağım.sizleride davet ediyorum..


saygılarla....

eldirr

Daha önce bununla ilgili hazır bir fonksiyonla karşılaşmadım ama internette bir yerlerde mutlaka vardır.

Ama bu işlemle ilgili fonksiyonları kendimizin oluşturacağını varsayarsak ve float değişkenin de virgülden sonra kaç hane tutulduğu belli ise yapmamız gerekenler aşağı yukarı şunlardır;

(Float değişkende virgülden sonra 2 hane tutuluyor varsayalım)
(Float değişkenin örnek olarak virgülden önce 4 basamağı olduğunu varsayalım, örn : 1234,56)

-Değişkenin 10^2 ile çarpılması (bu noktada değişkende taşma olmamasına dikkat edilmesi lazım)
Değişken: 123456,00

-Değişkenin basamaklarına ayrılması, 48 eklenerek ASCII'ye çevrilmesi ve ekranda istenilen yere basılması.
sayi=degisken; 

 for(i=0;i<7;i++)

      {

         basilacak=(sayi/pow(10,6-i))+48;

         mod = pow(10,6-i);

         sayi=sayi % mod;

         glcd_gotoxy(i,1); //değişken 1. satıra sırasıyla basılıyor
         glcd_putc(basilacak); // veya herhangi bir karakter basma fonksiyonu
      }


Ama bu yöntemin bu haliyle 3 sıkıntısı var;

- Virgülün varsayılan olarak 2 basamak sonra olduğu kabul ediliyor. Çözüm olarak virgülün yerini bulan bir fonksiyon yazılabilir. (Ama aslında zaten float değişkenin hassasiyeti ayarlanıyordur bir yerlerden.)

- Sayının sabit basamak sayısına sahip olduğu kabul edilerek tasarlanmıştır. Çözüm olarak sayının basamak sayısını hesaplayan bir algoritma eklenip 'for' döngüsüne entegre edilebilir.

- Float değişken 10^x gibi bir değerle çarpılması, yazılımda eğer gelebilecek float değerinin çok büyük olması durumunda taşmaya neden olabilir. Bu nedenle bu çarpımı yapmadan basamaklara ayırma işlemi yapılmalıdır. Virgül öncesi ve sonrasını ayrı değişkenlere atacak hazır fonksiyonlar olabilir, yoksa bile bu fonksiyonlar yazılarak sayının çok büyük değerlere ulaşmadan ASCII'ye dönüşmesi sağlanabilir.

Algoritmayı ve kodu şu an kafadan yazdığım için hatalar olabilir ama en ilkel şekilde herhangi bir hazır fonksiyon kullanmadan bu şekilde yapılabilir.

aliveli

al dostum sana örnek
http://rapidshare.com/files/133050289/lcd.zip.html şifre: ccspic.com

içinde grafik ekranla ilgili iki örnek var ilk klasörde ama lcd ks0108 değil

707yunus

char sifir[]={"0"};
char bir[]={"1"};
char iki[]={"2"};
char uc[]={"3"};
char dort[]={"4"};
char bes[]={"5"};
char alti[]={"6"};
char yedi[]={"7"};
char sekiz[]={"8"};
char dokuz[]={"9"};

unsigned int8 gecici=234

void cevir_yaz(unsigned int8 a,unsigned int8 x,unsigned int8 y)
{

switch(a)
{
 case 0:
 glcd_text57(x,y,sifir,1,ON);
 break;

 case 1:
 glcd_text57(x,y,bir,1,ON);
 break;
 
 case 2:
 glcd_text57(x,y,iki,1,ON);
 break;

 case 3:
 glcd_text57(x,y,uc,1,ON);
 break;
 
 case 4:
 glcd_text57(x,y,dort,1,ON);
 break;
 
 case 5:
 glcd_text57(x,y,bes,1,ON);
 break;

 case 6:
 glcd_text57(x,y,alti,1,ON);
 break;

 case 7:
 glcd_text57(x,y,yedi,1,ON);
 break;
 
 case 8:
 glcd_text57(x,y,sekiz,1,ON);
 break;
 
 case 9:
 glcd_text57(x,y,dokuz,1,ON);
 break;
 
}
}


void parcala()
{

dig1=fmod(gecici,10);
gecici=gecici/10;
dig2=fmod(gecici,10);
gecici=gecici/10;
dig3=gecici;
}

void main()
{

parcala();

cevir_yaz(dig3,0,0);
cevir_yaz(dig2,6,0);
cevir_yaz(dig1,12,0);

}


denenmiştir.iyi çalısıyor.fakat her yeni yazdırmada lcd sıfırlanmalı..
tamsayılar için geliştirilmiştir.


designed by 707yunus.


selamlar......

cemilkendir

buda benim tarzımla yazılmış aynı işi yapabilen bir kod parçası

123.4 gibi bir sayıyı yazdırmak için

float ondalikli_degisken=123.4;
char rakamlar[]={'0','1','2','3','4','5','6','7','8','9'};
char sayi_yazi[]="   . ";


void hanelere_ayir(float sayi,char[] yazi){
int16 tam_degisken;
sayi=sayi*10;
tam_degisken=(int)sayi
yazi[4]=rakamlar[tam_sayi%10];
tam_sayi=tam_sayi/10;
yazi[2]=rakamlar[tam_sayi%10];
tam_sayi=tam_sayi/10;
yazi[1]=rakamlar[tam_sayi%10];
tam_sayi=tam_sayi/10;
yazi[0]=rakamlar[tam_sayi%10];
}
void main(){

hanelere_ayir(ondalikli_sayi,sayi_yazi);

glcd_text57(20,30,sayi_yazi,1,on);

}

huskapukaya

ali veli arkadasımızın gönderdiği örneklerden yola cıkarak şunu yazdım:

 while(1)
   {
   
set_adc_channel(6);
delay_us(20);

bilgi=read_adc();
volt=0.0048875855*bilgi;
sprintf(bil,"%f",volt);
      glcd_init(ON);
      glcd_text57(0, 35, bil, 4, ON);   
      
      delay_ms(100);
}


kendi adc m de kullanmak için :P

bende işe yaradı. Bu arada başta math.h var :P
ayrıca char bil[5]  vede float bilgi,volt;   :P
bil[5] çünkü ben 12.34 şeklinde okuma yapıyorum :D