lcd ekranda kayan yazı yapmak isityorum

Başlatan emreemre, 04 Nisan 2015, 23:43:59

emreemre

lcd ekrana nasıl kayan yazı yapabilirim hocam mesela emre yazısı sürekli kayacak

onurinci

Device=16F628A
Config CPD_OFF,CP_OFF,BODEN_OFF,MCLRE_OFF,PWRTE_ON,WDT_OFF,INTRC_OSC_NOCLKOUT,LVP_OFF     
Xtal = 4
#define All_Digital = TRUE

Declare LCD_DTPin PORTB.4 ' Used for 4-line interface
Declare LCD_ENPin PORTB.3
Declare LCD_RSPin PORTB.2
Declare LCD_Interface 4
Declare LCD_Lines 2


Dim a As Byte
a = 0
TRISB = 0
    DelayMS 500

basla:

Print $fe,1, "Scrolling text Lcd's test "
    DelayMS 200

For a = 0 To 30
    Print $FE,$1E   ; önce sola kaydır
    DelayMS 150
Next

    DelayMS 1000

For a = 0 To 30
    Print $FE,$18  ;daha sonra sağa kaydır
    DelayMS 150
Next

    DelayMS 2000
    GoTo basla

~ENES~

onur kardeşim bu programın mantığı ne ? baktığımızda a değişkenini for döngüsüyle artırıp her artışla bir karakter kayıyor sanırım.. .ama a değişkeni artınca bu lcd de nasıl kaymaya sebep oluyor ? anlatırsan sevinirim
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

onurinci

maalesef bu kadar yardımcı olabilirim, netten bulduğum bir dosyayı paylaştım.

ete

Programın mantığı tamamen $Fe,$18 komutu ile $FE,$1E komutlarına dayanmaktadır.
LCDOUT (veya Print) $FE,$1E komutu yazınınyazıldığı karekter hafızasını blok olarak alıp bir hafıza sola kaydırma yapar.
Örnekle açıklamak daha doğru. 2x16 karekter LCD kullandığımız varsayarsak ekranın üst satırı için kullanılan hafıza adresleri aşağıdaki şekildedir.

80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8F

LCDOUT $FE,$8D,"ETE" şeklinde bir komut yazarsak, LCD ekranın en üst satırında en sağda ETE yazısını yazar. Yani 8D-8E-8F adreslerine sırası ile ETE yazısı yerleşir. Şayet LCDOUT $FE,$1E komutunu verirsem bu yazı 8C 8D 8E adreslerine kayar. Dikkat ederseniz 1 adres sola kaymış oldu. Bu işlemi E harfini $80 adresine gelinceye kadar tekrarlarsam ETE yazısı sol başa doğru kayar. Tabiiki kaymayı izleyebilmek için araya pause koymanız gerekir. Yoksa bir anda yazı en sola geliverir.

LCDOUT $FE,$18 komutu da bu işlemin tersini yapar. Yani her komut verildiğinde yazı bir hafıza sağa doğru kayar.
Temel prensip budur.
Bu komutun bir sakıncası var. Şayet 4x20 karekterlik ekran kullanırsanız,
Ekran hafıza adresleri
birinci (üst) satır :  $80 - $93
İkinci satır          :  $C0 - $D3
Üçüncü Satır      :  $94 - $A7
Dördüncüü Satır:  $D4 - $E7
Birinci satıra 20 karekterden fazla bir şey yazarsanız taşan kısım üçüncü satırda belirir. Bu nedenle ilk satırda kaydırma yaparsanız ve uzun tutarsanız yazı sağdan sola doğru kayıp 3. cü satıra atlar. Atlamaması için sınırlara dikkat etmek gerekir.
Aynı şekilde 2. satırın taşan kısmı 4. satırda belirir. Çünki adreslerin devamları bu satırlarda yer almaktadır.

Başka bir kaydırma yöntemide yine ekran hafıza adreslerini kullanmaktır.
ETE yazısını soldan sağa kaydırmak için
FOR I=0 to 15
LCDOUT $FE,$80+I,"ETE"
pause 200
Next
derseniz yazı aynı şekilde soldan sağa kayacaktır. Tersini yaparsanız bu seferde sağdan sola kayacaktır.
Bu yöntemde soldan sağa giderken bir karekter atlayarak yazıyı yenidenyazacağımız için bir harf sürekli fazladan ekranda kalır. BUnu önlemek için yazının sol tarafına bir boşluk eklemek yeterli olur. " ETE" şeklinde. Tersini yaparken aynı olay meydana geleceği için en iyisi yazının iki tarafına birer boşluk eklenmelidir.

Ete

~ENES~

Hocam elinize saglik çok iyi anlatmissiniz çok tesekkur ediyorum ..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

emreemre

#6
yazdırabilen var mı ?

Device=16F84A
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.2
Declare LCD_ENPIN PORTB.3
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
ALL_DIGITAL 1
XTAL 4
Dim I As Byte
I=0
TRISB=0
DelayMS 500
basla:                                                                     
For I=0 To 15
Print At $FE,$80+I,"EMRE"
pause 200
Next

GoTo basla
End

hocam bu kadar oluyor

Powered by EzPortal