|
Sayfa 1 Toplam: 2
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
SWAPF ADRES2,F
MOVF ADRES2,W
MOVWF PORTB
KMT
RETURN
KAYDIR
INCF ADRES1,F
MOVF ADRES1,W
ANDLW B'10001111'
MOVWF ADRES1
INCF ADRES2,F
MOVF ADRES2,W
ANDLW B'11001111'
MOVWF ADRES2
CALL UPUZUN_GECIKME
CALL UPUZUN_GECIKME
CALL UPUZUN_GECIKME
TEMIZLE
GOTO BASLA
;-------------------195 MS'LİK GECIKME-----------------------------------
UPUZUN_GECIKME
MOVLW H'FF'
MOVWF SAYAC1
DONGU4
MOVLW H'FF'
MOVWF SAYAC2
DONGU5
DECFSZ SAYAC2,F
GOTO DONGU5
DECFSZ SAYAC1,F
GOTO DONGU4
RETURN
;-------------------25 MS'LİK GECIKME-----------------------------------
UZUN_GECIKME
MOVLW H'FF'
MOVWF SAYAC1
DONGU1
MOVLW D'33'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
;------------------255 US'LİK GECİKME-----------------------------------
KISA_GECIKME
MOVLW H'FF'
MOVWF SAYAC1
DONGU3
DECFSZ SAYAC1,F
GOTO DONGU3
RETURN
END
<< Başa Dön < Önceki 1 2 Sonraki > Sona Git >> |