Programlama ve Elektronik

Programlama ve Elektronik (http://www.proelo.com/)
-   PIC16F877 Devreleri (http://www.proelo.com/pic16f877-devreleri-94/)
-   -   PIC16F877A ile C Dili Kullanılarak LED Küpü (3D) Uygulaması (http://www.proelo.com/pic16f877-devreleri-94/pic16f877a-ile-c-dili-kullanilarak-led-kupu-3d-uygulamasi-2436/)

parametre 5. December 2012 08:42 PM

PIC16F877A ile C Dili Kullanılarak LED Küpü (3D) Uygulaması
 
- Besleme Devresi -
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

- PIC Devresi -
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

- PCB Yerleşimi -
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

- LED Yerleşimi -
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

- Diğer İndirme Seçeneği -
[Sadece Üyelere Linkler Açıktır.Üye Olun !!! Tıklayarak Üye Olun !!!]

Kod:

// PIC16F877A ile LED kupu uygulamasi

#include <pic.h>
#include <delay.c>
#include <stdlib.h>

// Konfigurasyon ayarlari (4MHz rezonator)
__CONFIG(XT&WDTDIS&PWRTEN&LVPDIS);

//============================================================
//                        ANA PROGRAM
//============================================================
main (void)
{

unsigned const char secme[4]={0xFE0xFD0xFB0xF7};
unsigned char aicktxym;
unsigned const char donus1[6]={0x100x010x020x040x080x80};
unsigned const char donus2[6]={0x080x800x400x200x100x01};

unsigned const char altD[4]={0x0F0xF00x000x00};
unsigned const char altB[4]={0x000x000x0F0xF0};

unsigned const char ustD[4]={0x000x000xF00x0F};
unsigned const char ustB[4]={0xF00x0F0x000x00};

unsigned const char dizi[4]={0x880x440x220x11};

unsigned const char xyzD[4]={0x1F0x010x010x01};
unsigned const char xyzB[4]={0x110x000x000x00};

unsigned const char izgaraD[4]={0x9F0x090x090x9F};
unsigned const char izgaraB[4]={0xF90x900x900xF9};

unsigned const char kucukizgaraD[4]={0x000x600x600x00};
unsigned const char kucukizgaraB[4]={0x000x060x060x00};

unsigned const char havaifisekD[36]={0xF00x000x000x00
                                      0xF00x000x000x00
                                      0xF00xF00x000x00
                                      0xF00xF00xF00x00
                                      0xF00xF00xF00xF0
                                   
                                    0x000x000x000x0F
                                      0x000x000x0F0x0F
                                      0x000x0F0x0F0x0F
                                      0x0F0x0F0x0F0x0F
                                        };
                     
unsigned const char havaifisekB[36]={0x0F0x000x000x00
                                                0x0F0x000x000x00
                                                  0x0F0x0F0x000x00
                                      0x0F0x0F0x0F0x00
                                      0x0F0x0F0x0F0x0F
                                     
                                      0x000x000x000xF0
                                      0x000x000xF00xF0
                                      0x000xF00xF00xF0
                                      0xF00xF00xF00xF0
                                      };
                                         
//--------------------------------------------------------
//                Port konfigurasyonu
//--------------------------------------------------------
TRISB=0x00; // Hepsi cikis (8 adet LED icin)
TRISD=0x00; // Hepsi cikis (8 adet LED icin)
TRISC=0x00; // Hepsi cikis (4 adet transistoru secmek icin)
//--------------------------------------------------------

//--------------------------------------------------------
//                Baslangic durumu ayarlari
//--------------------------------------------------------
PORTC=0xFF; // hicbir transistor secili degil
PORTB=0x00; // Data lojik 0
PORTD=0x00; // LED'ler sonuk
//--------------------------------------------------------

//-------------------------------------
// (1) 64 adet LED'i sirayla yakmak icin
//-------------------------------------
for(a=0;a<4;a++){

        PORTC=secme[a]; // duzlemi sec

        for(i=0;i<8;i++){ // RD0'dan RD7'ye
                PORTD=1<<i;
                DelayMs(100);
        }

        PORTD=0;

        for(i=0;i<8;i++){ // RB0'dan RB7'ye
                PORTB=1<<i;
                DelayMs(100);
                }

        PORTB=0;
}
//-------------------------------------


//-------------------------------------
// (2) 64 adet LED'i S seklinde yakmak icin
//-------------------------------------
c=80;
for(a=0;a<4;a++){

        PORTC=secme[a]; // duzlemi sec

        for(i=0;i<4;i++){ // RD0'dan RD3'e
                PORTD=0x01<<i;
                DelayMs(c);
        }
        for(i=0;i<4;i++){ // RD7'dan RD4'e
                PORTD=0x80>>i;
                DelayMs(c);
        }
       
        PORTD=0;

        for(i=0;i<4;i++){ // RB0'dan RB3'e
                PORTB=0x01<<i;
                DelayMs(c);
        }
        for(i=0;i<4;i++){ // RB7'dan RB4'e
                PORTB=0x80>>i;
                DelayMs(c);
        }

        PORTB=0;
}
//-------------------------------------

//-------------------------------------
// (3) x-y-z koordinat ekseni
//-------------------------------------
for(k=0;k<200;k++){ // 200 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=xyzD[a];
        PORTB=xyzB[a];
        DelayMs(1);
        PORTB=0; PORTD=0;
        }
}
//-------------------------------------


//-------------------------------------
// (4) Kup izgara
//-------------------------------------
// Once buyuk izgara
for(t=0;t<2;t++){ // 2 kez tekrarla

for(k=0;k<200;k++){ // 200 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=izgaraD[a];
        PORTB=izgaraB[a];
        DelayMs(1);
        PORTB=0; PORTD=0;
        }
}
//-------------------------------------


// Sonra kucuk izgara
for(k=0;k<200;k++){ // 200 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=kucukizgaraD[a];
        PORTB=kucukizgaraB[a];
        DelayMs(1);
        PORTB=0; PORTD=0;
        }
}
}
//-------------------------------------


//-------------------------------------
// (5) yukari-asagi
//-------------------------------------
for(t=0;t<2;t++){
       
// once yukari dogru
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
                if(a==i){
                PORTC=secme[a]; // duzlemleri sirayla sec
                PORTD=0xFF;
                PORTB=0xFF;
                }
                DelayMs(1);
        PORTD=0;PORTB=0;
        }
}
}

