7 Bitlik Bilgiye Göre LCD'de Yazdırılacakların Değişmesi?

Başlatan rkinaci, 21 Mayıs 2014, 00:08:37

rkinaci

Takıldım kaldım kafam mı durdu gerçekten yapmak istediğim zor birşey mi? Şimdi 16F877 ile çalışıyorum. C portuna bağladığım 8 adet butonu okuyorum. İlk buton reset farklı bir görevi olacak o yüzden 7 bit dedim. Geri kalan 7 bitin durumuna göre LCD'de yazı yazacağım.
int8 portOku; // Değişkeni oluşturdum
portOku=input_c();//Burada da c portunu okuyup değişkene yazdım.

....   // işte buralara ne gelecek nasıl bir karşılaştırma olacak.
....   // işte buralara ne gelecek nasıl bir karşılaştırma olacak.
....   // işte buralara ne gelecek nasıl bir karşılaştırma olacak.


Yapmak istediğim şu ki;
C portunu okudum ve değer 2 ise ekrana 1. bölge yazacak,
C portunu okudum ve değer 4 ise ekrana 2. bölge yazacak,
C portunu okudum ve değer 6 ise ekrana 1., 2. bölge yazacak,
C portunu okudum ve değer 8 ise ekrana 3. bölge yazacak,
..
..
vs.

yani bir tablo gibi düşünürsem neden olmasın yapmış olurum istediğimi ama bu işin daha kısa yolu yok mudur? Yoksa 128-1 tane yukarıdaki gibi switch case ile olayı çözmüş olurum. Bir akıl verin lütfen daha kısa yolu nedir bu işin?
Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!

sadogan

select case yapısını kullanabilirsin.
         switch (portOku) {

            case 0:
            
             break;

            case 1:
                         
           
               break;
           
            case 2:  
                     break;
               
            case 3:
                          
                     break;               
           case 4:
                    
                    break;    
               
             case 5:
                                                 
             break;                                     

            case 6:
                 
           break;                                   
            case 7:
                
           break;                              
          default:;

          break; }

switch case istemediğini sonradan  gördüm

rkinaci

Hocam eğer bir çözüm yolu bulamazsam mecbur onu kullanacağım ama başka bir yolu var mıdır diye de içim içimi yiyor.
Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!

Klein

char tablo[][] = {
		"mesaj 1"
		"mesaj 2"
		//...
		"mesaj n"
};

char *ptr = &tablo[portc_degeri][0];
yazdır(ptr);

hasankara

kaçıncı bölge ile portc deki sayı arasında bir fonksiyonel bağıntı oluşturulabilir ama bölge sayısı olarak yazdırmak istediğinizin devamını tam olarak kestiremedim. anladığım gibi bir şeyler söyleyeyim.

lcd_goto(1,1);

if(bittest(portOku,1))lcd_yaz("1. ");
if(bittest(portOku,2))lcd_yaz("2. ");
if(bittest(portOku,3))lcd_yaz("3. ");
if(bittest(portOku,4))lcd_yaz("4. ");
if(bittest(portOku,5))lcd_yaz("5. ");
if(bittest(portOku,6))lcd_yaz("6. ");
if(bittest(portOku,7))lcd_yaz("7. ");

if(portOku>>1)lcd_yaz("bolge");
else lcd_yaz("bolge yok");

RaMu

Sadece  7durum var ise
yani aynı anda 2-3 butona basılmayacaksa
yani @hasankara nın dediği gibiyse
sadece 7 durum var
diğer durumlarıda hata gibi düşünebilirsin;
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

rkinaci

Öncelikle cevaplar için teşekkürler.

Alıntı yapılan: RaMu - 21 Mayıs 2014, 22:54:29
Sadece  7durum var ise
yani aynı anda 2-3 butona basılmayacaksa
yani @hasankara nın dediği gibiyse
sadece 7 durum var
diğer durumlarıda hata gibi düşünebilirsin;


Hocam aynı anda butonlara basılma durumu var.

Alıntı yapılan: hasankara - 21 Mayıs 2014, 00:52:24
kaçıncı bölge ile portc deki sayı arasında bir fonksiyonel bağıntı oluşturulabilir ama bölge sayısı olarak yazdırmak istediğinizin devamını tam olarak kestiremedim. anladığım gibi bir şeyler söyleyeyim.

lcd_goto(1,1);

if(bittest(portOku,1))lcd_yaz("1. ");
if(bittest(portOku,2))lcd_yaz("2. ");
if(bittest(portOku,3))lcd_yaz("3. ");
if(bittest(portOku,4))lcd_yaz("4. ");
if(bittest(portOku,5))lcd_yaz("5. ");
if(bittest(portOku,6))lcd_yaz("6. ");
if(bittest(portOku,7))lcd_yaz("7. ");

if(portOku>>1)lcd_yaz("bolge");
else lcd_yaz("bolge yok");

Hocam devre aşağıdaki gibi. İlk buton PortC.0'a bağlı olan reset için kullanacağım buton ondan sonra sırayla giden butonlar her bir bölgeden gelen sinyaller. Yani PortC.1 1. bölge, portC.2 2. bölge vs.. portC.7 7. bölge.



Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!

Murat Mert

S.A.
Hasan Karanın verdiği kodda 1 deb fazla butonda basılsa işlem yapar ama LCD üst üste basar.
mert07

hasankara

ben fikir versin diye gelişi güzel yazmıştım. alttaki haliyle sanırım sıkıntı yaşamazsın.

lcd_goto(1,1);
if(bittest(portOku,1)) lcd_yaz("1. ");
else lcd_yaz("-  ");

lcd_goto(1,4);
if(bittest(portOku,2)) lcd_yaz("2. ");
else lcd_yaz("-  ");

lcd_goto(1,7);
if(bittest(portOku,3)) lcd_yaz("3. ");
else lcd_yaz("-  ");

lcd_goto(1,10);
if(bittest(portOku,4)) lcd_yaz("4. ");
else lcd_yaz("-  ");

lcd_goto(1,13);
if(bittest(portOku,5)) lcd_yaz("5. ");
else lcd_yaz("-  ");

lcd_goto(2,1);
if(bittest(portOku,6)) lcd_yaz("6. ");
else lcd_yaz("-  ");

lcd_goto(2,4);
if(bittest(portOku,7)) lcd_yaz("7. ");
else lcd_yaz("-  ");

lcd_goto(2,7);
if(portOku>>1)lcd_yaz("bolge");
else lcd_yaz("bolge yok");

rkinaci

@hasankara hocam tesekkurler. Gayet anlasilir olmus sanirim calisacaktir sorunsuz eve gidince deneyip sonucunu paylasirim.
Ne kadar bilirsen bil, söylediklerin karşındakinin anladığı kadardır!