PIC16F877A ile buton kullanımı

Başlatan burakelectronics, 10 Mayıs 2020, 02:40:01

m.ak

Alıntı YapYukardaki satırlar aynı olduğu için çalışmayacaktır.
Proğramı Compile edip Proteusta çalıştırdıktan sonra yükledim..Aynı komutu iki kere veya birkaç kere tekrarlamanın ne mahsuru var açıklarmısınız.Buton basışlarda gecikme yapılsa daha iyi çalışır.İyileştirilmiş halinide yükledim.Sizin yazdığınız kod ( İf (input(pin_d0)==1)) düzeltmeme rağmen çalışmadı.
#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP 

#use delay(crystal=4000000)
//#use fast_io(b)
//#use fast_io(d)

void main()
{
set_tris_b(0x00);
set_tris_d(0xff);
output_b(0x00);
//output_d(0b0000000);

while(TRUE)
{

if (input(pin_d0))  delay_ms(5);     
while(input(pin_d0))
{
output_b(0b00111010);
}
if (input(pin_d0))  delay_ms(5); 
while(input(pin_d0))
{
output_b(0b11000101);
}
}
} //Main son

RaMu

Alıntı yapılan: fide - 11 Mayıs 2020, 09:08:07...
@RaMu'dan biraz farklı
Bu tondan elini çekince değil, bir daha basınca ledler değişir.
....
Verdiğim örnek butona her basıldığında sıradaki duruma geçer.
Butona basılı tutulursa 50ms de bir butona basılmış gibi davranır.
Buda önlenebilir if(buton) un içine bir while(buton); eklemek lazım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

m.ak

Alıntı yapılan: burakelectronics - 10 Mayıs 2020, 02:40:01PIC16F877A ile Proteus'da bir uygulama yapacağım yardımcı olursanız sevinirim.
Bir buton ile 8 tane ledi, butona her bastığımda farklı ledler yanacak şekilde ayarlamak istiyorum.
Örneğin; butona ilk bastığımda 3,5,6,7. ledler yanacak. Tekrar bastığımda 1,2,5,6,7. ledler yanacak.
Sorunu çözebildinizmi?
Benim yüklediğim kodların tesadüfi çalıştığını gördüm.Diğer kodlarda sizin ihtiyacınızı görmüyor tahminim.
Yeni bir kod yüklüyorum,her butona basışta bir kod bloğu işleniyor ve butona uzun veya kısa basmak farketmiyor.Bunu proteusta C0 ve C1  portlarına birer conter bağlayarak test ettim.Gerçek devrede denemedim.Siz denerseniz ve sonucu yazarsanız sevinirim.
#include <16F877.h>
//#device ADC=10
#FUSES XT,NOWDT,PUT,NOLVP

#use delay(crystal=4000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)

void main()
{
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0xff);
output_b(0x00);
output_c(0x00);


while(TRUE)
{
while(input(pin_d0));
//delay_ms(20);
while(!input(pin_d0));
   { // 1.Blok
//   output_high(pin_c0);
   output_b(0b00111010);
//   output_low(pin_c0);

   }
while(input(pin_d0));
//delay_ms(20);
while(!input(pin_d0));
   { //2.Blok
//   output_high(pin_c1);
   output_b(0b11000101);
//   output_low(pin_c1);
   }
} 
} //Main son

burakelectronics

arkadaşlar herkese ilginiz için teşekkür ederim cevaplayamadım meşguldüm lakin verdiğiniz kodlar kısmi şekilde çalışıyor ve buton ark yapıyor simulasyonda çalışabilir kodlar kartta çalışmadı. ama en efektif çalışan kodu ürettik şimdilik sorun yok gibi bir arkadaşın bahsettiği gibi tesadüfi rastgele sayılar üretmediğinden emin olmaya calısıyorum bekleyerek. yeni kodumuz:

#use fast_io(b)
#use fast_io(d)

#define buton pin_d0

int a=116;

void main()
{

set_tris_d(0x01);
set_tris_b(0x00);
output_b(0x00);

   while(TRUE)
   {
      if(input(buton)) {
     
      output_b(a);
      a=a-1;
     
      while (input(buton));
     
      if(a==255) {
      a=116;
      }
     
      }
   }

}