LCD de kayan yazı ile ilgili

Başlatan cyberlight, 19 Nisan 2003, 21:02:41

cyberlight

Aşağıda yaptığım bi programın girişi için düşündüğüm basit bir kayan yazı programı var.(Dehşet bi cümle oldu :))
Yalnız bi problem var."Kalem" yazısını 1.satır 1. sutundan itibaren kaydırabiliyorum.Benim istediğim önce m sonra e sonra l'nin çıkması.
Yani
Kalem
 Kalem
   Kalem değilde;
m
em
lem
alem
Kalem   gibi
Bunun için bi fikri olan var mı?
Bu arada $80'in 1. satır ve 1.sutuna karşılık geldiğini tesadüfen buldum.
$co'ın 2.satır ve 2. sutuna denk geldiğini biliyodum ama aralarında bi bağıntı kuramadım.


program Kalem stringini soldan sağa doğru kaydırıyo, ve kelime ortalarda bi yerde biraz bekliyo.

Define  LCD_DREG        PORTD
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1

c   var byte
p   var word
       
       ADCON1 = 7      ' Set PORTA and PORTE to digital
       Low PORTE.2     ' LCD R/W line low (W)
       Pause 100       ' Wait for LCD to start up

       c = 0
   
       while c =< 20
       Lcdout $fe, $80 + c ,   "Kalem"  

   if c <> 8 then p=100
       if c = 8  then p=3000

       Pause p  
       Lcdout $fe,1            
       c = c + 1
   wend  
       
       End

PicProje

herhangibir LCD pdf sini incelersen 80 ve C0 ın bağlantısını kurabilirsin
driver ic ler genelde standarttır 2x10 lcd dede 2x40 lcd dede bunun için adresler hep 80 ve C0 dan başlar..
programın için bir yöntem yada bir fikir eepromdan okutursan ve lcd nin bütün adreslerini taratırsan daha sonra metini de değiştirmen kolay olur sadece bir öneri
başarılar
İzindeyiz Ulu önder Mustafa Kemal ATATÜRK

kesmez

lcdout $fe,$80,"kalem" yerine
lcdout $fe,$7c,"kalem" yaz ve dene belki olur..
böylece ilk harfin yani "k" adresini 5 önceden başlatırsın.
"İnned dine indallahil İslam" (2-19)

cyberlight

PicProje:
Pdf e bakacağım gerçi 60 sayfa ama olsun :)
Kesmez :
Alıntı Yap
lcdout $fe,$80,"kalem" yerine
lcdout $fe,$7c,"kalem" yaz ve dene belki olur..
Bu dediğnii denemiştim ama öyle olmuyo.
Bu arada sağolun...

kesmez

branch c,[git,git1,git2,git3,git4]     '    lcdout satırından önce  
                                     lcdout $fe,$80+c."kalem"      'sonra lcdout sat
                                     geridon:
                                      .
                                      .
                                     
                                       git: lcdout $fe,$80,""
                                       goto geridon
                                       git1: lcdout $fe,$80,"m"
                                       goto geridon
                                       git2:lcdout $fe,$80,"em"
                                       goto geridon
                                       git3,: lcdout $fe,$80,"lem"
                                       goto geridon
                                       git4:lcdout $fe,$80,"alem"
                                       goto geridon
program kodunun büyümesi basic in en büyük dezavantajı.... Ben burada c de olduğu gibi  "kalem" stringinin başlangıç adresini bilseydim tek bir lcdout ile işi bitirebilirdim.
"İnned dine indallahil İslam" (2-19)

cyberlight

Sağol kesmez.
Olayı çözdüm, sende branch kullanarak farklı bi yaklaşım getirmişsin iyi olmuş ama proteusta simülasyonunu yaptım çalışmadı :)

'*  Author  : Cyberlight                                                           *
'*  Notice  : Copyright (c) 2003                                             *
'*                 All Rights Reserved for miserable days  :)        *
Define  LCD_DREG        PORTD
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1

c   var byte
       
       ADCON1 = 7      ' Set PORTA and PORTE to digital
       Low PORTE.2     ' LCD R/W line low (W)
       Pause 100       ' Wait for LCD to start up
basla :
       c = 0
       while c =< 26
       Lcdout $fe, $80 + c ,   "h"  
       Lcdout $fe, $7f + c ,   "i"  
   Lcdout $fe, $7e + c ,   "t"
   Lcdout $fe, $7d + c ,   "a"
   Lcdout $fe, $7c + c ,   "F"
       Pause 100  

       Lcdout $fe,1            
       c = c + 1
   wend  

goto basla
       End

aster

HEX               AÇIKLAMA
80    1' Cİ SATIR
C0    2' Cİ SATIR
94    3' CÜ SATIR
04    4' CÜ SATIR
13    CURSÖR SOLA
17    CURSÖR SAĞA

LCD İÇİN

XNHCX

;) Tebrikler Dostum   cyberlight  ;)

Yukarıdaki projenin aynısını "PicProje" için yaptım.
LCDde " PicProje " yazarak kayıyor.

Önce  -e
Sonra
-je
-oje
-roje
-Proje
-cProje
-icProje
-PicProje  yazarak sağa doğru kayıyor.

