yarışma butonu hata

Başlatan tauf1, 10 Nisan 2014, 15:07:20

tauf1

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);}
 
}
}}

xoom

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;}
           }

sadogan

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.

tauf1

#3
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

respected

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.

Recep METE

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.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Gökhan BEKEN

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ı.
Özel mesaj okumuyorum, lütfen göndermeyin.