Arkadaşlar ccs c ile 16f877 kullanarak zar yapmak istiyorum.Bunun için 6 tane ledi pinlere takacağım.Zar 1 'İ gösteriyorsa bir led yanacak; zar altıyı gösteriyorsa altı led yanacak Ben bunu switch- case döngüsü ile yapabileceğimi zannediyorum.ancak zarın sayı döngüsünü nasıl yapacağımı bulamadım.Yani sayı birden -altya kadar sürekli dönecek butona basılınca hangi sayıdaysa o kadar led yanacak.Bunu yapmam için nasıl bir program yazmalıyım.Görüşlerinizi sabırsızlıkla bekliyorum.Saygılarımla.
Bence siz C bilginizi gözden geçirin.Çünkü C'yi tam öğrendiğiniz vakit tüm projeleriniz için ayrı konu açmanız gerekmez.Sorunuza gelirsek;
-C ile random sayı üreteceksiniz.Bunun için stdlib.h kütüphanesinde bulunan Rand fonksiyonunun kullanımını öğrenmelisiniz.
Örnek program ;
#include<-stdio.h>
#include<-conio.h>
#include<-stdlib.h>
int main(){
int sayi;
sayi=rand()%10;
printf("Rastgele sayi= %d",sayi);
getch();
}
Bu kodda 0-10 arası sayı üretilecektir.Dikkat et rand() fonksyonundan sonra %.... ifadesine ne yazarsan o aralıklı üretir.Diğer bir fonksiyon ise srand().Bu ise zamana bağlı olaraktan sürekli değişmesini sağlar.Sizin zar programında 6 adet ihtimal olduğu için;
#include<-stdio.h>
#include<-stdlib.h>
#include<-time.h>
int main(){
int sayi;
srand(time(NULL));
sayi=rand()%6;
printf("Rastgele sayi= %d",sayi);
getch();
}
Zar olayında randoma gerek yok. 0..5 sayıcı sürekli olarak sayar. Sayıcı çok hızlı sayacağı için hile yapmak imkansız. Butona basıldığı anda sayıcı içeriği zar değeri olarak görüntülenir.
Burada butona basacak insan olduğu sürece hiç bir sorun yok.
Arkadaşlar en sonunda zar yapımı işini kendim çözdüm.Pic te ledlerle zar yaptım.Kesme ile ledler durduruluyor.Belki kod birilerine yardımcı olur diye aşağıda yayınlıyorum.Program çok güzel çalışıyor.
//RECEP METE-ALAÇAM-SAMSUN
#include <16f877.h>
//***********Denetleyici konfigürasyon ayarları************
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define display_1 pin_a0
int i;
char birler=0;
int32 sayi=0,sayici;
// Ortak katot display için veri değerleri
const int digit[8]={0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F,};
unsigned char a=0;
#int_timer0
void timer_kesme(void)
{
set_timer0(0);
if(input(pin_a0)){ delay_ms(10); while(input(pin_a0));
for(i=0;i<10;i++)
{
delay_ms(350);
}
}
}
void main ()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|T0_8_BIT);
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_timer0(0);
enable_interrupts(int_timer0);
enable_interrupts(global);
set_tris_a(0x01);
set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
while(1)
{
if(a==1) {sayi++;a=0;}
if (sayi==7)
sayi=0;
birler = sayi % 10;
output_b(digit[birler]); // displaye bilgi gönderiliyor
delay_ms(50); // gecikme veriliyor
a++;
}}
https://www.sifirzero.com/2020/09/pic-programlama-ccs-c-zar-atma-program.html?m=0 (https://www.sifirzero.com/2020/09/pic-programlama-ccs-c-zar-atma-program.html?m=0)
Örnek uygulama vermek istedim. Hayirli günler
Random jeneratörü yoktur sanırım sanırım 877 de :)