devre bağlantı şeması

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 4>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...
0 Yorumlar