// sonra asagi dogru
for(i=4;i>0;i--){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=4;a>0;a--){
                if(a==i){
                PORTC=secme[a-1]; // duzlemleri sirayla sec
                PORTD=0xFF;
                PORTB=0xFF;
                }
                DelayMs(1);
        PORTD=0;PORTB=0;
        }
}
}
}
//-------------------------------------


//-------------------------------------
// (6) yukari asagi eklemeli
//-------------------------------------
for(t=0;t<2;t++){
       
// once yukari dogru
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
                if(i>=a){
                PORTC=secme[a]; // duzlemleri sirayla sec
                PORTD=0xFF;
                PORTB=0xFF;
                }
                DelayMs(1);
        PORTD=0;PORTB=0;
        }
}
}

// sonra asagi dogru
for(i=4;i>0;i--){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=4;a>0;a--){
                if(i>=a){
                PORTC=secme[a-1]; // duzlemleri sirayla sec
                PORTD=0xFF;
                PORTB=0xFF;
                }
                DelayMs(1);
        PORTD=0;PORTB=0;
        }
}
}
}
//-------------------------------------


//-------------------------------------
// (7) sola-saga
//-------------------------------------
for(t=0;t<2;t++){
       
//once sola
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=altD[i];
        PORTB=altB[i];
        DelayMs(1);
        }
}
PORTD=0;PORTB=0;
}

// sonra saga
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=ustD[i];
        PORTB=ustB[i];
        DelayMs(1);
        }
}
PORTD=0;PORTB=0;
}
}

//-------------------------------------


//-------------------------------------
// (8) one-arkaya
//-------------------------------------
for(t=0;t<2;t++){

// once onden arkaya dogru
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=dizi[i];
        PORTB=dizi[i];
        DelayMs(1);
        }
}
PORTB=0; PORTD=0;
}

