CCS C ile komütatör ile ilgili bir soru

sasen1

Paylaşımcı üye
Katılım
19 Haz 2008
Mesajlar
1,094
Puanları
106
Merhaba pic 16F877A kullanarak 4x3 komütatör (Rotary Switch) ile LCD ye her kademesinde bir yazı yazdırmak istiyorum.Programlamayı buton ile yapığımda her basmada bir yazı çıkıyor.Ama komütatör anahtar gibi çalıştığı için olmuyor.Komütatör için nasıl bir tanıtma yapmalıyım?
 
Yazılması gereken yazı kaç adet?

Komütatorün her kademesinde bir yazı yazacak. Yani 1. Kademe CD player,2. Kademe Tuner,3. Kademe Phone, 4. Kademe AUX

komütatörü hangi kademeye getirirsem ekanda ilgili girişin adı çıkacak.Buton ile yaptığım zaman oluyor.Çünkü butona basıp bırakıyoruz.Komütatör anahtar olarak çalışıtığı için basılı kalıyor. Sürekli ark oluşuyor.İşin içinden çıkamadım.Nasıl bir yol izlemeliyim
 
Rotary encoder kullan bence
 
Komütatorün her kademesinde bir yazı yazacak. Yani 1. Kademe CD player,2. Kademe Tuner,3. Kademe Phone, 4. Kademe AUX

komütatörü hangi kademeye getirirsem ekanda ilgili girişin adı çıkacak.Buton ile yaptığım zaman oluyor.Çünkü butona basıp bırakıyoruz.Komütatör anahtar olarak çalışıtığı için basılı kalıyor. Sürekli ark oluşuyor.İşin içinden çıkamadım.Nasıl bir yol izlemeliyim
Şimdi Buton da ki döngüyü kitleme özeliğini devreden çıkarın yani değişimi algıladıgında bir defa işlem yapsın ve ilgili girişi okumayı bıraksın break komutu ile döngüyü kırabilirsiniz yada her okumaya bir degişken sınayıp bir defa girip degişiklik oldunda tekrar girer
İf(buton1==1 && buton1_degisim==0)
{ buton1_degisim=1;
.
.
.
}
else
buton1_degisim=0;
Gibi yada

İf(buton1==1)
{
.
.
.
break;
}
 
pinlerdeki değişimi birdeğişkende topla

int port_oku=0;
void main()
{
while(1)
{
……...………………………………...……….
switch(port_oku)
{
case 0: ................... break;
case 1: ................... break;
case 2: ................... break;
case 3: ................... break;
}
……...………………………………...……….
……...………………………………...……….

}

}
 
Arkadaşlar ben şu şekilde yapabildim.Ancak belli saniyelerde LCD deki yazı yenileme yaptığı için yazıda bir kırpışma oluşuyor.Bunu nasıl düzeltebilirim.Bu şekilde de sorun yaşamadan kullanabilir miyim?Bir kontrol edebilir misiniz?

Kod:
#include <16f877A.h>
#fuses HS
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(d)
#include <lcd.c>
#define anahtar  pin_a0
#define anahtar1 pin_a1
#define anahtar2 pin_a2
#define anahtar3 pin_a3

int i=0;

void main()
{
 
 set_tris_a(0b00001111);
 set_tris_d(0b00000000);
 output_d(0x00);

 lcd_init();
 
   while(1)
   {

     if(input(anahtar)==1)
    
     {

      printf(lcd_putc,"\f    CD PLAYER ");
      delay_ms(250);

     }
  
     if(input(anahtar1)==1)
     {
    
      printf(lcd_putc,"\f      AUX  ");
      delay_ms(250);   
      
    
     }
      
    if(input(anahtar2)==1)
     {
        
        printf(lcd_putc,"\f  TAPE PLAYER");
        delay_ms(250);
    
     }
    
    if(input(anahtar3)==1)
    
     {
      
         printf(lcd_putc,"\f     PHONE ");
         delay_ms(250);

     }
      
     }
          
   }
 

Ekli dosyalar

  • selector.jpg
    selector.jpg
    81 KB · Görüntüleme: 6
S.A.
printf(lcd_putc,"\f AUX "); Burada ilk önce siliyorsun ("\f") sonra LCD ye yazı basıyorsun bu komut herseferinde tekrarlanıyor kırpışma yüzden.
 

Yeni mesajlar

Forum istatistikleri

Konular
127,964
Mesajlar
913,943
Kullanıcılar
449,611
Son üye
ramazansanli@

Yeni konular

Geri
Üst