avatar_ete

Kayan Yazı Örnek Çalışması

Başlatan ete, 19 Ocak 2013, 12:46:42

ete

Sık sık kayan yazılarla ilgli istekler alıyorum. Aslında sevmediğim bir konu. Çok fazla beyin Jimnastiği gerektiriyor.
Ama bir arkadaşınıza yerdım ederken işin temel prensiplerinide ortaya koyan bir sistemi örnek çalışma olarak hazırlayıp bu işe kafa yoracaklara yol göstereyim istedim.
İlişikteki dosyada yer alan sistem 3 adet 8x8 matrix dispaly kullanan bir sistem. Matrix adedi elbette artırılabilir.
Her artırılan display için programa DISPn[8] şeklinde dizi değişkeni ilave etmek gerekir. Onun yanında TEMPn değikenini de programa ilave edip kodları çoğullamak gerekir.
Bu örneklerde yer alan n harfi sıradaki sayıyı belirliyor. Mevcut sistemde 3 adet olduğuna göre n=3 imiş o halde yeni bir display ilave ederseniz n=4 olacak ve böylece DISP4[8] değişkeni, TEMP4 değişkeni programa ilave edilecektir.

Eminim yine birileri soracak 2 tane displayilave etsem ne yapacağım diye burada onu açıklıyorum umarım sormazsınız.
İşin karmaşık olduğunu söylemiş idim. Bilmeyen yada anlamayan en iyisi bulaşmasın.
Gerek Shift registerlere aktarma işinde gerekse kaydırma işlemlerinde yeni (ilave) display kodları programa ilave edilmelidir. Nasıl olacağını anlamak zor değil sanırım.
Shift registerler ile ilgili olanını ben anlatayım,
Orada ki mevcut koda bakarsak;
AKTAR:
    TEMP1=DISP1[I]:TEMP2=DISP2[I]:TEMP3=DISP3[I]   'HER BİR HARFİN SATIR BİLGİSİ SHİFT REGİSTERE VERİLDİ
    SHIFTOUT DTA,CLK,1,[TEMP3,TEMP2,TEMP1]
    PULSOUT OE,1                 'VERİLENLERİN ÇIKIŞA AKTARILMASI SAĞLANDI
    RETURN

Bu koda yeni display şöyle ilave edilecektir.;
AKTAR:
    TEMP1=DISP1[I]:TEMP2=DISP2[I]:TEMP3=DISP3[I]:temp4=DISP4[I]   'HER BİR HARFİN SATIR BİLGİSİ SHİFT REGİSTERE VERİLDİ
    SHIFTOUT DTA,CLK,1,[TEMP4,TEMP3,TEMP2,TEMP1]
    PULSOUT OE,1                 'VERİLENLERİN ÇIKIŞA AKTARILMASI SAĞLANDI
    RETURN

Gördüğünüz gibi bu kısım son derece kolay.
birde kaydırmaya örnek vereyim isterseniz. Rastgele birini seçelim diyelimki aşağı kaydırmayı seçtik. Mevcut kodlar şöyle;
KAYDIR_ASAGI:
      TEMP1= DISP1[7]:TEMP2=DISP2[7]:TEMP3=DISP3[7] 'SONBITLER YERİNE YENİSİ GELECEĞİ İÇİN KAYIT EDİYORUZ     
      for X=7 to 1 step -1
        DISP1[X]=DISP1[X-1] 'BIR BITI BİR ÖNCEKİ BİT İLE YER DEĞİŞTİRİYORUZ
        DISP2[X]=DISP2[X-1]
        DISP3[X]=DISP3[X-1]
      next
      DISP1[0]=TEMP1:DISP2[0]=TEMP2:DISP3[0]=TEMP3 'KOPYALADIĞIMIZI İLK BİTE AKTARIYORUZ.
      RETURN

