Sayı Bulmaca

devre bağlantı şeması


sayı bulmaca uygulaması


Pic Basic Pro kodları:

'Dört basamağa kadar tutulan sayıyı 15 hakta bulma '------------------------------------------------- '@ DEVICE pic16F877 '@ DEVICE pic16F877, WDT_on '@ DEVICE pic16F877, PWRT_ON '@ DEVICE pic16F877, PROTECT_OFF '@ DEVICE pic16F877, XT_OSC '------------------------------------------------- '----------LCD DEFINE komutları----------- DEFINE LCD_DREG PORTB 'data bacakları hangi Porta bağlı? DEFINE LCD_DBIT 4 'data bacakları hangi bitten başlıyor? DEFINE LCD_EREG PORTB 'Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 3 'Enable Bacağı Hangi bite bağlı? DEFINE LCD RWREG PORTB 'R/W Bacağı Hangi Porta bağlı? DEFINE LCD_RWBIT 2 'R/W Bacağı Hangi bite bağlı? DEFINE LCD_RSREG PORTB 'RS Bacağı Hangi Porta bağlı? DEFINE LCD_RSBIT 1 'RS bacağı Hangi Bite bağlı? DEFINE LCD_BITS 4 '4 bit mi yoksa 8 bit olarak bağlı? DEFINE LCD_LINES 2 'Kaç sıra yazabiliyor? LOW PORTB.2 'değişken tanımlamaları-------------------------------- i VAR BYTE 'Tanınan hak s VAR BYTE 'basamak değişkeni tahmin VAR WORD 'tahmin edilen sayı tus VAR BYTE 'tuşlara atanan sayı rastgele VAR WORD 'tutulan sayı k VAR BYTE 'herhangi bir tuşa basıldığında 'sayı üretmenin durdurulması için TRISB=0 PORTB=%00000000 TRISD=%00001111 PAUSE 200 tahmin=0 i=15 GOSUB baslangic 'başlangıç ekranına gönderme sifirla: s=0 '--------ANA PROGRAM-------- dongu: tus=20 CALL tara SELECT CASE tus 'tuspad menü kontrolü CASE 10 'tus=10 ise CALL tutulan_sayi 'call etiket çağırma CASE 13 CALL giris CASE 11 CALL sil CASE 12 i=15 LCDOUT $FE,1 GOSUB baslangic PAUSE 90 k=0 GOTO sifirla CASE ELSE CALL islem END SELECT GOTO dongu '------ALT PROGRAMLAR------ tara: WHILE tus=20 'tus=20 olduğu sürece '(hiçbir tuşa basılmadığında) 'WHILE-WEND arasını işlemeye devam eder. PORTD=%00010000 IF PORTD.0 THEN tus=1 IF PORTD.1 THEN tus=2 IF PORTD.2 THEN tus=3 IF PORTD.3 THEN tus=10 PORTD=%00100000 IF PORTD.0 THEN tus=4 IF PORTD.1 THEN tus=5 IF PORTD.2 THEN tus=6 IF PORTD.3 THEN tus=11 PORTD=%01000000 IF PORTD.0 THEN tus=7 IF PORTD.1 THEN tus=8 IF PORTD.2 THEN tus=9 IF PORTD.3 THEN tus=12 PORTD=%10000000 'if PORTD.0 THEN tus=15 IF PORTD.1 THEN tus=0 'if PORTD.2 THEN tus=14 IF PORTD.3 THEN tus=13 IF k=0 THEN sayi_uret: RANDOM rastgele IF rastgele>9999 THEN sayi_uret ENDIF WEND'WHILE komutuna geri gönderir RETURN islem: k=1 IF s<4 b="">THEN IF s=0 THEN tahmin=0 s=s+1'sayaç oluşturuldu tahmin=tahmin*10+tus'basamakları oluşturur ENDIF LCDOUT $FE,1 LCDOUT $FE,$C0,#tahmin PAUSE 100 RETURN sil:'Son rakam silinerek basamak küçültme IF s=0 THEN tahmin=0 IF s>0 THEN s=s-1 'sayaç oluşturuldu tahmin=(tahmin-tahmin DIG 0)/10 ENDIF LCDOUT $FE,1 LCDOUT $FE,$C0,#tahmin PAUSE 150 RETURN tutulan_sayi: LCDOUT $FE,1 LCDOUT $FE,$82,"TUTULAN SAYI" LCDOUT $FE,$C6,#rastgele PAUSE 100 k=1 RETURN giris: i=i-1 IF tahmin>rastgele THEN LCDOUT $FE,1 LCDOUT $FE,$C6,"AZALT" ENDIF IF tahminTHEN LCDOUT $FE,1 LCDOUT $FE,$C6,"ARTIR" ENDIF IF tahmin=rastgele THEN LCDOUT $FE,1 LCDOUT $FE,$83,"TEBRIKLER" LCDOUT $FE,$C0,#(15-i),".HAKTA BILDIN" PAUSE 800 k=0 i=15 tahmin=0 LCDOUT $FE,1 GOSUB baslangic GOTO sifirla ENDIF IF i>1 THEN LCDOUT $FE,$80," ",#i," HAKKIN KALDI" PAUSE 100 GOTO sifirla ENDIF IF i=1 THEN LCDOUT $FE,$83,"SON HAKKIN" PAUSE 100 GOTO sifirla ENDIF IF i=0 THEN LCDOUT $FE,1 LCDOUT $FE,$82,"HAKKIN DOLDU" LCDOUT $FE,$C3,"CEVAP=",#rastgele PAUSE 800 k=0 i=15 tahmin=0 LCDOUT $FE,1 GOSUB baslangic GOTO sifirla ENDIF RETURN baslangic: 'başlangıç yönlndirme ekranı LCDOUT $FE,$83,"TAHMIN YAZ" LCDOUT $FE,$C3,"GIRISE BAS" PAUSE 10 RETURN

Dosyaları indirmek için tıklayınız...



Yorum Gönder

0 Yorumlar