DENEYİN ADI 16F84 DENETLEYİCİSİ İLE 2x16 LCD KONTROL DENEY NO 10 AMAÇ : Mikrodenetleyici ile HD44780 uyumlu 2x16 LCD üzerinde mesaj görüntüleme
GENEL BİLGİ : Karakter tabanlı LCD’ler kendi iletişim standartlarına sahip özel devrelerdir. Deney devresinde LCD 4 bit modda kontrol edilmektedir. Ayrıca R/W’ ucu da toprağa bağlanarak 5 tane mcu portundan tasarruf edilmiştir.
Devredeki butonlardan btn1 butonuna basıldığında ekrana mesaj basılmakta, btn2 butınuna basıldığında LCD ekranı silinmektedir. Ders notlarınızdan da yardım alarak deneye ait asm programı inceleyiniz. Ekrana farklı yazılar yazmak için asm programda değişiklik yaparak sonuçları gözleyiniz.
Devre 4 MHz. frekansta çalışmaktadır. Devrenin frekansı değiştirildiğinde bunun için program kodunu da değiştirmeniz gerekebilir. Çünkü LCD birimin komutları algılaması için bir takım zaman gecikmelerine ihtiyaç vardır. Bunlar 4MHz. için yazılmıştır. Frekans değişirse zaman döngülerinin ürettiği sürelerde değişecektir.
DEVRE ŞEMASI :
İŞLEM BASAMAKLARI :
1.. Öncelikle breadboard üzerine deney devresini kurunuz.
2.. Programı text editörde yazınız ve uygun bir klasöre kaydediniz.
3.. Yazdığınız programı MPASM ile derleyiniz, hataları varsa gideriniz.
4.. Elde edilen hex dosyayı programlayıcı yardımıyla 16F84’e yükleyiniz.
5.. Devrenize 5 volt gerilim uygulayın ve devrenizi çalıştırın.
6.. Butonlara basarak etkilerini ledler üzerinde görünüz.
YÜKLENECEK PROGRAM :
; --- 16F84 ile LCD Kontrolü --- 16f84_4bit_lcd.asm LIST P=16F84 ; 16F84 RUNS AT 4 MHZ
INCLUDE "P16F84.INC"
__CONFIG _PWRTE_ON & _XT_OSC & _WDT_OFF
ERRORLEVEL -224 ; SUPRESS ANNOYING MESSAGE FROM TRIS ERRORLEVEL -302 ; SUPRESS MESSAGE FROMF PAGE CHANGE
; DEFINE INFORMATION
#DEFINE RS PORTA, 3
#DEFINE E PORTA, 2 #DEFINE BTN1 PORTA, 0
#DEFINE BTN2 PORTA, 1
;---MACRO
ESTROBE MACRO ; STROBE THE "E" BIT BSF E
BCF E ENDM
CBLOCK 0CH
TEMP ; Gecici degisken
CNTMSEC ; Zaman dongu değişkeni ENDC
ORG 0
GOTO MAIN
;---;
; Mesaj Ciktilari icin Bilgiler ;
;---;
SHOMSG: ; Mesaj goster ADDWF PCL, F
M0 DT "AD SOYAD : AHMET YILMAZ", 0 M1 DT "NO : 571", 0
;---;
; INITIALIZE THE PORTS ;
;---;
INIT:
CLRF PORTA CLRF PORTB
MOVLW B'00010011' ; TRIS PORTA
MOVLW B'11110000' TRIS PORTB RETURN
;---;
; INITIALIZE THE LCD ;
;---;
INITLCD:
MOVLW D'40'
CALL NMSEC ; WAIT 40 MSECS BEFORE RESET
BCF RS ; SEND AN 8 BIT INSTRUCTION
MOVLW 0X03 ; RESET COMMAND
CALL NYBBLEOUT ; SEND THE NYBBLE
CALL DLAY5 ; WAIT 5 MSECS BEFORE SENDING AGAIN ESTROBE
CALL DLAY160 ; WAIT 160 USECS BEFORE SENDING 2ND TIME ESTROBE
CALL DLAY160 ; WAIT 160 USECS BEFORE SENDING 3RD TIME BCF RS ; SEND AN 8 BIT INSTRUCTION
MOVLW 0X02 ; SET 4 BIT MODE CALL NYBBLEOUT
CALL DLAY160
MOVLW 0X028 ; 4 BIT, 2 LINE, 5X7 FONT CALL SENDINS
MOVLW 0X010 ; DISPLAY SHIFT OFF CALL SENDINS
MOVLW 0X001 ; CLEAR THE DISPLAY RAM CALL SENDINS
CALL DLAY5 ; NOTE, CAN TAKE UP TO 4.1 MSECS MOVLW 0X006 ; INCREMENT CURSOR
CALL SENDINS
MOVLW 0X00C ; DISPLAY ON CURSOR OFF CALL SENDINS
RETURN
CLRDISP
MOVLW 0X001 ; CLEAR THE DISPLAY RAM CALL SENDINS
CALL DLAY5 ; NOTE, CAN TAKE UP TO 4.1 MSECS RETURN
;---;
; SEND THE CHARACTER IN W OUT TO THE LCD ;
;---;
SENDASCII
ADDLW '0' ; SEND NBR AS ASCII CHARACTER SENDCHAR ; SEND THE CHARACTER TO THE LCD MOVWF TEMP ; SAVE THE TEMPORARY VALUE SWAPF TEMP, W ; SEND THE HIGH NYBBLE BSF RS ; RS = 1
CALL NYBBLEOUT
MOVF TEMP, W ; SEND THE LOW NYBBLE BSF RS
CALL NYBBLEOUT
RETURN
;---;
; SEND AN INSTRUCTION IN W OUT TO THE LCD ;
;---;
SENDINS ; SEND THE INSTRUCTION TO THE LCD
MOVWF TEMP ; SAVE THE TEMPORARY VALUE SWAPF TEMP, W ; SEND THE HIGH NYBBLE BCF RS ; RS = 0
CALL NYBBLEOUT
MOVF TEMP, W ; SEND THE LOW NYBBLE BCF RS
CALL NYBBLEOUT
RETURN
;---;
; SEND THE NIBBLE IN W OUT TO THE LCD ;
;---;
NYBBLEOUT ; SEND A NYBBLE TO THE LCD MOVWF PORTB
ESTROBE ; STROBE OUT THE LCD DATA CALL DLAY160 ; DELAY FOR 160 MSEC
RETURN
;---;
; OUTPUT THE MESSAGE ON THE LCD ;
;---;
OUTMESSAGE:
MOVWF FSR ; POINT AT FIRST LETTER OUTLOOP:
MOVF FSR, W ; GET POINTER INTO W INCF FSR, F ; SET UP FOR NEXT LETTER
CALL SHOMSG ; GET CHARACTER TO OUTPUT IORLW 0 ; AT THE END OF THE MESSAGE?
BTFSC STATUS, Z ; SKIP IF NOT AT END RETURN ; YES - EQUAL TO ZERO
CALL SENDCHAR ; OUTPUT THE ASCII CHARACTER GOTO OUTLOOP ; GET THE NEXT CHARACTER
;---;
; TIME DELAY ROUTINES ;
;---;
DLAY160
MOVLW D'40' ; 160 USEC DELAY ENTRY POINT MICRO4
ADDLW H'FF' ; SUBTRACT 1 FROM 'W' BTFSS STATUS,Z ; SKIP WHEN YOU REACH ZERO GOTO MICRO4 ; MORE LOOPS
RETURN DLAY5:
MOVLW D'5' ; 5 MSEC DELAY ENTRY POINT
GOTO NMSEC
MSEC250: ; A SUBROUTINE TO DELAY 250 MSEC MOVLW D'250'
;*** N MILLISECOND DELAY ROUTINE ***
NMSEC:
MOVWF CNTMSEC ; DELAY FOR N (IN W) MILLISEC MSECLOOP:
MOVLW D'248' ; 1 USEC FOR LOAD
CALL MICRO4 ; THIS INSTRUCTION IS 995 USEC NOP ; 1 USEC
DECFSZ CNTMSEC,F ; 1 USEC, (2 IF SKIP TAKEN) GOTO MSECLOOP ; 2 USEC HERE 995+5 = 1 MSEC
RETURN
;---;
; ANA PROGRAM BLOĞU ;
;---;
MAIN:
CALL INIT ; Program ayarları yükleniyor.
CALL INITLCD ; LCD ayarları yükleniyor.
REPEAT
BTFSS BTN1 ; 1nci buton basıldı mı?
CALL CLRDISP ; Ekranı sil.
BTFSS BTN2 ; 2nci buton basıldı mı?
GOTO WRITE ; Ekrana mesajı yaz.
GOTO REPEAT ; Butonları kontrole devam et.
WRITE ; Mesaj yazılıyor…
MOVLW H'80' ; İlk satır ilk sütun ayarlandı.
CALL SENDINS ; Konuma pozisyon al.
MOVLW M0 -2 ; İlk satır mesajını ayarla.
CALL OUTMESSAGE ; İlk satır mesajını yaz.
MOVLW H'C0' ; İkinci satır ilk sütunu ayarlandı.
CALL SENDINS ; Konuma pozisyon al.
MOVLW M1 -2 ; İkinci satır mesajını al.
CALL OUTMESSAGE ; İkinci satır mesajını yaz.
GOTO REPEAT ; Mesaj yazıldı. Buton kontrolüne devam..
END ; PROGRAM SONU
SORULAR
1.. Ekrandaki mesajı kendi adınız ve numaranıza uygun olarak değiştiriniz. Adınızı ve soyadınızı yazmak istediğinizde LCD ekranına sığıyor mu?
(Öğretmeniniz deney kontrolü sırasında sizden başka mesajlar yazmanızı isteyecektir. Bunun için devreniz çalıştıktan sonra kendiniz farklı denemeler yapınız.)
CEVAPLAR :
1..
DENEYE BAŞLAMA DENEYİ BİTİRME DEĞERLENDİRME ÖĞRETMEN KONTROL
TARİH : TARİH : BAŞLAMA BİTİRME
SAAT : SAAT : SOSYAL DİSİPLİN 25 SÜRE : SÜRE : TEKNİK DİSİPLİN 25
ÖĞRENCİ BİLGİLERİ TEKNOLOJİ 35
ADI SOYADI : SÜRE 15 AÇIKLAMA
NUMARASI : TOPLAM 100
SINIF :