KAYAN YAZI

Başlatan slymnyaz, 25 Şubat 2016, 22:40:11

slymnyaz

Arkadaşlar merhaba,

Pic basic pro ile ekrana ismimi yürüyen ışıklar gibi yazdırmak istiyorum.

SULEYMAN YAZ
ÖNCE "Z" HARFİ İLK SATIRDAN BAŞLAYARAK SONA GİTSİN.
SONRA "A"  AYNI ŞEKİLDE
SONRA "Y"  AYNI ŞEKİLDE YERİNE GİDEREK "YAZ" TAMAMLANSIN İSTİYORUM.

Yardımcı olursanız sevinirim.

Elzemefe

#1
Formda bu  konuda arama yaptın mı _?
http://etepic.com/index.php?topic=134.0

Formdaki  ilk  mesajın ve  oda yardım değil
direk  istek ....

slymnyaz

Cevap verdiğiniz için teşekkür ederim. Yalnız benim istediğim gibi değil. bende bu konu ile amatör olarak uğraşıyorum yine tekrar inceleyeceğim belgi faydalı olur.

Elzemefe

Biraz uğraş  çabala ve deki  şu  kısmını yapamadım bizde  orda yardımcı  olalım ...

slymnyaz

#4
Öncelikli olarak ilginiz için teşekkür ederim.

Konu ile ilgili internette bayağı araştırma yaptım ama benim istediğim şekilde komut bulamadım.
Benim istediğim aşağıda açıklamasının yaptığım şekilde bir yazdırma istiyorum.

Yardımcı olursanız sevinirim.


LCDOUT $FE,$8C,"Z"
pause 200
LCDOUT $FE,$8B,"A"
pause 200
LCDOUT $FE,$8A,"Y"
pause 200
LCDOUT $FE,$87,"N"
pause 200
LCDOUT $FE,$86,"A"
pause 200
LCDOUT $FE,$85,"M"
pause 200
LCDOUT $FE,$84,"Y"
pause 200
LCDOUT $FE,$83,"E"
pause 200
LCDOUT $FE,$82,"L"
pause 200
LCDOUT $FE,$81,"U"
pause 200
LCDOUT $FE,$80,"S"
pause 200

bu komutlarla tersten başlayarak ismimi yazdırıyorum.

Ancak, ben bunu son harf olan "Z" den başlayarak 1. karakterden, 2. karaktere, sonra 3, sonra 4.  ..... 12 karaktere gidip yerleşsin, sonra diğer harfler aynı şekilde yerine otursun istiyorum.

Z _ _ _ _ _ _ _ _   _ _ _
_ Z _ _ _ _ _ _ _   _ _ _
_ _ Z _ _ _ _ _ _   _ _ _
_ _ _ Z _ _ _ _ _   _ _ _
_ _ _ _ _ _ _ _ _   _ _  Z
Bu şekilde sona gidip yerleşecek.

ete

Bak ismini tersten yazdırıp harflerin nereye gelmesi gerektiğini hesaplamışsın.  Peki neden asıl yapman gereken işe odaklanmamışsın acaba?
Şöyle sesli düşünelim; işlem sırası ile konuşursak,
Z harfi ekranda 1 konumdan 16. Konuma kadar gidecek ama nasıl işte bunu düşün. İp ucu vereyim ekranın 1. Adresi ile son adresi arasında bir döngü kursan ve z harfini bu adreslere döngü içînde yerleştirsen ama arayada biraz gecikme koysan ne olur bir dene istersen.
Ete

slymnyaz

#6
Arkadaşlar Merhaba, önce şunu belirteyim ben bu programlama işi ile amatörce uğraşıyorum ve bu konuda çok yeniyim.

Sağolsun

ETE Hoca'mın yardımıyla aşağıdaki döngüyü oluşturdum.

Harfler dediğim şekilde kayarak gidiyor ama durması gereken yerde durmuyor.
Nasıl bir değişiklik yapmam gerek yardımlarınız için teşekkürler.

TRISB=%00000000
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor




'---------------------------------------D E Ğ İ Ş K E N L E R -------------------------------------------------

'-----------------------------------------------------------------------------------------------------------------
  i var byte
'===============================
TRISB=0
PORTB=0

   
 
