buton 1 2 3

Başlatan hasankomur, 24 Haziran 2012, 16:35:33

hasankomur

Sa arkadaşlar;
Programın yapması gereken:
İlk önce devre çalıştığında yeşil led yanacak. 1. butona basıldığında 1. led 2.butona basıldığında 2. led, 3. butona basıldığında 3. led yanacak ve ayrıca butonlara basıldığında yeşil led sönecek.
Benim yazdığım kod ;

#include <16f84a.h>
#use delay(clock=4000000)
#fuses xt,noprotect,noput,nowdt
#use fast_io(a)
#use fast_io(b)

void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   
   set_tris_a(0x03);
   set_tris_b(0x00);
   output_b(0);
   while(1){
   output_high(pin_b3);
   if(input(pin_a0))
   {
   delay_ms(100);
   output_high(pin_b0);
   output_low(pin_b3);
   }
   else if(input(pin_a1))
   {
   delay_ms(100);
   output_high(pin_b1);
   output_low(pin_b3);
   }
   else if(input(pin_a2))
   {
   delay_ms(100);
   output_high(pin_b2);
   output_low(pin_b3);
   }
  else
  output_high(pin_b3);
   }
}
Bu yazdığım kodla program şöyle çalışıyor butona basılmadığnda 3. led sürekli yanıp sönüyor. 1. butona basılsığında 1. led yanıyor 3. led sönüyor, 2. butona 2. led yanıyor 3. led sönüyor, yeşil led hiç yanmıyor .

a0=1. buton      b0=1. led
a1=2. buton      b1=2. led
a2=3. buton      b2=3. led
b3' de yeşil olan led

Cemre.

#1
Öncelikle timer0 felan ayarlamıssın kullanmadığın bir şeyi ayarlama nedenin nedir? İstersen yeni proje oluştururken CCS C kullanıyorsun sanırım, Proje wizard bölümünü biraz kurcala öğrenmeye çalış başlangıç için iyidir, yani ben öyle yapıyorum :)

Bir de devre şemasını resim olarak yüklerseniz daha hızlı yardım alacağınızı düşünüyorum :) Teşekkürler :)

Cemre.

#2
Birde şu şekilde deneyebilir misiniz?  :-[

Ancak kendinize göre yeniden yazmanızı yani tabiri caizse temize çekmenizi tavsiye ederim, yazmaktan kaçmayın lütfen :)

#include <16f84a.h>
#use delay(clock=4000000)
#FUSES NOWDT                    //No Watch Dog Tim
#FUSES NOPUT                    //No Power Up Timer

#use fast_io(a)
#use fast_io(b)

void main()
{
   set_tris_b(0x00);
   output_b(0x00);
   set_tris_a(0x03);
   output_high(pin_b3);
   while(1){   
   if(input(pin_a0))
   {
   delay_ms(100);
   output_high(pin_b0);
   output_low(pin_b3);
   if(!input(pin_a0))
   {
   delay_ms(100);
   output_low(pin_b0);
   output_high(pin_b3);
   }
   }
   
   if(input(pin_a1))
   {
   delay_ms(100);
   output_high(pin_b1);
   output_low(pin_b3);
   if(!input(pin_a1))
   {
   delay_ms(100);
   output_low(pin_b1);
   output_high(pin_b3);
   }
   }
   
   
   if(input(pin_a2))
   {
   delay_ms(100);
   output_high(pin_b2);
   output_low(pin_b3);
   if(!input(pin_a2))
   {
   delay_ms(100);
   output_low(pin_b2);
   output_high(pin_b3);
   }
   }
   
   
   if(!input(pin_a0)&&!input(pin_a1)&&!input(pin_a2)){
   output_high(pin_b3);
   }
   }
}

ziyaretci

#3
#include <16f84a.h>
#use delay(clock=4M)
#fuses XT,NOWDT

#define buton_1 pin_b0   // buton_1 değişkeni pin_b0 a atandı.
#define buton_2 pin_b1   // buton_2 değişkeni pin_b1 e atandı.
#define buton_3 pin_b2   // buton_3 değişkeni pin_b2 ye atandı.