Bunu ilave displaye göre tadil edersek şunları yapmamız gerekecek.
KAYDIR_ASAGI:
      TEMP1= DISP1[7]:TEMP2=DISP2[7]:TEMP3=DISP3[7]:TEMP4=DISP4[7] 'SONBITLER YERİNE YENİSİ GELECEĞİ İÇİN KAYIT EDİYORUZ     
      for X=7 to 1 step -1
        DISP1[X]=DISP1[X-1] 'BIR BITI BİR ÖNCEKİ BİT İLE YER DEĞİŞTİRİYORUZ
        DISP2[X]=DISP2[X-1]
        DISP3[X]=DISP3[X-1]
        DISP4[X]=DISP4[X-1]
      next
      DISP1[0]=TEMP1:DISP2[0]=TEMP2:DISP3[0]=TEMP3:DISP4[0]=TEMP4 'KOPYALADIĞIMIZI İLK BİTE AKTARIYORUZ.
      RETURN

Hepsi bu kadar.
Sağa yada sola kaydırmalar biraz daha komplike o nedenle bir tanede ona örnek vereceğim.

Sağa kaydırmaya bakalım;
KAYDIR_SAGA:
       FOR X=0 TO 7
         TEMP1=DISP1[X]:BIT1_7=TEMP1.7 'DISP1 in 7. ci bitini aldık
         TEMP2=DISP2[X]:BIT2_7=TEMP2.7   'DISP2 nin 7 nolu bitini aldık
         TEMP3=DISP3[X]:BIT3_7=TEMP3.7
         
         TEMP1=TEMP1<<1:TEMP1.0=BIT3_7 'DISP1'İ 1 BİT SOLA KAYDIRIP SIFIR NOLU BİTİNE DSP2 NİN 7 NOLU BİTİNİ KOYDUK     
         DISP1[X]=TEMP1 'KAYDIRILAN DATAYI TEKRAR DİZİ YE YERLEŞTİRDİK   
         
         TEMP2=TEMP2<<1:TEMP2.0=BIT1_7
         DISP2[X]=TEMP2
         
         TEMP3=TEMP3<<1:TEMP3.0=BIT2_7
         DISP3[X]=TEMP3
       NEXT
       RETURN

Display ilave edince değişen kodlar şöyle olacak;
KAYDIR_SAGA:
       FOR X=0 TO 7
         TEMP1=DISP1[X]:BIT1_7=TEMP1.7 'DISP1 in 7. ci bitini aldık
         TEMP2=DISP2[X]:BIT2_7=TEMP2.7   'DISP2 nin 7 nolu bitini aldık
         TEMP3=DISP3[X]:BIT3_7=TEMP3.7
         TEMP4=DISP4[X]:BIT4_7=TEMP4.7
         
         TEMP1=TEMP1<<1:TEMP1.0=BIT4_7 ' ENSONDAKİ BİTİ EN BAŞA ALIYORUZ
         DISP1[X]=TEMP1 'KAYDIRILAN DATAYI TEKRAR DİZİ YE YERLEŞTİRDİK   
         
         TEMP2=TEMP2<<1:TEMP2.0=BIT1_7
         DISP2[X]=TEMP2
         
         TEMP3=TEMP3<<1:TEMP3.0=BIT2_7
         DISP3[X]=TEMP3
         
         TEMP4=TEMP4<<1:TEMP4.0=BIT3_7
         DISP4[X]=TEMP4
       NEXT
       RETURN 


Gördüğünüz gibi karmaşık ama zor değil. Temel mantık şu ne tarafa kaydırıyorsanız bir bit boşa çıkıyor ona da diğer baştaki biti yerleştiriyoruz böylece yazı kendi içinde dönerek ilerlemiş oluyor.
Dosyalar ilişiktedir.
Ete

haberlesme

Hocam verdiğiniz örneği 8*80 e kadar çıkardım ve adımı soyadımı matrixlerde kaydırabilir hale getirdim displaylerin artışınada örnek olsun.ekte veriyorum.Sağa Aşağı ve Yukarıyıda eklemeye çalışacağım hocam çok teşekkürler bıkmadan sıkılmadan açıklama yaptıgınız ve mantıgını anlamamı sağladıgınız için minnettarım size tekrar teşekkürler.

haberlesme

Buda 8*80 sola kayan biraz önceki dosyanın ETE hocamızın yaptıgı gibi çift yazı gösteren halidir.

MS_59

#3
haberleşme ,
N' harfini ters çevirmişsin tepe takla çıkıyo
j Harfide ters
mehmet

haberlesme

Alıntı yapılan: proteus - 19 Ocak 2013, 20:36:56
haberleşme ,
N' harfini ters çevirmişsin tepe takla çıkıyo
j Harfide ters



