Teknikim

Üye Girişi

PIC Uygulamaları 9-LCD'ye Özel Karakter Yazdırma
 

Yazan: Tuna BULUT, Tarih: 25-06-2008 17:35

Okunma Sayısı : 367

Beğenilme : 5

Yayınlama yeri : Dersler, PIC Dersleri

Bu uygulamada LCD’ye nasıl özel karakter yazdıracağımızı göreceğiz. Bir önceki yazıda yaptığımız kayan yazıya bir de zil şekli ekleyeceğiz. Konuya ilişkin devre şemalarını buradan görebilirsiniz.

PIC Assembly Kodu 

;------------------------------16x2 LCD'ye Özel Karakter Yazdırma------------------------

;---------------------------Tuna Bulut tarafından yazıldı-------------------------------------

            LIST     P=16F628A

            INCLUDE  "P16F628A.INC"

            __CONFIG    _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

            CBLOCK  H'20'

            ADRES1

            ADRES2

            MESAJ

            KRKTR

            TEMP

            SAYAC1

            SAYAC2

            ENDC

#DEFINE     RS      PORTA,0

#DEFINE     E       PORTA,1

;-------------------------BAĞLANTILAR----------------------------

;RS=RA0

;E=RA1

;D4..D7=RB0..RB3

;----------------------------------------------------------------

            MOVLW   H'07'

            MOVWF   CMCON ;COMPARATOR ÖZELLİĞİ KAPALI VE PORTA I/O İÇİN AKTİF MODDA

            CLRF    PORTB ;PORTB Yİ SIFIRLA

;GİRİŞ-ÇIKIŞ TANIMLAMALARI

            BANKSEL TRISA ;BANK1 E GEÇİŞ YAP

            CLRF    TRISA ;PORTA NIN BÜTÜN PİNLERİNİ ÇIKIŞ YAP

            CLRF    TRISB ;PORTB NİN BÜTÜN PİNLERİNİ ÇIKIŞ YAP

            MOVLW   H'80'

            MOVWF   OPTION_REG

            BANKSEL PORTB ;TEKRAR BANK0 A GEÇ

            CLRF    PORTB ;PORTB Yİ SIFIRLA

            CLRF    PORTA

            MOVLW   B'10000000'

            MOVWF   ADRES1      ;1.SATIR 1.HÜCRE

            MOVLW   B'11000000'

            MOVWF   ADRES2      ;2.SATIR 1.HÜCRE 

;---------------------KOMUT GÖNDERME MAKROSU------------------------------------

KMT MACRO

            CALL    KISA_GECIKME

            BCF     RS

            BSF     E

            NOP

            BCF     E

            NOP

            ENDM

;--------------------MESAJ GÖNDERME MAKROSU-------------------------------------

MSJ MACRO

            CALL    KISA_GECIKME

            BSF     RS

            BSF     E

            NOP

            BCF     E

            NOP

            ENDM

;------------------KURSÖRÜ BAŞA AL------------------------------------------

            MOVLW   D'02'

            MOVWF   PORTB

            KMT

;-----------------LCD'Yİ 4 BİT 2 SATIRA AYARLA, B'00101000'-----------------

            CALL    UZUN_GECIKME

            MOVLW   B'00000010' ;ÖNCE ÜST 4 BİTİ GÖNDER

            MOVWF   PORTB

            KMT

            MOVLW   B'00001000' ;SONRA ALT 4 BİTİ

            MOVWF   PORTB

            KMT

;------------------EKRANI AÇ VE KURSÖRÜ KAPAT-------------------------------------

            CALL    UZUN_GECIKME

            CLRF    PORTB       ;ÜST 4 BİTİ GÖNDER

            KMT

            MOVLW   B'00001100' ;ALT 4 BİTİ GÖNDER

            MOVWF   PORTB

            KMT

;-----------------ARTIŞ SAĞA DOĞRU-----------------------------------------------------

            CALL    UZUN_GECIKME

            CLRF    PORTB       ;ÜST 4 BİTİ GÖNDER

            KMT

            MOVLW   B'00000110' ;ALT 4 BİTİ GÖNDER

            MOVWF   PORTB

            KMT

 

;-----------------EKRANI TEMİZLE-------------------------------------------

TEMIZLE MACRO

            CALL    UZUN_GECIKME

            CLRF    PORTB       ;ÜST 4 BİTİ GÖNDER

            KMT

            MOVLW   B'00000001' ;ALT 4 BİTİ GÖNDER

            MOVWF   PORTB

            KMT

            CALL    UZUN_GECIKME

            ENDM

