LCD ekranlara yazı yazdırmak için kullanılan komuttur. 

LCDOUT komutu istediğimiz veriyi LCD nin ekranına yazdırmamızı sağlayan komuttur.

LCDOUT $FE,1,? Yazılmak istenen?    şeklinde yazılır. Burada 2X16 bir LCD kullanılıyorsa 2 satır 16 karakterlik bir yazım alanımız var demektir. Ekrana yazılacaklar LCDOUT komutunda tırnak içinde bulunan kısımdır. Bu kısım toplam 16 karakter içerebilir.

LCDOUT $FE,1,? 1. satır?        Şeklinde yazılırsa ilk satıra

LCDOUT $FE,$C0,? 2. satır?   Şeklinde yazılırsa ikinci satıra yazılır

End ile program sonu

Yeni bir örnek ile devam edelim. Bu örneğimizde pic?e butonlarla 0, 350 arası yukarı aşağı sayı saydıralım. Devre şemamız şu şekilde

Pic Basıc Programı şu şekilde

[code]
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
TRISA=%00000011
TRISB=0

CMCON=7 'komparatör pinleri iptal hepsi giriş çıkış yapıldı
OPTION_REG.7=1 'portB deki dahili PULL-UP lar iptal edildi.

DEFINE LCD_DREG PORTB 'LCD data bacakları B portuna bağlı
DEFINE LCD_DBIT 4 'LCD data bacakları 4. bitten başlıyor
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı B pportuna bağlı
DEFINE LCD_RSBIT 2 'LCD RS bacağı 2. bite bağlı
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı B portuna bağlı
DEFINE LCD_EBIT 3 'LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_BITS 4 'LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 'LCD 2 sıralı
PAUSE 1000

SYMBOL yukari=porta.1 'yukarı tusu porta.1 e atandı
SYMBOL asagi=porta.0 'asağı tusu porta.0 a atandı
x VAR WORD 'X DEĞİŞKENİ WORD OLARAK TANIMLANDI

X=0 'X'e sıfır değeri atandı
GOSUB GOSTER

Basla:
IF YUKARI=0 THEN
X=X+1
IF x=350 THEN X=0
ENDIF
GOSUB goster
IF ASAGI=0 THEN
x=x-1
IF x=0 THEN X=350
ENDIF
GOSUB goster
GOTO BASLA
goster:
LCDOUT $FE,1 'LCD 'yi sil
LCDOUT $FE,$83,"sayi =",#x 'LCD ye devre yapimi yazdı
PAUSE 30
RETURN
END
[/code]

Bu programda yeni komutlar ve işlemler görüyoruz hemen açıklamasına geçersek

@ işareti assebly komutlarını pic basıcta kullanmamızı sağlayan bir komuttur. İlk olarak kullandığımız işlemcinin 16f628 olduğunu tanımlıyoruz, daha sonra Watch Dog Timer On yani açık yapılıyor. Sonra Power on Timer açık olarak ayarlanıyor.4. satırda Kod Protek kapalı ayarlanıyor bu komutun off olması önemli çünkü bu komutun on (açık) olması demek bu işlemciye programı yaz ve bir daha okunmamak ve yazılmamak üzere işlemciyi mühürle demektir. Bunu yalnızca işlemcinin okunmasını veya yazılmasını istemediğinizde kullanmalısınız.16f628 in  iki güzel özelliği var birincisi MCLR pinine bağlı iç bir pull-up direnci var MCLR_OFF ile bunu devreye sokuyoruz ve hem bir dış elemandan kurtuluyoruz hemde bir giriş pini kazanıyoruz, fakat kaybettiğimiz reset ucudur. İkincisi ise işlemcinin içinde bir dahili osilatörün olmasıdır INTRC_OSC_NOCLKOUT komutu ile bu dahili osilatörüde devreye alıyoruz böylece çevresel elemanlar olan kondansatörler ve kristalden kurtulmuş ve ayrıca 15 ve 16. pinleri kazanmış oluyoruz. Sonuç olarak son iki kumut bize 3 pin kazandırıyor ve bizi çevresel elemanlardan kurtarıyor pic?in çalışması için sadece besleme gerilimi vermemiz yeterli fakat bu özellik her picte yok örn. 16f84 ve 16f877 de yokken 16f628 de var. En sağlamı kullanacağınız işlemcinin DATASHEET?ine bakmak

Bu program akışında yeni bir komut ise SYMBOL komutu bu komut her defasında port numarasını yazmamamız ve büyük programlarda karışıklığa mahal vermememiz için bize çok kolaylık sağlıyor. Port numarasına bir isim vererek port numarası yerine o ismi kullanıyoruz.

SYMBOL       isim= port no