// sonra arkadan one dogru
for(i=0;i<4;i++){

for(k=0;k<40;k++){ // 40 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=dizi[3-i];
        PORTB=dizi[3-i];
        DelayMs(1);
        }
}
PORTB=0; PORTD=0;
}
}

//-------------------------------------


//-------------------------------------
// (9) Dairesel donus
//-------------------------------------

PORTB=0; PORTD=0;
for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=donus1[i]; // dikey duzlem
        DelayMs(1);
        }
}
}
PORTD=0;

for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTB=donus2[i]; // dikey duzlem
        DelayMs(1);
        }
}
}
PORTB=0;
//-------------------------------------


//-------------------------------------
// (10) Dairesel donus-2
//-------------------------------------

PORTB=0; PORTD=0;
for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=PORTD|donus1[i]; // dikey duzlem
        DelayMs(1);
        }
}
}

for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<4;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTB=PORTB|donus2[i]; // dikey duzlem
        DelayMs(1);
        }
}
}

//-------------------------------------


//-------------------------------------
// (11) Dairesel donus-3
//-------------------------------------

PORTB=0; PORTD=0;
for(t=1;t<=4;t++){
       
for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<t;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTD=PORTD|donus1[i]; // dikey duzlem
        DelayMs(1);
        }
}
}

PORTD=0;
       
for(i=0;i<6;i++){

for(k=0;k<20;k++){ // 20 kez tara
        for(a=0;a<t;a++){
        PORTC=secme[a]; // duzlemleri sirayla sec
        PORTB=PORTB|donus2[i]; // dikey duzlem
        DelayMs(1);
        }
}
}
PORTB=0;
}
//-------------------------------------


//-------------------------------------
// (12) Yatayda karasimsek (duzlemler sirayla)
//-------------------------------------
c=100;

for(a=0;a<4;a++){ // yukari dogru

        PORTC=secme[a]; // duzlemi sec

        PORTD=0x0F;
        DelayMs(c);
        PORTD=0xF0;
        DelayMs(c);PORTD=0;
        PORTB=0x0F;
        DelayMs(c);
        PORTB=0xF0;
        DelayMs(c);

        PORTB=0xF0;
        DelayMs(c);
        PORTB=0x0F;
        DelayMs(c);PORTB=0;
        PORTD=0xF0;
        DelayMs(c);
        PORTD=0x0F;
        DelayMs(c);
               
}
//-------------------------------------


//-------------------------------------
// (13) Alt ve ust duzlemde eszamanli karasimsek (tersten)
//-------------------------------------
c=100;

for(i=0;i<4;i++){ // tekrar sayisi

for(t=0;t<4;t++){ // duzlem secimi

for(k=0;k<50;k++){ // 50 kez tara

        PORTB=0; PORTD=0;
        PORTC=secme[0]; // 1. duzlemi sec
        PORTD=altD[t];
        PORTB=altB[t];
        DelayMs(1);

        PORTB=0; PORTD=0;
        PORTC=secme[3]; // 4. duzlemi sec
        PORTB=ustB[t];
        PORTD=ustD[t];
        DelayMs(1);
}
}

for(t=0;t<4;t++){

for(k=0;k<50;k++){

        PORTB=0; PORTD=0;
        PORTC=secme[0]; // 1. duzlemi sec
        PORTD=ustD[t];
        PORTB=ustB[t];
        DelayMs(1);

        PORTB=0; PORTD=0;
        PORTC=secme[3]; // 4. duzlemi sec
        PORTB=altB[t];
        PORTD=altD[t];
        DelayMs(1);
}
}
}
//-------------------------------------

//-------------------------------------
// (14) rastgele sayi uretimi
//-------------------------------------

for(t=0;t<10;t++){

x=rand();
y=rand();
       
for(k=0;k<100;k++){
for(a=0;a<4;a++){
        PORTB=0; PORTD=0;
        PORTC=secme[a]; // duzlemi sec

        PORTD=x;
        PORTB=y;
        DelayMs(1);
}
}
}
//-------------------------------------