Void main()
{

  for( ; ; )

   output_high(pin_b3);  // yesil led
   
    if(input(buton_1)){output_low(pin_b3); output_a(0x01); // buton_1 lojik 1 ise pin_a0 lojik 1 yap,
     while(input(buton_1)); output_high(pin_b3);}                 // buton_1 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_1 lojik 0 ise pin_b3 lojik 1
                   
    if(input(buton_2)){output_low(pin_b3); output_a(0x02); // buton_2 lojik 1 ise pin_a1 lojik 1 yap,
      while(input(buton_2)); output_high(pin_b3);}                // buton_2 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_2 lojik 0 ise pin_b3 lojik 1
                   
    if(input(buton_3)){output_low(pin_b3); output_a(0x04); // buton_3 lojik 1 ise pin_a2 lojik 1 yap,
      while(input(buton_3)); output_high(pin_b3);}                // buton_3 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_3 lojik 0 ise pin_b3 lojik 1
                 
    }  // Sonsuz döngü sonu
}  // Ana program sonu

// pin_a0 > led 1
// pin_a1 > led 2
// pin_a2 > led 3





justice_for_all

#4
while(1)
   {
         a=input_a()&0x07;
         if(a==0x00)
            output_high(pin_b3);
         else
         {
              portb=a&0x07;
          }
  
   }
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

hasankomur

Alıntı yapılan: erkantr67 - 25 Haziran 2012, 01:35:38
#include <16f84a.h>
#use delay(clock=4M)
#fuses XT,NOWDT

#define buton_1 pin_b0   // buton_1 değişkeni pin_b0 a atandı.
#define buton_2 pin_b1   // buton_2 değişkeni pin_b1 e atandı.
#define buton_3 pin_b2   // buton_3 değişkeni pin_b2 ye atandı.


Void main()
{

  for( ; ; )

   output_high(pin_b3);  // yesil led
   
    if(input(buton_1)){output_low(pin_b3); output_a(0x01); // buton_1 lojik 1 ise pin_a0 lojik 1 yap,
     while(input(buton_1)); output_high(pin_b3);}                 // buton_1 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_1 lojik 0 ise pin_b3 lojik 1
                   
    if(input(buton_2)){output_low(pin_b3); output_a(0x02); // buton_2 lojik 1 ise pin_a1 lojik 1 yap,
      while(input(buton_2)); output_high(pin_b3);}                // buton_2 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_2 lojik 0 ise pin_b3 lojik 1
                   
    if(input(buton_3)){output_low(pin_b3); output_a(0x04); // buton_3 lojik 1 ise pin_a2 lojik 1 yap,
      while(input(buton_3)); output_high(pin_b3);}                // buton_3 lojik 1 olduğu müddetçe pin_b3 lojik 0, 
                                                                                              // buton_3 lojik 0 ise pin_b3 lojik 1
                 
    }  // Sonsuz döngü sonu
}  // Ana program sonu

// pin_a0 > led 1
// pin_a1 > led 2
// pin_a2 > led 3

bu programı yazdım ama çalışmadı

kudretuzuner

Merhaba
asm olarak yazdım belki işinize yarar.PORTA'ların hepsi giriş PORTB'lerin hepsi çıkıştır.Linkte de isis dosyalarını bulacaksınız.Kolay gelsin.
http://www.dosyasitesi.com/download.php?file=55fdd69bfa5c362fef504092d1b74062

LIST P=16F84
INCLUDE "P16F84.INC"
BSF STATUS,5;BANKSEL TRISA
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
BCF STATUS,5
CLRF PORTA
CLRF PORTB
BSF PORTB,0
BASLA
TEST1
BTFSC PORTA,0
GOTO TEST2
BCF PORTB,0
BCF PORTB,2
BCF PORTB,3
BSF PORTB,1
TEST2
BTFSC PORTA,1
GOTO TEST3
BCF PORTB,0
BCF PORTB,1
BCF PORTB,3
BSF PORTB,2
TEST3
BTFSC PORTA,2
GOTO BASLA
BCF PORTB,0
BCF PORTB,1
BCF PORTB,2
BSF PORTB,3
GOTO BASLA
END
Amatör

vitruvius