;-------------------ÖZEL KARAKTERİ CGRAM'E YÜKLE-------------------------------------           

OZEL_KRKTR

            CLRF    KRKTR

            MOVLW   B'00000100'       ;ÜST 4 BİTİ GÖNDER

            MOVWF   PORTB

            KMT

            CLRF    PORTB             ;ALT 4 BİTİ GÖNDER

            KMT

KARAKTER

            MOVF    KRKTR,W

            CALL    KRKTR_TABLO1   ;TABLOYU ÇAĞIR

            MOVWF   TEMP        ;KARAKTERİ DEĞİŞKENE AT

            XORLW   H'08'       ;8 İLE XOR İŞLEMİ YAP   

            BTFSC   STATUS,Z    ;İŞLEM SONUCU 1 SE BASLA'YA GİT

            GOTO    BASLA

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            INCF    KRKTR,F     ;KRKTR DEĞİŞKENİNİ 1 ARTIR

            GOTO    KARAKTER                                  

;-----------------BİRİNCİ MESAJI GÖNDER-------------------------------------------

BASLA 

            CALL    ADRESE_GIT1

            CLRF    KRKTR

MSJ_GONDER

            MOVF    KRKTR,W

            CALL    MESAJ1      ;MESAJI ÇAĞIR

            MOVWF   TEMP        ;KARAKTERİ DEĞİŞKENE AT

            XORLW   H'08'       ;8 İLE XOR İŞLEMİ YAP   

            BTFSC   STATUS,Z    ;İŞLEM SONUCU 1 SE 2. MESAJI YAZ

            GOTO    M_DEVAM

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            INCF    KRKTR,F     ;KRKTR DEĞİŞKENİNİ 1 ARTIR

            GOTO    MSJ_GONDER

;----------------İKİNCİ MESAJI GÖNDER---------------------------------------------

M_DEVAM

            CALL    ADRESE_GIT2

            CLRF    KRKTR

MSJ_GONDER2

            MOVF    KRKTR,W

            CALL    MESAJ2      ;MESAJI ÇAĞIR

            MOVWF   TEMP        ;KARAKTERİ DEĞİŞKENE AT

            XORLW   H'08'       ;8 İLE XOR İŞLEMİ YAP

            BTFSC   STATUS,Z    ;İŞLEM SONUCU 1 SE SONSUZ DÖNGÜYE GİR

            GOTO    KAYDIR

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            SWAPF   TEMP,F      ;DEĞİŞKENİN ALT 4 BİTİYLE ÜST 4 BİTİNİ ARALARINDA DEĞİŞTİR

            MOVF    TEMP,W

            MOVWF   PORTB

            MSJ

            INCF    KRKTR,F     ;KRKTR DEĞİŞKENİNİ 1 ARTIR

            GOTO    MSJ_GONDER2

;----------------------------------------------------------------------------------

MESAJ1

            ADDWF   PCL,F

            DT      "www.t-robot.info",8    ;Tırnak içindeki karakterleri ve 8 rakamını döndürür

            MOVF    PCL,W

            RETURN

MESAJ2

            ADDWF   PCL,F

            DT      0,"LCD UYGULAMASI",0,8  ;Tırnak içindeki karakterleri ve belirtilen rakamları sırasıyla döndürür

            MOVF    PCL,W

            RETURN

;---------------------------ZİL ŞEKLİ-------------------------------------------------

KRKTR_TABLO1

            ADDWF   PCL,F                  

            RETLW   H'04'

            RETLW   H'0E'

            RETLW   H'0E'

            RETLW   H'0E'

            RETLW   H'1F'

            RETLW   H'00'

            RETLW   H'04'

            RETLW   8

;----------------1.SATIRDA BELİRTİLEN ADRESE GİT-------------------------------------

ADRESE_GIT1

            SWAPF   ADRES1,F

            MOVF    ADRES1,W

            MOVWF   PORTB

            KMT

            SWAPF   ADRES1,F

            MOVF    ADRES1,W

            MOVWF   PORTB

            KMT

            RETURN

;----------------2.SATIRDA BELİRTİLEN ADRESE GİT---------------------------

ADRESE_GIT2

            SWAPF   ADRES2,F

            MOVF    ADRES2,W

            MOVWF   PORTB

            KMT