XNHCX

XNHCX

'**********************************************
'*  Name    : Kayanyazı.bas                                                             *
'*  Author  : [set under view...options]                                           *
'*  Notice  : Copyright (c) 2003 [set under view...options]          *
'*          : All Rights Reserved                                                         *
'*  Date    : 31.05.2003                                                                  *
'*  Version : 1.0                                                                               *
'*  Notes   : "PicProje" yazısı sağdan sola kayar.                         *
'*          : Pic16F877 kullanılıyor                                                    *
'**********************************************
Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

c var byte

ADCON1 = 7 ' Set PORTA and PORTE to digital
Low PORTE.2 ' LCD R/W line low (W)
Pause 100 ' Wait for LCD to start up
basla :
c = 0
while c =< 26
Lcdout $fe, $80 + c , "e"
Lcdout $fe, $7f + c , "j"
Lcdout $fe, $7e + c , "o"
Lcdout $fe, $7d + c , "r"
Lcdout $fe, $7c + c , "P"
Lcdout $fe, $7b + c , "c"
Lcdout $fe, $7a + c , "i"
Lcdout $fe, $79 + c , "P"
Pause 100

Lcdout $fe,1
c = c + 1
wend

goto basla
End

'*************************************************

XNHCX

XNHCX

;)   Dostlar ,
Bu aşağıdaki projede de " MERHABA " mesajı soldan sağa doğru kayıyor.
Ama Önce -A, bir karakter sağa kayar.
Sonra    -BA ,BERABERCE bir karakter sağa kayar.
Sonra    -ABA ,BERABERCE bir karakter sağa kayar....
...
*FARKLI BİR YAKLAŞIM*

XNHCX



Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

ADCON1 = 7 ' Set PORTA and PORTE to digital
Low PORTE.2 ' LCD R/W line low (W)
Pause 100 ' Wait for LCD to start up

basla :                                    

                        Lcdout $fe, $80,65            
                        GOSUB  dongu1
                        Lcdout $fe,$81,66,65
                        GOSUB  dongu1
                        Lcdout $fe,$82,65,66,65
                        GOSUB  dongu1    
                        Lcdout $fe, $83,72,65,66,65
                        GOSUB  dongu1
                        Lcdout $fe, $84,82,72,65,66,65
                        GOSUB  dongu1
                        Lcdout $fe, $85,69,82,72,65,66,65
                        GOSUB  dongu1
                        Lcdout $fe, $86,77,69,82,72,65,66,65
                        'Lcdout $fe, $86,95,77,69,82,72,65,66,65
                        'Yukardaki gibi yazıldığında başta imlec oluyor
                        GOSUB  dongu1
                        pause 1000                        
goto basla
             dongu1:    Pause 400
                        Lcdout $fe,1
                       
             return
END  


XNHCX

Digimensch

Burda Kullanilan PIC 16F877 ile LCD arasindaki baglanti ayaklari nasil olacak??
Baglanti semasi veya hangi PIC ayagi hangi LCD ayagina baglanacak belirtebilirmisiniz??

XNHCX

Burada belirtildiği gibi ....

Alıntı YapDefine LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

ADCON1 = 7 ' Set PORTA and PORTE to digital
Low PORTE.2 ' LCD R/W line low (W)

*Define LCD_DREG PORTD ,Define LCD_DBIT 4--->LCD veri bus'ı 4 bitlik ve PortD kullanılıyor.

*Define LCD_RSREG PORTE ,Define LCD_RSBIT 0 ---->LCD yazmaç seçimi PortEnin 0. bitinden yapılmakta.Yani PORTE.0 LCDnin RS ucuna.

*Define LCD_EREG PORTE , Define LCD_EBIT 1------>LCD nin etkin hale getirilmesi PortEnin 1. bitinden yapılmakta.Yani Yani PORTE.1 LCDnin E ucuna.

*Low PORTE.2--->PortE nin 2.biti LCDnin R/W ucuna bağlanacak.Ya da R/W ucuna toprağa çekebilirsiniz.

XNHCX

Dostum yukarıdaki anlattıklarım aşağıdaki şekilde de var.Takip ediniz...
Şekil üyemiz fsan'a aittir



Digimensch

Tamam cok sağol hocam
Ben komutlari sadece bir satir olarak anlamaya calistigim icin bir anlam cikartamamaistim.
Megerse;
define  lcd_dreg    portb 
define  lcd_dbit    4

seklinde dikkate alindiginda
DBIT olarak 4 bit kullanilacak PortB'den
anlami ortaya cikiyor.
ve yine
define  lcd_rsreg   portb 
define  lcd_rsbit   0

PortB'nin 1.Biti RS ucuna baglanacagi anlami ortaya cikiyor.
Yani olayi kavradim tesekkürler.

XNHCX

Alıntı Yapdefine  lcd_rsreg   portb
define  lcd_rsbit   0

PortB'nin 1.Biti RS ucuna baglanacagi anlami ortaya cikiyor.

PortBnin 1.biti derken kastınız ilk bit ise doğru söylüyorsunuz dostum.

Ama Yukardaki ifedeye PortB'nin 0.Biti RS ucuna baglanacak desek daha doğru olur.