 | Elektrotekno.com Elektronik ve Teknoloji Merkezi
| | Yazar | Mesaj | melih | | Tarih: 26.11.2007, 19:00 Mesaj konusu: 16F877 ile LCD zar pbp problemi | |
| merhaba arkadaşlar pbp da 16f877 ile lcd li zar projesi üzerinde çalışıyorum.kodu random komutu kullanarak yazdım ancak butona 6 defa bastığımda lcd de gördüğüm ilk değeri tekrar görüyorum.Butona her bastığımda sürekli farklı bir değer göstermesi için ne yapmalıyım???
trısb=1
trısd=0
define osc 4
define lcd_dreg portd
define lcd_dbıt 4
define lcd_rsreg porte
define lcd_rsbıt 0
define lcd_ereg porte
define lcd_ebıt 1
portb=1
portd=0
sayı var byte
sayı1 var byte
adcon1 = 7
low porte.2
pause 100
lcdout $fe, $80,"zar degerı "
buton:
ıf portb.0=0 then goto basla
goto buton
basla:
bas1:
random sayı
sayı= sayı & %00000111
ıf sayı=0 or sayı=7 then goto bas1
pause 100
lcdout $fe,$80,"zar1 = ",#sayı
bas2:
random sayı1
sayı1= sayı1 & %00000111
ıf sayı1=0 or sayı1=7 or sayı= sayı1 then goto bas2
lcdout $fe,$c0,"zar2 = " ,dec sayı1
pause 500
goto buton
end
|
|
|
|
ta2mc | | Tarih: 26.11.2007, 19:15 Mesaj konusu: | |
| Random komutu ile kullanacağınız değişkenin BYTE değil, WORD olarak tanımlanması gerekiyor.
Programın tamamını incelemedim. Ancak değiştirdiğiniz taktirde sanırım (umarım) çalışacaktır.
Kolay gelsin.
|
|
ete | | Tarih: 26.11.2007, 21:37 Mesaj konusu: | |
| random komutu word tipi değişkenle çalışır ve 0-65535 arası rastgele sayı üretir. istediğin aralıkta saıyı üretmek için aşağıdaki satırları kullan.
sayi var word
zar var sayi.byte0
basla:
random sayi
if zar=0 or zar>6 then basla
lcdout $fe,2,"zar=", dec zar
pause 200
goto basla
ete
|
|
ta2mc | | Tarih: 27.11.2007, 00:20 Mesaj konusu: | |
| "zar var sayi.byte0 " yerine;
"zar = sayi DIG 0" tanımlamasının kullanılması daha uygun olur.
(sayi var word şeklinde önceden tanımlanmak şartıyla)
Zira byte olarak tanımlanan değişken 0-255 arası değer alacak ve "if zar=0 or zar>6 then.." şartını sağlayan değeri bulması çok uzun zaman alabilecektir. Oysa sıfırıncı digit alınırsa, kritere uyan değere rastlama ihtimali misli misli yüksek olacaktır. (0-9 arası)
Veya, daha da kolayı; en soldaki (4.) digit dikkate alındığı taktirde zaten 0-6 arası bir sayı olacağından, altıdan büyük olup-olmadığının kontrolüne de gerek kalmayacak, dolayısı ile sıfırın haricindeki tüm değerler, şartı sağlamış olacaktır.
|
|
melih | | Tarih: 27.11.2007, 17:43 Mesaj konusu: | |
| merhaba projeyi tamamladım.ekranda 2 zar değerini de görebilmek için aynı komutu tekraladım ve ekrana yazdım.sayı değerleri hep çift geliyordu.(1-1,5-5,4-4)bunu engelemek içinde if zar2=0 or zar2>6 or zar1=zar2 then bas2 ekledim şimdi program isteğim gibi çalışıyor.yardımlarınızdan dolayı teşekkürler.
trısb=1
trısd=0
define osc 4
define lcd_dreg portd
define lcd_dbıt 4
define lcd_rsreg porte
define lcd_rsbıt 0
define lcd_ereg porte
define lcd_ebıt 1
portb=1
portd=0
sayı1 var word
sayı2 var word
zar1 var sayı1.byte0
zar2 var sayı2.byte0
adcon1 = 7
low porte.2
pause 100
lcdout $fe, $80,"zar degerı "
buton:
ıf portb.0=0 then goto basla
goto buton
basla:
bas1:
random sayı1
if zar1=0 or zar1>6 then bas1
lcdout $fe,$80," zar1 = ", dec zar1
pause 200
bas2:
random sayı2
if zar2=0 or zar2>6 or zar1=zar2 then bas2
lcdout $fe,$c0," zar2 = ", dec zar2
pause 200
goto buton
end
|
|
ozgurbaba1 | | Tarih: 29.11.2007, 02:58 Mesaj konusu: | |
| Ama bu seferde hiç çift gelmeyecek. Tavlada önemlidir çiftler :)
|
|
melih | | Tarih: 29.11.2007, 12:26 Mesaj konusu: | |
| Haklısın ozgurbaba1 şimdilik bu kadar yapabildim.Onun üzerinde de çalışmak lazım :)
|
|
|
|