For i= 128 to 144 
lcdout $fe,i,"Z"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 143 
lcdout $fe,i,"A"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 142 
lcdout $fe,i,"Y"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 140 
lcdout $fe,i,"N"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 139   
lcdout $fe,i,"A"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 138   
lcdout $fe,i,"M"
pause 30
lcdout $fe,$10," "
  next

For i= 128 to 137 
lcdout $fe,i,"Y"
pause 30
lcdout $fe,$10," "
   next

For i= 128 to 136   
lcdout $fe,i,"E"
pause 30
lcdout $fe,$10," "
   next

For i= 128 to 135   
lcdout $fe,i,"L"
pause 30
lcdout $fe,$10," "
next

For i= 128 to 134 
lcdout $fe,i,"U"
pause 30
lcdout $fe,$10," "
  next

For i= 128 to 133 
lcdout $fe,i,"S"
pause 30
lcdout $fe,$10," "
next

End


KODLARI KOD EKLE(#) BUTONU İLE EKLEYİNİZ !

ete

#7
Yazdığın kodlar yanlış değil. Kim durması gereken yerde durmuyor acaba?.
Bu kodlar 2x16 LCD için doğrudur. Aslında 4x20 LCD de çalışır. Sorun neyse tam olarak açıklaman gerekiyor. Bir kusur göremedim ben.

Ete

Denemeyince insan kusuru göremiyor. Yazı ekranın sonuna gelince siliniyor. Sebebi nex komutundan evvel yer alan bir hane sola al ve bir boşluk yaz komutu. Bu komut ilk başta yer almalı.
For i= 128 to 144  
lcdout $fe,$10," "
lcdout $fe,i,"Z"
pause 30
next

şeklinde.
Ete

slymnyaz

#8
Ete Hocam yine olmadı. 2 saattir uğraşıyorum aşağıda şekilde düzenledim nerde hata yapıyorum anlamadım.
Saygılar.

[/TRISB=%00000000
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor




'---------------------------------------D E Ğ İ Ş K E N L E R -------------------------------------------------

'-----------------------------------------------------------------------------------------------------------------
  i var byte
'===============================
TRISB=0
PORTB=0
   

BASLA:
For i= 128 to 141 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"Z"
pause 100
next

For i= 128 to 140 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"A"
pause 100
next

For i= 128 to 139 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"Y"
pause 100
next

For i= 128 to 137 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"N"
pause 100
next

For i= 128 to 136 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"A"
pause 100
next

For i= 128 to 135 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"M"
pause 100
next

For i= 128 to 134
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"Y"
pause 100
next

For i= 128 to 133 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"E"
pause 100
next

For i= 128 to 132 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"L"
pause 100
next

For i= 128 to 131 
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"U"
pause 100
next

For i= 128 to 130
IF I>128 THEN lcdout $fe,$10," "
lcdout $fe,i,"S"
pause 100
next

ete

Yine siliyor değilmi. Sebep çok basit aslında; LCDOUT komutuna yazma adresi vermez isen daima kaldığı yerden devam eder.
Birinci döngü Z harifini ekranda bir yere kadar getirip bırakıyor. Ama ikinci döngüyü çalıştırınca döngüdeki ilk komut olan LCDOUT $FE,$10," "  komutu bir yazma adresine sahip olmadığı için ilk işi bir önce yazılmış olan karekteri silmek oluyor. Bunu önlemek için ya silme işlemini ilk adresten değilde ikinci adresten başlatmak yada önce kursorü (yazma noktasını) satırın başına almak gerekir. Ben birinci alternatifi tercih ederek bunu yaptım ve yukarıda yazdığın kodları buna göre değiştirdim. Oradan alıp deneyebilirsin.
İKinci metod ile şöyle yapılabilirdi.


LCDOUT $FE,$80 'bu komut yazma noktasını satırın başına alıyor
For i= 128 to 141 
Lcdout $fe,$10," "
lcdout $fe,i,"Z"
pause 100
next

LCDOUT $FE,$80
For i= 128 to 140 
Lcdout $fe,$10," "
lcdout $fe,i,"A"
pause 100
next

LCDOUT $FE,$80
For i= 128 to 139 
Lcdout $fe,$10," "
lcdout $fe,i,"Y"
pause 100
next
..
..

slymnyaz

#10
Erdal Hocam, Merhaba
Her iki kodu da denedim çalışıyor.
Bana bu konuda her daim yardımcı olduğunuz için  çok teşekkür ederim.

İyi Akşamlar dileğimle

Powered by EzPortal