Merhaba, elimden geldiğince basit ve anlaşılır bir program yazdım. Program çalışınca yeşil led yanıyor, sonra herhangi bir butona bastığınızda sönüyor ve o butonun ledi yanıyor. Yalnız ayrı bir durum belirtmediğiniz için yeşil led sadece program yüklendikten herhangi bir butona basılana kadar yanıyor, bir daha yanmıyor. İsteğinize göre düzenlersiniz.

Butonlar b1,b2,b3'te led karşılıkları da a1,a2,a3'te. Yeşil led de a0'da.

Kolay gelsin.

#include <16f84a.h>
#use delay(clock=4000000)
#fuses xt,noprotect,noput,nowdt
#use fast_io(a)
#use fast_io(b)

void main ( )
{

set_tris_a(0x00); // A portu çıkış olarak ayarlandı.
set_tris_b(0x0F); // B portunun ilk 4 biti giriş olarak ayarlandı.

output_b(0x00); // Çıkışlar
output_a(0x00); // Sıfırlandı.

output_high(pin_a0); // Program çalışınca yeşil led yanıyor.

   while(1)
   {     
      if(input(pin_b1)) // 1. Butona basılma durumu
      {delay_ms(15); // Buton arkı için 15ms gecikme
      output_low(pin_a0); // Geri kalan
      output_low(pin_a2); // Ledlerin sönmesi
      output_low(pin_a3); // İçin
      output_high(pin_a1);} // 1. Led Yandı
      if(input(pin_b2)) // 2. Buton
      {delay_ms(15);
      output_low(pin_a0);
      output_low(pin_a1);
      output_low(pin_a3);
      output_high(pin_a2);} // 2. Led
      if(input(pin_b3)) // 3. Buton
      {delay_ms(15);
      output_low(pin_a0);
      output_low(pin_a1);
      output_low(pin_a2);
      output_high(pin_a3);} // 3. Led
   }
}
     

hasankomur

Alıntı yapılan: vitruvius - 26 Haziran 2012, 17:54:37
Merhaba, elimden geldiğince basit ve anlaşılır bir program yazdım. Program çalışınca yeşil led yanıyor, sonra herhangi bir butona bastığınızda sönüyor ve o butonun ledi yanıyor. Yalnız ayrı bir durum belirtmediğiniz için yeşil led sadece program yüklendikten herhangi bir butona basılana kadar yanıyor, bir daha yanmıyor. İsteğinize göre düzenlersiniz.

Butonlar b1,b2,b3'te led karşılıkları da a1,a2,a3'te. Yeşil led de a0'da.

Kolay gelsin.

#include <16f84a.h>
#use delay(clock=4000000)
#fuses xt,noprotect,noput,nowdt
#use fast_io(a)
#use fast_io(b)

void main ( )
{

set_tris_a(0x00); // A portu çıkış olarak ayarlandı.
set_tris_b(0x0F); // B portunun ilk 4 biti giriş olarak ayarlandı.

output_b(0x00); // Çıkışlar
output_a(0x00); // Sıfırlandı.

output_high(pin_a0); // Program çalışınca yeşil led yanıyor.

   while(1)
   {     
      if(input(pin_b1)) // 1. Butona basılma durumu
      {delay_ms(15); // Buton arkı için 15ms gecikme
      output_low(pin_a0); // Geri kalan
      output_low(pin_a2); // Ledlerin sönmesi
      output_low(pin_a3); // İçin
      output_high(pin_a1);} // 1. Led Yandı
      if(input(pin_b2)) // 2. Buton
      {delay_ms(15);
      output_low(pin_a0);
      output_low(pin_a1);
      output_low(pin_a3);
      output_high(pin_a2);} // 2. Led
      if(input(pin_b3)) // 3. Buton
      {delay_ms(15);
      output_low(pin_a0);
      output_low(pin_a1);
      output_low(pin_a2);
      output_high(pin_a3);} // 3. Led
   }
}
     


gayet iyi program benim yapmak istediğim butondan elimizi çektiğimizde yeşil led tekrar yanacak :)

vitruvius

Gerekli eki kendiniz yapmaya çalışın. Yapamazsanız söyleyin yardım edelim.