74HC595 Entegresi ile 32 LED Animasyon

32led_74HC595

Bu uygulamada 74HC595 entegresi ile 32 LED kullanarak bir animasyon devresi oluşturacağız. PIC16F628’in PORTB’ye bağlı 4 adet butonla animasyon tipi seçilmekte.

Devreye elektrik verildiğinde bütün ledler software (yazılım) pwm ile yavaş yavaş parlaklığı artacak tam yandıktan sonra yine yavaş yavaş kararmaya başlayacaktır. Animasyon seçimi M butonlarıyla gerçekleştirilmektedir. Ancak seçim yapılır yapılmaz yeni animasyona geçmeyip animasyon bittikten sonra yeni animasyona geçmektedir.

Devre şeması aşağıdadır.

ledAnimasyon_32led

Devrenin animasyonu aşağıdadır.

Proje dosyalarına buradan ulaşabilirsiniz.

#define M0 PORTB.B4
#define M1 PORTB.B5
#define M2 PORTB.B6
#define M3 PORTB.B7
#define SH_CP PORTA.B0
#define DS PORTA.B1
#define ST_CP PORTA.B2

bit YON;
char mod=0, sayi=0;
//---------------------------
void bekle_us(int sure)
{
 int t=0;
 for(t=0;t<sure;t++)
 {
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 }

}
//----------------------------------
void veriYaz595(char veri)
{
char i=0;
 ST_CP=0;
 SH_CP=0;
 DS=0;
 for(i=0;i<8;i++)
 {
 if(veri.B7) DS=1;
 else DS=0;
 SH_CP=1;
 asm{NOP;NOP;NOP;NOP;NOP;}
 SH_CP=0;
 veri<<=1;
 }
// ST_CP=1;
// asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
// ST_CP=0;
}
//-----------------------
void ST_clock()
{
 ST_CP=1;
 asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
 ST_CP=0;
}
//---------Animasyon 0--------
void animasyon_0()
{
 char i=0;
 sayi=1;
 while(mod==0)
 {
 for(i=0;i<255;i++)
 {
 sayi=0xFF;
 veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);
 ST_clock();
 bekle_us(i);

sayi=0;
 veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);
 ST_clock();
 bekle_us(255-i);
 }

 for(i=0;i<255;i++)
 {
 sayi=0;
 veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);
 ST_clock();
 bekle_us(i);

sayi=0xFF;
 veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);veriYaz595(sayi);
 ST_clock();
 bekle_us(255-i);

}
 }
}
//---------Animasyon 1 --------
void animasyon_1()
{
 char i=0;
 sayi=1;
 while(mod==1)
 {
 veriYaz595(sayi);
 if(sayi==1) YON=0;
 if(sayi==128) YON=1;
 if(!YON) sayi<<=1;
 else sayi>>=1;
 ST_clock();
 bekle_us(10000);
 }

}
//---------Animasyon 2 --------
void animasyon_2()
{
 char i=0,x=50;

while(mod==2)
 {
 sayi=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(0);
 ST_clock();
 sayi<<=1;
 vDelay_ms(3*x);
 }
 sayi=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 ST_clock();
 sayi<<=1;
 vDelay_ms(3*x);
 }
 sayi=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(0);
 ST_clock();
 sayi<<=1;
 vDelay_ms(3*x);
 }
 sayi=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi);
 ST_clock();
 sayi<<=1;
 vDelay_ms(3*x);
 }
 //-------------------------
 sayi=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi);
 ST_clock();
 sayi>>=1;
 vDelay_ms(3*x);
 }
 sayi=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(0);
 ST_clock();
 sayi>>=1;
 vDelay_ms(3*x);
 }
 sayi=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 ST_clock();
 sayi>>=1;
 vDelay_ms(3*x);
 }
 sayi=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(0);
 ST_clock();
 sayi>>=1;
 vDelay_ms(3*x);
 }
 x-=2;
 if(x<2) x=50;
 }
}
//---------Animasyon 3 --------
void animasyon_3()
{
char i=0,x=50,sayi1;

while(mod==3)
 {
 sayi=1;sayi1=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi1);
 ST_clock();
 sayi<<=1;
 sayi1>>=1;
 vDelay_ms(3*x);
 }
 sayi=1;sayi1=128;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(sayi1);
 veriYaz595(0);
 ST_clock();
 sayi<<=1;
 sayi1>>=1;
 vDelay_ms(3*x);
 }
 sayi=128;sayi1=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(sayi1);
 veriYaz595(0);
 ST_clock();
 sayi>>=1;
 sayi1<<=1;
 vDelay_ms(3*x);
 }
 sayi=128;sayi1=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi1);
 ST_clock();
 sayi>>=1;
 sayi1<<=1;
 vDelay_ms(3*x);
 }
 //-------------------------
 x-=2;
 if(x<2) x=50;
 }
}
//---------Animasyon 4 --------
void animasyon_4()
{
 char i=0,sayi1,x=50;
 sayi=254;
 while(mod==4)
 {
 sayi=255;sayi1=255;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(255);
 veriYaz595(255);
 veriYaz595(sayi1);
 ST_clock();
 sayi<<=1;
 sayi1>>=1;
 vDelay_ms(3*x);
 }
 sayi=255;sayi1=255;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(sayi1);
 veriYaz595(0);
 ST_clock();
 sayi<<=1;
 sayi1>>=1;
 vDelay_ms(3*x);
 }
 sayi=128;sayi1=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(0);
 veriYaz595(sayi);
 veriYaz595(sayi1);
 veriYaz595(0);
 ST_clock();
 //sayi>>1;
 sayi>>=1;
 sayi1<<=1;
 vDelay_ms(3*x);
 }
 sayi=128;sayi1=1;
 for(i=0;i<8;i++)
 {
 veriYaz595(sayi);
 veriYaz595(0);
 veriYaz595(0);
 veriYaz595(sayi1);
 ST_clock();
 sayi>>=1;
 sayi1<<=1;
 vDelay_ms(3*x);
 }
 //-------------------------
 x-=2;
 if(x<2) x=50;
 }
}
//-----------------------------
void interrupt()
{
 if(INTCON.RBIF)
 {
 INTCON.RBIF=0;
 if(!M0) mod=1;
 if(!M1) mod=2;
 if(!M2) mod=3;
 if(!M3) mod=4;
 }
}

void kurulum()
{
 CMCON=7;
 TRISA=0;
 TRISB=0xF0;
 OPTION_REG.B7=0;
 PORTA=0;
 PORTB=0;
 INTCON.GIE=1;
 INTCON.RBIE=1;
 INTCON.RBIF=0;
}
void main()
{
 kurulum();
 animasyon_0();
 do
 {
 if(mod==1) animasyon_1();
 if(mod==2) animasyon_2();
 if(mod==3) animasyon_3();
 if(mod==4) animasyon_4();
 }while(1);
}
Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s