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
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;
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/05/03 Etiketler: ccs c projeleri, ccsc, Led Display, matris display, microchip pic projeleri, oyun devresi, PIC16F877 örnekleri
Merhaba ben bu devreyi yapmak istiyorum fakat baskı devresindeki elemanları anlayamadım yardımcı olursanız sevinirim …..
Merhaba,bana mail yoluyla ulaşırsanız size yardımcı olurum.
[email protected]
ben devrenin iç şemasını bulamıyorum yardımcı olurmusunuz devreyi yapmam lazım
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ü
Merhaba bana bu devrenin ccs arm kodları lazım yardımcı olabilecek var mi?
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
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.
merhaba bu projeyi yapmam lazım . daha önce yapabilen yardım edebilirmi acaba