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