//-------------------------------------
// (15) Havaifisek
//-------------------------------------

for(t=0;t<9;t++){

for(k=0;k<40;k++){ // 40 kez tara
for(a=0;a<4;a++){
        PORTB=0; PORTD=0;
        PORTC=secme[a]; // duzlemi sec

        PORTD=havaifisekD[4*t+a];
        PORTB=havaifisekB[4*t+a];
        DelayMs(1);
}
}
}
//-------------------------------------


//-------------------------------------
// (16) Yukselen-alcalan 4 kose kule
//-------------------------------------
for(a=0;a<4;a++){
       
for(k=0;k<150;k++){ // 150 kez tara
        PORTB=0; PORTD=0;
        PORTC=secme[a]; // duzlemi sec

        PORTD=0x09;
        PORTB=0x90;
        DelayMs(1);
}
}
for(a=0;a<4;a++){
for(k=0;k<150;k++){ // 150 kez tara
        PORTB=0; PORTD=0;
        PORTC=secme[3-a]; // duzlemi sec

        PORTD=0x09;
        PORTB=0x90;
        DelayMs(1);
}
}
//-------------------------------------


//-------------------------------------
// (17) Dans eden kuleler
//-------------------------------------

t=15; // gecikme

for(m=0;m<8;m++){
               
for(i=0;i<4;i++){
for(k=0;k<t;k++){ // t kez tara
        for(a=0;a<4;a++){
                if(i>=a){
                PORTC=secme[a]; // duzlemleri sirayla sec
                PORTD=1<<m;
                PORTB=0x80>>m;
                }
        DelayMs(1);
        PORTB=0; PORTD=0;
        }

}
}

// sonra asagi dogru
for(i=4;i>0;i--){

for(k=0;k<t;k++){ // t kez tara
        for(a=4;a>0;a--){
                if(i>=a){
                PORTC=secme[a-1]; // duzlemleri sirayla sec
                PORTD=1<<m;
                PORTB=0x80>>m;
                }
                DelayMs(1);
        PORTD=0;PORTB=0;
        }
}
}
DelayMs(4*t);

}

//-------------------------------------


//-------------------------------------
// (18) Spiral hareket
//-------------------------------------
// once saat yonunde sonra ters yonde yukari

for(m=7;m<30;m+=5){

PORTB=0; PORTD=0;

for(a=0;a<4;a++){

        PORTC=secme[a]; // duzlemleri sirayla sec
                for(i=0;i<6;i++){
                PORTD=donus1[i];
                DelayMs(m);
                }
PORTD=0;

        PORTC=secme[a]; // duzlemleri sirayla sec
                for(i=0;i<6;i++){
                PORTB=donus2[i];
                DelayMs(m);
                }
PORTB=0;
}


// ters
PORTB=0; PORTD=0;

for(a=0;a<4;a++){


        PORTC=secme[3-a]; // duzlemleri sirayla sec
                for(i=0;i<6;i++){
                PORTD=donus1[5-i];
                DelayMs(m);
                }
PORTD=0;

        PORTC=secme[3-a]; // duzlemleri sirayla sec
                for(i=0;i<6;i++){
                PORTB=donus2[5-i];
                DelayMs(m);
                }
PORTB=0;
}
}

//-------------------------------------

}
//---------------PROGRAM SONU----------------------------


ULAGA 6. December 2012 11:40 AM

Cevap: PIC16F8787A ile C Dili Kullanılarak LED Küpü (3D) Uygulaması
 
Konu tekrar düzenlendi.
Açılan konunun başlığı ve içeriği bu şekilde zengin olursa çok sevinirim.
Bunu bir çok kez dile getirdim.

Dragon 9. December 2012 01:52 PM

Cevap: PIC16F877A ile C Dili Kullanılarak LED Küpü (3D) Uygulaması
 
bu proje birçok sitede var ama bu kadar açıklayıcı olanını görmedim. Artık böyle güzellikler nadir kardeşimizin klasikleri oldu. TEşekkür ederim sağol


Bütün Zaman Ayarları WEZ +3.5 olarak düzenlenmiştir. şu Anki Saat: 11:26 AM .