Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: tauf1 - 10 Nisan 2014, 15:07:20

Başlık: yarışma butonu hata
Gönderen: tauf1 - 10 Nisan 2014, 15:07:20
arkadaşlar 3 masalık bir yarışma butonu hazırlıyorum her butona bağlı üç farklı led var hangi butona 1. basılırsa mavi 2.basılırsa sarı 3. basılırsa kırmızı yanacak. ancak değişkeni bir artırdığım için aynı butona iki veya üç kez basınca o butonun 3 ledide yanıyor bunu nasıl önleyebilirim

#include        <16f877A.h>
#fuses          XT,NOWDT,NOPROTECT
#use            delay(clock=4000000)

int1 a=0,b=0,c=0;
int x=0;
void main()
{
output_b(0x00);
output_c(0x00);
output_d(0x00);
while(1)
{
a=input(pin_a0);
b=input(pin_a1);
c=input(pin_a2);

if((a==1)|(b==1)|(c==1))
{
delay_ms(100);
x++;
delay_ms(200);
if(x==3)
x=3;

if((x==1)&(a==1))
{
  output_high(pin_b0);delay_ms(20);}
  if((x==1)&(b==1))
{output_high(pin_c0);delay_ms(20);}
  if((x==1)&(c==1))
{output_high(pin_d0);delay_ms(20);}

  if((x==2)&(a==1))
{output_high(pin_b1);delay_ms(20);}
  if((x==2)&(b==1))
{output_high(pin_c1);delay_ms(20);}
  if((x==2)&(c==1))
{output_high(pin_d1);delay_ms(20);}

  if((x==3)&(a==1))
{output_high(pin_b2);delay_ms(20);}
  if((x==3)&(b==1))
{output_high(pin_c2);delay_ms(20);}
  if((x==3)&(c==1))
{output_high(pin_d2);delay_ms(20);}

}
}}
Başlık: Ynt: yarışma butonu hata
Gönderen: xoom - 10 Nisan 2014, 19:46:49
while(1)
          {
         Butons=input_a();
         Butons = Butons & 0x07; 
         if(Butons==1) {output_high(pin_b0); Delay_ms(5000);output_low(pin_b0);} //  5sn yan
         else if(Butons==2) {output_high(pin_b1);Delay_ms(5000);output_low(pin_b1);}
         else if(Butons==4){ output_high(pin_b2);Delay_ms(5000);output_low(pin_b1);}
         else {Butons=0;}
           }
Başlık: Ynt: yarışma butonu hata
Gönderen: sadogan - 10 Nisan 2014, 20:05:55
Butona basılınca neden ilgili led i yakmıyorsun da değişkeni 1 artırıyorsun.
Yanmış led leri nasıl söndürüyorsun.
Senaryonu eksik anlatmışsın bence.
Başlık: Ynt: yarışma butonu hata
Gönderen: tauf1 - 10 Nisan 2014, 20:26:48
cevap vermek için butona herkes basıyor 1. basanın b,c,ve d portlarındaki 0 ıncı bitlerinden birininki yanıyor ikinci basanın 2. biti üçüncü basanın üçüncü biti yanıyor yani birinci basanın cevabı yanlışsa soruya ikinci ve üçüncü basanlarda cevap verebilsin diye her butonun önünde üçer led var.
ledler reset butonuna basmadan sönmüyor

mesaj birleştirme:: 10 Nisan 2014, 20:28:25

değişkeni artırmak yerine değer atadığımda üçüncü butonada basıldığında problem oluyor
Başlık: Ynt: yarışma butonu hata
Gönderen: respected - 10 Nisan 2014, 20:42:43
tauf1 hocam yarın programlama hocanın yanına uğra o sana ayrıntılı olarak anlatır. Hatta uygulama devrende sana gösterir.
Başlık: Ynt: yarışma butonu hata
Gönderen: Recep METE - 16 Nisan 2014, 18:17:44
Alıntı yapılan: tauf1 - 10 Nisan 2014, 15:07:20
arkadaşlar 3 masalık bir yarışma butonu hazırlıyorum her butona bağlı üç farklı led var hangi butona 1. basılırsa mavi 2.basılırsa sarı 3. basılırsa kırmızı yanacak. ancak değişkeni bir artırdığım için aynı butona iki veya üç kez basınca o butonun 3 ledide yanıyor bunu nasıl önleyebilirim

#include        <16f877A.h>
#fuses          XT,NOWDT,NOPROTECT
#use            delay(clock=4000000)

int1 a=0,b=0,c=0;
int x=0;
void main()
{
output_b(0x00);
output_c(0x00);
output_d(0x00);
while(1)
{
a=input(pin_a0);
b=input(pin_a1);
c=input(pin_a2);

if((a==1)|(b==1)|(c==1))
{
delay_ms(100);
x++;
delay_ms(200);
if(x==3)
x=3;

if((x==1)&(a==1))
{
  output_high(pin_b0);delay_ms(20);}
  if((x==1)&(b==1))
{output_high(pin_c0);delay_ms(20);}
  if((x==1)&(c==1))
{output_high(pin_d0);delay_ms(20);}

  if((x==2)&(a==1))
{output_high(pin_b1);delay_ms(20);}
  if((x==2)&(b==1))
{output_high(pin_c1);delay_ms(20);}
  if((x==2)&(c==1))
{output_high(pin_d1);delay_ms(20);}

  if((x==3)&(a==1))
{output_high(pin_b2);delay_ms(20);}
  if((x==3)&(b==1))
{output_high(pin_c2);delay_ms(20);}
  if((x==3)&(c==1))
{output_high(pin_d2);delay_ms(20);}

}
}}

arkadasım bu sorunun çözümünü buldun mu.bende merak ettim. O kadar uğraşmama ragmen bulamadım.
Başlık: Ynt: yarışma butonu hata
Gönderen: Gökhan BEKEN - 16 Nisan 2014, 18:34:38
Neden, A portunu direkt okumadınız da, tek tek okudunuz? Önce A portunu tek bir seferde okuyup, hangisi basılı hangisi değil anlayabilirdiniz.

Bence devrenin bir saati olsun(milisaniye hassaslığında), ve butonları dış kesme ile okuyun. Bir kesme geldiğinde, timer ile hangi zamanda olduğunu anlayın, butonlardan 2 tanesi basılana kadar beklesin, 3. butonun basılmasını beklemeye gerek yok ,zaten iki buton basıldıysa diğeri, sıralamada sonuncu olmuş demektir.
Eğer timer kullanmayı bilmiyorsanız sizin için güzel bir başlangıç olur.

Bir ayrıntı var oluşan pikleri yoketmeniz lazım yoksa aynı butona 2 kere basılmış sanabilir.
Eğer butona bir kere basılırsa(pikler için diyorum) o butona daha sonra basıldığında dikkate almamalı.