Ledleri kaydırma

Başlatan bytex, 12 Ekim 2013, 16:14:39

bytex

Merhabalar, ccs c ile yeni çalışmaya başladım, basit bir led devresi yaptım, portlardaki pinleri karışık kullandığım için pinlere isim verdim. Bit kaydırma işlemi yapmak istiyorum ama benim pinlerim karışık olduğu için yapamıyorum kodlarımı aşağıya veriyorum, bu şekilde kaydırma işlemini nasıl yapabilirim ? LDA dan LDM e kadar kaydırıp LDM ye gelince tekrar LDA ya doğru kaydırma işlemi yapmak istiyorum yani karaşimşek, bu konuda bana yol gösterebilirmisiniz ?

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES LP                       //Low power osc < 200 khz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#fuses INTRC_IO, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)

#bit LEDA   =0x05.1
#bit LEDB   =0x05.7
#bit LEDC   =0x05.6
#bit LEDD   =0x06.6
#bit LEDE   =0x06.5
#bit LEDF   =0x06.4
#bit LEDG   =0x06.7
#bit LEDH   =0x05.0
#bit LEDJ   =0x06.0
#bit LEDK   =0x06.3
#bit LEDL   =0x05.3
#bit LEDM   =0x05.2


void main()
{

setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   
   
anim1:
   output_a(0x00);
   output_b(0x00);

LEDA=1;LEDB=1;LEDC=1;LEDD=1;LEDE=1;LEDF=1;LEDG=1;LEDH=1;LEDJ=1;LEDK=1;LEDL=1;LEDM=1;
delay_ms(1000);
LEDA=0;LEDB=0;LEDC=0;LEDD=0;LEDE=0;LEDF=0;LEDG=0;LEDH=0;LEDJ=0;LEDK=0;LEDL=0;LEDM=0;
delay_ms(1000);

goto Anim1;

}

tyildizak

16 bit bir değişken tanımla, başlangıç değerini 0x01 olsun.
Ledleri bu değişkenin bitlerinin durumuna göre yakıp söndürecek bir fonksiyon yaz.
Yani 0. biti 1  ise leda'yı yak, değilse söndür, 1. biti 1 ise ledb'yi yak, değilse söndür.... şeklinde
Sonra, bir döngü içinde ledleri güncelle(ilk yazdığın fonk. ile) , değişkeni sola kaydır, güncelle, sola kaydır(11 kez)
Ardından  tam tersini yap, yani bu sefer 11 kez ledleri güncelle - sağa kaydır..

bytex

Cevabınız için teşekkür ederim, başlangıç seviyesinde olduğum için dediğinizi tam olarak anlıyamıyorum, örnek yapılmış programlar varmıdır ? inceleyebilmem için

Bayramsumbul

Öncelikle Merhaba ve Kolay Gelsin.Cevap Arıyorum Ama Galiba Yapılar ve Birlikler ile Yapılabilir Gibi.
Bir Elektronik Meraklısının Serüveni...

bytex

 :( Gerçekten dediklerinizi anlıyamıyorum örnekler vererek göstermeniz mümkünmüdür ? Belki sizin için gerçekten basittir ama ben başlangıç seviyesinde olduğum için örneklerle daha iyi anlıyabilirim....teşekkürler

Bayramsumbul

Dediğim gibi aksini söyleyen yok ise,"Yapılar ve Birlikler"(Struct & Unions) konusunu araştırabilirsiniz.
Bir Elektronik Meraklısının Serüveni...

Klein

CCS ile çalışmazsa biraz düzenleme yapman gerekebilir.
const char Lookup_x5[]={0x02, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04};
//                                    x5.1  x5.7    x5.6                                       x5.0                      x5.3   x5.2
const char Lookup_x6[]={ 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x80, 0x00, 0x01, 0x04, 0x00, 0x00}; 
//                                                                 x6.6    x6.5   x6.4   x6.7           x6.0    x6.3

char i;
for(i=0; i<12; i++)
{
    output_a(Lookup_x5[i]);
    output_b(Lookup_x6[i]);
  delay_ms(1000);
}
for(i=11; i ; i--)
{
    output_a(Lookup_x5[i]);
    output_b(Lookup_x6[i]);
  delay_ms(1000);
}

bytex

#7
Göstermiş olduğun yol için teşekkür ederim klein usta, alttaki kodları ccs c de yazıp derlediğimde çalışıyor, sadece LEDK çalışmıyor.

const char Lookup_x6[]={ 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x80, 0x00, 0x01, 0x04, 0x00, 0x00};
// x6.6 x6.5 x6.4 x6.7 x6.0 x6.3
Çalışmaması sanırım buradaki Lookup ile alakalı portb6.3 pin ile, lookup içinde 12 değer var ve iki port için 2 lookup yapmışınız, LDK konumuna geldiğinde lookup_x6 da değişiklik yapmamla düzeltemiyorum,biraz daha açıklama yapabilirmisiniz bana
void main()
{

   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   
anim1:
	output_a(0x00);
	output_b(0x00);

const char Lookup_x5[]={0x02, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04};
// x5.1  x5.7 x5.6  x5.0 x5.3 x5.2
const char Lookup_x6[]={ 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x80, 0x00, 0x01, 0x04, 0x00, 0x00}; 
// x6.6 x6.5 x6.4 x6.7 x6.0 x6.3

char i;
for(i=0; i<12; i++)
{
    output_a(Lookup_x5[i]);
    output_b(Lookup_x6[i]);
  delay_ms(1000);
}
for(i=11; i ; i--)
{
    output_a(Lookup_x5[i]);
    output_b(Lookup_x6[i]);
  delay_ms(1000);
}

goto anim1;


mesaj birleştirme:: 13 Ekim 2013, 13:42:28

usta mantığını anladım ve alttaki gibi yaptığımda çalıştı,
const char Lookup_x6[]={0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x80, 0x00, 0x01, 0x08, 0x00, 0x00}; 
//                                        x6.6  x6.5  x6.4  x6.7        x6.0  x6.3


x6.3 e denk gelen 0x04 ü 0x08 yaptığımda düzgün olarak çalıştı...yardımınız için çok teşekkür ederim