X değişkeni WORD tipinde tanımlanmış yani 2 üsü 16 dan 65535 e kadar değer alabilir eğer BYTE tipinde tanımlasaydık 2 üssü 8 den 255 e kadar değer alabilecekti dolayısı ile 0 dan 350?ye kadar saydıramayacaktık. İlk başlangıç değeri olarak x değişkenine 0 atadık ve gosub komutu ile bu 0 sayısının goster alt programına dallanarak LCD de görünmesini sağladık

GOSUB komutu bu komutunun işleyişi GOTO komutuna beziyor fakat bir farkı var o da program GOSUB?tan sonra belirlenen etikete gider o işlemi gerçekleştirir, RETURN komutuna gelince kendisini gönderen GOSUB komutundan sonra bir alt satırdan devam eder.GOSUB komutu RETURN komutu ile kullanılır ve genelde alt programcıklara dallanmamızı sağlar. Bir not daha vermek gerekirse bir programda çok fazla GOTO komutu olması istenmez bu program akışında karmaşaya neden olur.

Programımız goster alt programına dallandığında karşılaştığı ilk komut LCDOUT $FE,1   komutudur. Bu komut LCD?yi silerek temizler.fakat ekranda bir göz kırpmaya neden olur.Komutu kullanmamızın amacı # ile yazdırdığımız rakamlarda LCD rakamı hafızasında saklar biz 3 haneli sayıdan sonra 1 haneli sayıya dönsek diğer sayıları da ekranda göreceğimiz için sayılarda karmaşa olmasını önlemektir.

LCDOUT $FE,$83,”sayi =”,#x   bu satırdaki komut kısaca şöyle $83 üst satırda 3. karakterden başlayarak ?sayi =? ifadesini yaz daha sonra # ile x değerini ekranda göster demektir.

Daha sonra PAUSE 30 ile 30 ms bekletme yaparak ekranda yazanları görünür hale getiriyoruz eğer bu komutu kullanmazsak ekrandakiler çok hızlı değişir ve biz bu değişimi algılayamayız. Ekrandakileri gerçek devre uygulamasında görmemiz için yapmamız gereken ayrıca bri şeyde kontras ayarıdır. Bu ayar yapılmazsa ekran çok parlak olacağı için ekranda yazanları göremeyiz. PAUSE komutundan sonra RETURN komutu bizi gosub komutundan bir sonraya yani basla etiketine gönderir.

Basla komutundan sonra yapılan yukarı tuşu sıfır olması durumunda x?i bir artırır daha sonra x in durumunu kontrol edip eğer 350 ye varmış ise x?i tekrar sıfıra eşitler sonra GOSUB komutu ile LCD ye x?in değeri yazılır tekrar geri döner veaşağı tuşuna basılımı diye bakar eğer değilse basla etiketine gider ve tekrar aynı işlemleri tekrarlar. Eğer aşağı tuşuna basılmış ise x ten 1 çıkarır 0 olması durumunu kontrol eder ve ekranda gösterir. Yukarı tuşuna basılmış mı diye bakar eğer basılmamışsa basılana kadar veya elimizi butondan çekene kadar aynı işlemi yapar.

Goster etiketinin altındaki program başka bir şekilde de yazılabilir bu şöyledir

[code]
goster:
LCDOUT $FE,$83,"sayi =",DEC3 x 'LCD ye devre yapimi yazdı
PAUSE 30
RETURN
[/code]

LCDOUT komutu içinde kullanılan DEC komutu x değikeninin ekranda desimal (onluk tabanda) gösterilmesini sağlar hemen yanındaki 3 rakkamı ise bu sayının 3 hane olarak gösterileceğini anlatır.3 haneden küçük sayılarda hane sayısını doldurmak için sayının soluna 0 eklenir. en fazla 5 hane için kullanılabilir ve ekranı silerek temizlemek gerekmez. DEC yerine HEX yazarak hexadecimal, BIN yazarak binary karşılıklarını ekrana yazdırabiliriz.

[code]
LCDOUT $FE, 1, "Merhaba" ' Ekranı temizle ve "Merhaba" yaz
LCDOUT $FE,$C0,"Dunya" ' 2. satıra git ve "Dünya" yaz
[/code]

Yukardaki program lcd’ye “Merhaba Dünya” yazdırır. LCD bağlantısını gösteren Proteus dosyasını ve yukarıdaki programın HEX, ASM ve PBP dosyalarını indirmek için tıklayın





Facebookta Paylas







Benzer Yazılar

PicBasic Pro – @ Komutu

Bu yazımızda Picbasic Pro'da kullanılan @ komutundan bahsedeceğiz @ komutu satırın başında kullanıldığında Picbasic Pro programının içine

PicBasic Pro – GOSUB Komutu

GOSUB komutu programı belirlenen etikete yönlendirip etiketteki kodlar bitince RETURN komutu ile geldiği satıra geri dönmesini sağlayan koddur.

PicBasic Pro – IF…THEN Komutu

IF..THEN komutu, bir şart sağlandığında veya sağlanmadığında çalıştırılması gereken komutları belirlemeye yarayan komuttur.