proteus,

Ben örnek olarak koydum harfleri oluştururken hatalar olabilir ilgili kodları değiştirerek düzeltebilirsin.Zamanım olursa ilgilenip dosyaları yenilerim uyarın için teşekkürler.

haberlesme

N Ve J harfleri düzeltilmiştir.

ete

Harflerde hala bazı kusurlar var. Aklıma gelenleri söyleyeyim.
Mesela k harfi R harfine benziyor ve karışıyor. K harfinin çıkıntıları düz ve 45 derece açı ile çıkmalı. Sen uçları yuvarlamışsın.

Bazı harfleri 5x7 matrik se sığdırmışsın genelde 6x7 matriks kullanmışsın. Mesela B harfi. Bu durum gözü tırmalıyor. Bana kalırsa ya hepsini 5x7 yap yada 6x7 yap. Böylece yürüyen harfler eşit aralık alır ve göze hoş görünürler.
Ete

haberlesme

Hocam şuan final sınavlarım falan onları anlatıp ve boş zamanlarımda harflerin hepsini dediginiz gibi yapıp yayınlayacağım.Onun harici hocam programlamada bir sorun gözünüze çarptı mı şöyle olsaydı dediginiz.

haberlesme

Programdaki kodları düzelttim hocam ekte veriyorum.Ve tüm harfleri 6*7 formatında hazırladım ekteki not defterindedir.

ete

Kaptın bu işi kim tutar seni. Şaka bir yana teşekkür ederim. İyi oldu bu deneyeyim bakalım.
Ete

haberlesme

Rica ederim Hocam Birşeyler yapabildiysem bu kesinlikle sizin sayenizdedir yani sizin şu yorumunuz bile ne kadar azim verici oluyor Tekrar çok teşekkür ederim.6x7 kodlarda hepsini denedim ama gözümden kaçmışsa hemen düzeltirim.

ete

Haberleşme,
Harf kodları doğru ancak pek çok harfi 8x8 matrix içinde ortalamamışsın.
Bu şu demek harfin solunda ve sağında boş bir sütun olmalı. 6x7 matrix içine sığdırdığımıza göre ilk sütun boş ve son sütun boş olmalıdır.
E  harfi datalarına bakarsak;
$3F  %00111111  bu aslında %01111110 yani $7E olmalı idi.
$01  %00000001 bu aslında %00000010 Yani $02 olmalı idi.
bu şekilde örnek gidiyor.

Ete

haberlesme

Hocam bu sefer tam istediğiniz gibidir ben birçok harfi değil hepsini matrixsin 0 nolu bitinden 6x7 yaptım ortalamamıştım şimdi oldu hocam tüm harfler ortalı bir şekilde ektedir.Hocam bide bu 8x80 lik devrede kırpışmalar falan oluyor bunun dediğiniz parametrelerde oynamalar yapsam da devam ediyor bunun sebebi artık simulasyon ve grafik özelliklerimdendir değil mi program da bir sorun yok çünkü.

elektromanyaq

#13
ETE, hocam ben kayan yazıda matrixleri arttırdım ancak yazının tamamını gosteremedım anımasyonda sadece 3 harf 3 harf   kayıyor  programda yenıyım bazı duzenlemelerı basardım 
64 sutun da yazının tamamını kaydırmam için nasıl bı duzenleme yapmam lazım..

haberlesme

Sorunu hallettim yeni Basic Dosyasını ekte veriyorum sorunu kısaca açıklayayım programda 3 harften sonrasını kopyala yapıştırla gittigin için disp 3 ü gösterdikten sonra yani şurda

            X=x+1:GOSUB YAZI
            GOSUB HARF_SEC
            TEMP1=YERI           
            FOR I=0 TO KACDATA
              YERI=TEMP1+I
              GOSUB DATA_AL
              DISP3[I]=VERI
            NEXT
            YERI=TEMP1 
            RETURN 


return ile beraber kopyaladıgından dolayısıyla program alttaki disp 8 e kadar olan bölümü görmeden return komutuyla geri dönmüştür bunları kaldırınca sorun halledilmiş oluyor dosya ektedir kolay gelsin.

Powered by EzPortal