Matris led display göstergeli yılan oyunu (ccs c pic16f877)

| Mayıs 31, 2023 Tarihinde güncellendi
Matris led display göstergeli yılan oyunu (ccs c pic16f877)

Matris led display göstergeli yılan oyunu pic16f877 mikrodenetleyicisi üzerine kurulu yazılım ise ccs c ile hazırlanmış matris led display gösterge üzerinden butonlar ile oyun oynanıyor uygulama Proje Makale Paylaşım bölümünden ulaştırıldı dosyaları gönderen, uygulamayı hazırlayan kişilere Teşekkürler

PCBway Türkiye PCB Manufacturer PCB Assembly

Devrenin çalışma görüntüsü;

PIC16f877 ile hazırlanmış bir yılan oyunu.4 buton ile yılanın kontrolü yapılmakta.CCS C ile programlandı.

Malzeme Listesi :

  • 2 adet ortak anot 3 mm 7×5 matris display
  • 5 adet buton
  • 5 adet 10k direnç
  • 1 adet 4 mhz kristal
  • 1 adet PIC16F877

Not : Devrede ortak katod display kullanmak isterseniz kodlarda bazı değişlikler yapmanız gerekmektedir. Sütun seçme fonksiyonu yeniden düzenlenmeli ve C portuna “~” ile terslenerek gönderilen bilgilerin önündeki “~” işareti kaldırılmalı yani bilgiler terslenmeden gönderilmelidir.

CCSC Yazılım içeriği;


/*Tasarım ve Programlama : Recai Sinekli - www.recaisinekli.com*/

#include <16F877.h>
#include 
#fuses XT
#use delay (clock=4000000)
#use fast_io(b)

int konum[3]={1,3,1}; //Yılanın başının yatay değeri,düşey değeri ve yönü

#int_RB
void kontrol(){
  if(input(pin_b7)==0){      //Yukarı butonu
    delay_us(50);
    if(konum[2]!=2){
      konum[2]=4;
    }
  }
  if(input(pin_b6)==0){      //Sol butonu
    delay_us(50);
    if(konum[2]!=1){
      konum[2]=3;
    }
  }
  if(input(pin_b4)==0){      //Aşağı butonu
    delay_us(50);
    if(konum[2]!=4){
      konum[2]=2;
    }
  }
  if(input(pin_b5)==0){      //Sağ butonu
    delay_us(50);
    if(konum[2]!=3){
      konum[2]=1;
    }
  }
}
/*****************************************************************************/
boolean eepromyuklendi=false;
int rastgele=1;
int1 oyun=1;
int i,j,rx,ry,puan_b,puan_o;
int puan=0;
int1 k=0;
int son=2;
int dizi[7][10]={
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
1,2,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
int1 yilan[7][10]={
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
const int puan_txt[44]={
0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,
0b01111111,0b00001001,0b00001001,0b00001001,0b00000110,0b00000000,//P
0b00111111,0b01000000,0b01000000,0b01000000,0b00111111,0b00000000,//U
0b01111100,0b00001010,0b00001001,0b00001010,0b01111100,0b00000000,//A
0b01111111,0b00000010,0b00000100,0b00001000,0b01111111,0b00000000,//N
0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000};
const int sifir[5]={0b00111110,0b01010001,0b01001001,0b01000101,0b00111110};
const int bir[5]={0b01000100,0b01000010,0b01111111,0b01000000,0b01000000};
const int iki[5]={0b01000110,0b01100001,0b01010001,0b01001001,0b01000110};
const int uc[5]={0b00100010,0b01000001,0b01001001,0b01001001,0b00110110};
const int dort[5]={0b00110000,0b00101000,0b00100100,0b01110010,0b00100001};
const int bes[5]={0b00101111,0b01001001,0b01001001,0b01001001,0b00110001};
const int alti[5]={0b00111110,0b01001001,0b01001001,0b01001001,0b00110010};
const int yedi[5]={0b01100001,0b00010001,0b00001001,0b00000101,0b00000011};
const int sekiz[5]={0b00110110,0b01001001,0b01001001,0b01001001,0b00110110};
const int dokuz[5]={0b00100110,0b01001001,0b01001001,0b01001001,0b00111110};

/*****************************************************************************/
//Yılanın kuyruğundan 1 nokta silen fonksiyon
void kuyruk(){
  for(i=0;i<7;i++){
    for(j=0;j<10;j++){
      if(dizi[i][j]==1){
        dizi[i][j]=0;
      }
    }
  }
  for(i=0;i<7;i++){
    for(j=0;j<10;j++){
      if(dizi[i][j]!=0 && dizi[i][j]!=99){
        dizi[i][j]-=1;
      }
    }
  }
  for(i=0;i<7;i++){
    for(j=0;j<10;j++){
      if(dizi[i][j]>son && dizi[i][j]<99){
        son=dizi[i][j];
      }
    }
  }
}
//Yem belirleyen fonksiyon
void yem(){
  if(k==0){
    while(1){
      rx=rand()%10;
      ry=rand()%7;
      if(dizi[ry][rx]==0){
        dizi[ry][rx]=99;
        k=1;
        break;
      }
    }
    rastgele++;
    write_eeprom(0,rastgele);
  }
}
//Sütun seçen fonksiyon
void sutunsec(char sutun){
 switch (sutun){
  case 0: output_e(0);output_d(1);break;
  case 1: output_e(0);output_d(2);break;
  case 2: output_e(0);output_d(4);break;
  case 3: output_e(0);output_d(8);break;
  case 4: output_e(0);output_d(16);break;
  case 5: output_e(0);output_d(32);break;
  case 6: output_e(0);output_d(64);break;
  case 7: output_e(0);output_d(128);break;
  case 8: output_e(1);output_d(0);break;
  case 9: output_e(2);output_d(0);break;
 }
}
//Yılanın konumunu güncelleyen fonksiyon
void yilan_guncelle(){
  switch (konum[2]){
    //Yön sağa ise
    case 1:
      if(konum[0]<9){
        konum[0]=konum[0]+1;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }else{
        konum[0]=0;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }
      if(konum[1]==ry && konum[0]==rx){
      son+=1;
      k=0;
      puan+=1;
      }else{
      kuyruk();
      }
    break;
    //Yön aşağı ise
    case 2:
      if(konum[1]<6){
        konum[1]=konum[1]+1;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }else{
        konum[1]=0;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }
      if(konum[1]==ry && konum[0]==rx){
      son+=1;
      k=0;
      puan+=1;
      }else{
      kuyruk();
      }
    break;
    //Yön sola ise
    case 3:
      if(konum[0]>0){
        konum[0]=konum[0]-1;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }else{
        konum[0]=9;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }
      if(konum[1]==ry && konum[0]==rx){
      son+=1;
      k=0;
      puan+=1;
      }else{
      kuyruk();
      }
    break;
    //Yön yukarı ise
    case 4:
      if(konum[1]>0){
        konum[1]=konum[1]-1;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }else{
        konum[1]=6;
        if(dizi[konum[1]][konum[0]]!=0 && dizi[konum[1]][konum[0]]!=99){
          oyun=0;
        }else{
        dizi[konum[1]][konum[0]]=son+1;
        }
      }
      if(konum[1]==ry && konum[0]==rx){
      son+=1;
      k=0;
      puan+=1;
      }else{
      kuyruk();
      }
    break;
  }
}
//Yılanın displaydeki görüntüsünü güncelleyen fonksiyon
void goster(){
  for(i=0;i<7;i++){
    for(j=0;j<10;j++){
      yilan[i][j]=1;
    }
  }
  for(i=0;i<7;i++){
    for(j=0;j<10;j++){
      if(dizi[i][j]>0){
        yilan[i][j]=0;
      }
    }
  }
  for(j=0;j<20;j++){
        for(i=0;i<10;i++){
         sutunsec(i);
         output_bit(pin_c0,yilan[0][i]);
         output_bit(pin_c1,yilan[1][i]);
         output_bit(pin_c2,yilan[2][i]);
         output_bit(pin_c3,yilan[3][i]);
         output_bit(pin_c4,yilan[4][i]);
         output_bit(pin_c5,yilan[5][i]);
         output_bit(pin_c6,yilan[6][i]);
         delay_us(1200);
         output_c(0b11111111);
     }
  }
}
/********************************ANA FONKSİYON*********************************/
void main()
{

   if(eepromyuklendi==false){
      rastgele=read_eeprom(0);
      if(rastgele==0){rastgele=1; write_eeprom(0,1);}
      eepromyuklendi=true;
      srand(rastgele);
   }
   
   output_c(0x00);
   enable_interrupts(INT_RB);
   enable_interrupts(GLOBAL);
   
   while(oyun){
     goster();
     yilan_guncelle();
     yem();
   }
   while(1){
     puan_o=puan/10;
     puan_b=puan%10;
        for(i=10;i<44;i++){
         for(j=0;j<15;j++){
            sutunsec(9);
            output_c(~puan_txt[i]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(8);
            output_c(~puan_txt[i-1]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(7);
            output_c(~puan_txt[i-2]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(6);
            output_c(~puan_txt[i-3]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(5);
            output_c(~puan_txt[i-4]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(4);
            output_c(~puan_txt[i-5]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(3);
            output_c(~puan_txt[i-6]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(2);
            output_c(~puan_txt[i-7]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(1);
            output_c(~puan_txt[i-8]);
            delay_us(1000);
            output_c(0b11111111);
            sutunsec(0);
            output_c(~puan_txt[i-9]);
            delay_us(1000);
            output_c(0b11111111);
         } 
        }
        for(j=0;j<255;j++){
          for(i=0;i<10;i++){
              sutunsec(i);
           if(i<5){
             if(puan_o==0){
             output_c(~sifir[i]);
             }
             else if(puan_o==1){
             output_c(~bir[i]);
             }
              else if(puan_o==2){
             output_c(~iki[i]);
             }
              else if(puan_o==3){
             output_c(~uc[i]);
             }
              else if(puan_o==4){
             output_c(~dort[i]);
             }
             else if(puan_o==5){
             output_c(~bes[i]);
             }
             else if(puan_o==6){
             output_c(~alti[i]);
             }
             else if(puan_o==7){
             output_c(~yedi[i]);
             }
             else if(puan_o==8){
             output_c(~sekiz[i]);
             }
             else if(puan_o==9){
             output_c(~dokuz[i]);
             }
             delay_ms(1);
             output_c(0b11111111);
           }else{
             if(puan_b==0){
             output_c(~sifir[i-5]);
             }
             else if(puan_b==1){
             output_c(~bir[i-5]);
             }
              else if(puan_b==2){
             output_c(~iki[i-5]);
             }
              else if(puan_b==3){
             output_c(~uc[i-5]);
             }
              else if(puan_b==4){
             output_c(~dort[i-5]);
             }
             else if(puan_b==5){
             output_c(~bes[i-5]);
             }
             else if(puan_b==6){
             output_c(~alti[i-5]);
             }
             else if(puan_b==7){
             output_c(~yedi[i-5]);
             }
             else if(puan_b==8){
             output_c(~sekiz[i-5]);
             }
             else if(puan_b==9){
             output_c(~dokuz[i-5]);
             }
             delay_ms(1);
             output_c(0b11111111);
           }
          }
        }
   }
}

Tasarım ve programlama : Recai Sinekli Web : www.recaisinekli.com

Matris led display göstergeli yılan oyunu uygulama dosyaları (kaynak ccsc, hex kodları devre şeması veproteus ares pcb;

matris-led-display-gostergeli-yilan-oyunu-ccs-c-pic16f877

Şifre-Pass: 320volt.com

Yayım tarihi: 2010/05/03 Etiketler: , , , , , ,



8 Yorum “Matris led display göstergeli yılan oyunu (ccs c pic16f877)

  1. SerdarSerdar

    Merhaba ben bu devreyi yapmak istiyorum fakat baskı devresindeki elemanları anlayamadım yardımcı olursanız sevinirim …..

    CEVAPLA
  2. volkanvolkan

    ben devrenin iç şemasını bulamıyorum yardımcı olurmusunuz devreyi yapmam lazım

    CEVAPLA
  3. yusufyusuf

    Merhabalar ben bu devrenin isis simülayonunu yaptım fakat bir sorun var. PIC yazılımını attığımda herşey düzgün çalışıyor görünuyor birşey haric displayde (3mm 5×7 )sadece bir nokta çıkıyor ama hareket eden yılan yok videodaki gibi

    yardımcı olurmusunuz bunu proje olarak sunmayı düşünüyorum çünkü

    CEVAPLA
  4. ekremekrem

    Merhaba bana bu devrenin ccs arm kodları lazım yardımcı olabilecek var mi?

    CEVAPLA
  5. Anıl KubilayAnıl Kubilay

    hocam ben bu devreyi board üzerinde kurdum ama display deki ledlerin hepsi yanık kalıyor devre ISIS’ de çalışıyor ama uygulamada çalıştıramadım sorun ile ilgili bir bilgin var mı ? Kısa devre kontrolü ve bacak bağlantılarının kontrolünü yaptım problem yoktu. Şimdiden teşekkürler

    CEVAPLA
    1. AbdultalipAbdultalip

      hocam bende aynı sorun ile karşılaştım sen sorunu çözebildinmi çözebildi isen acil yardımcı olabilirmisin çok vaktim kalmadı acilen rica ediyorum şimdiden teşekkürler.

      CEVAPLA
  6. AbdultalipAbdultalip

    merhaba bu projeyi yapmam lazım . daha önce yapabilen yardım edebilirmi acaba

    CEVAPLA

Anıl Kubilay için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir