
Devrenin Çlışması LCD : Programda çıkış olarak B Portu çıkış olarak kullanılmaktadır. Bu port LCD’nin D0-D7 data bağlantı uçlarına bağlanır. Aynı zamanda LCD’nin E ve RS bitleri (LCD’yi aktif yapma ve Data/ komut okuma seçenekleri) PIC’in D0 ve D1 bitleri ile kontrol edilir.
Devrede kullanılan LCD’miz 2*16’lıktır. Yani LCD’miz 2 satır ve 16 sütundan oluşmaktadır. LCD çıkışlarından 15-16. bacaklar kullanılmamaktadır. Çünkü 15 ve 16. bacaklar LCD’nin ışığının yanması için kullanılır. LCD’miz ışıklı olmadığı için de bu bacakları kullanmamıza gerek yoktur.
LCD’nin sadece 1. satırına bilgi yazımı gerçekleşmektedir, 2. satır kullanılmamaktadır. 16 karakter girişi gerçekleştikten sonra LCD ekranı temizlenir, yani reset atılmış olur ve kursör 1. satırın 1. sütununda yanıp sönmeye başlar. Devredeki reset butonuna basıldığında da ekran tazelenir, yani temizlenir ve kursör yine 1. satır 1. sütuna gider. Parlaklık ayarı 1., 2., 3. bitlerin uçlarının pot aracılığı ile kontrolüyle sağlanır. Aslında V0 geriliminin pot ile kontrolü ile gerçekleşir.

Klavye : Devre 4*4 tuş takımıyla yani 16 harfle 2*16’lık LCD ekrana bilgi yazdırma işlemini yapıyor. Tuş takımında 16 harf olduğu için sadece bu harflerle bilgi yazımı gerçekleşmektedir (A-Q harfleri arası). Klavyeden PIC’in C Portu ile giriş alınır. C1-C3 bitleri klavyenin Y1-Y4 satır ve C4-C7 bitleri de klavyenin X1-X4 sütun çıkışlarına bağlıdır.

PIC’imiz ve Kristal Osilatörümüz 4MHz’liktir. PIC’in 1. bacağından 10K ve 100K dirençler ve anahtar aracılığıyla çevresel kesme yani reset alınır. Baskı devrenin şeklinden de görüleceği üzere; plaket üzerinde LCD için 16’lık ve Klavye içinde 8’lik dişi konnektör kullanılmıştır. Bu elemanlarla direk bu konnektörler aracılığı ile bağlantı gerçekleştirilir.
Aynı zamanda 8 tane 33K’lık Pull-Down dirençleri kullanılmıştır. Bunlar klavyeden bir tuşa basıldığında LCD’de kararlı görüntü alabilmeyi yani kararlı girişler alabilmeyi sağlar yani; tuş basımlarında oluşabilecek manyetik ve mekanik kararsızlıkları şaseye vererek sistemin kararlılığını artırır.
Projenin Çalışması : 4*4 Tuş takımı ile LCD ye PIC yardımıyla karekter girişi yapıyor. Devrede tuş takımı bulamadığımız için 16 tane butonla 4*4 lük bir kombinasyon yaptık . bunun dışında devrede bir reset düğmesi ve LCD nin netlik ayarının yapılabildiği bir ayarlı direnc bulunuyor.
Her bir buton alfabeden üç karekteri barındırıyor en alttada iki yöne hareketi sağlayan iki buton bulunuyor,Programı yazmak için PIC BASIC PRO kullanılmıştır. Programın çalışıp çalışmadığını denetlemek için programı anime edebilen ISIS programı kullanılmıştır
Picbasic pro .bas yazılımı
INCLUDE "modedefs.bas" ' Include serial modes
' LCD İletişimi tanımlanı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
define ADC_SAMPLEUS 50
'Program değişkenleri tanımlanıyor
adsonuc var byte
col var byte ' Tuş takımı sütunu
row var byte ' Tuş takımı satırı
sonuc var byte ' Tuş Değeri
satir1 var byte[17] 'LCD'deki birinci satır
satir2 var byte[17] 'LCD'deki ikinci satır
satirno var byte 'aktif satır
artir var byte 'aktif sutun
karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası
aktif_karakter var byte 'kullanılan tuş 1-10
k var byte
tus1 var byte[3]
tus2 var byte[3]
tus3 var byte[3]
tus4 var byte[3]
tus5 var byte[3]
tus6 var byte[3]
tus7 var byte[3]
tus8 var byte[3]
tus9 var byte[3]
tus10 var byte[3]
karakter_no=0
aktif_karakter=1
satirno=1
artir=1
tus1[0]="A"
tus1[1]="B"
tus1[2]="C"
tus2[0]="D"
tus2[1]="E"
tus2[2]="F"
tus3[0]="G"
tus3[1]="H"
tus3[2]="I"
tus4[0]="J"
tus4[1]="K"
tus4[2]="L"
tus5[0]="M"
tus5[1]="N"
tus5[2]="O"
tus6[0]="P"
tus6[1]="Q"
tus6[2]="R"
tus7[0]="S"
tus7[1]="T"
tus7[2]="U"
tus8[0]="V"
tus8[1]="W"
tus8[2]="X"
tus9[0]="Y"
tus9[1]="Z"
tus9[2]=" "
for k=1 to 16
satir1[k]= " "
next
for k=1 to 16
satir2[k]= " "
next
'Değişkenler sıfırlanıyor
OPTION_REG.7 = 0 ' Enable PORTB pullups
ADCON1 = 7 ' Porta ve porte dijital yapılıyor
Low PORTE.2 ' LCD R/W low (write)
Pause 100 ' LCD yi başlatmak için bir süre bekleniyor
'Açılış mesajı gönderilecek
trisc =%11110000
ADCON1 = %00000100
'Eeproma ilk şifre kaydediliyor
'*****************************ANA PROGRAM*****************************
Lcdout $fe, 1, "Micro Islemciler" ' Satır 1
Lcdout $fe, $C0, " Projesi"
pause(1000)
' lcdout $FE, $0E
loop:
Gosub getkey 'Tuş takımından değer alınacak
' satir2 = "F"
' lcdout $fe,1,"Sifreyi Girin"
' Lcdout $fe, $c0, satir2
' pause 10
Goto loop 'Döngüye devam
'****************************ANA PROGRAM SONU*************************
' ******************************** Tuş takımından değer okuyan alt program *************************
getkey:
Pause 50 ' Bekle
getkeyu:
' Wait for all keys up
PORTB = 0 'PortB nin bütün çıkış pinleri lojik 0
TRISB = $f0 ' 4 pin çıkış ve 4 pin giriş yapılıyor
If ((PORTB >> 4) != $f) Then getkeyu ' eğer herhangi bir tuşa basılmış ise
Pause 50 ' Bekle
getkeyp:
' tuşa basılana kadar bekle
For col = 0 to 3 ' 4 columns in keypad
PORTB = 0 ' PortB sıfırlanıyor
TRISB = (dcd col) ^ $ff ' Set one column pin to output
'dcd col trisb nin coluncu basamağını 1 yapar. 0.1.2. gibi
row = PORTB >> 4 ' Satır oku
If row != $f Then gotkey ' If any keydown, exit
Next col
pause 50
'diğer buttonların sonu
Goto getkeyp ' No keys down, go look again
gotkey: ' karekter çagir
sonuc = (col * 4) + (ncd (row ^ $f))-1 'Gelen binary değeri hex çeviriyormuş.
'artir =artir +1
if artir > 16 then
if satirno=1 then
satirno=2
endif
if satirno=2 then
satirno=1
endif
artir=1
endif 'Arrtir
goto kaydir
son:
Return '******** Alt program sonu ************
' Alınan Karakterlerin LCD üzerinde gösterim şekli seçiliyor
'******************************** Tuş takımından değer okuyan alt program sonu ********************
kaydir:
'**Ekrana yazma işlemleri burada yapılacak
'adsonuc var byte
'col var byte ' Tuş takımı sütunu
'row var byte ' Tuş takımı satırı
'sonuc var byte ' Tuş Değeri
'satir1 var byte[16] 'LCD'deki birinci satır
'satir2 var byte[16] 'LCD'deki ikinci satır
'satirno var byte 'aktif satır
'artir var byte 'aktif sutun
'karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası
'aktif_karakter var byte 'kullanılan tuş 1-10
'k var byte
'adsonuc var byte
'col var byte ' Tuş takımı sütunu
'row var byte ' Tuş takımı satırı
'sonuc var byte ' Tuş Değeri
'satir1 var byte[16] 'LCD'deki birinci satır
'satir2 var byte[16] 'LCD'deki ikinci satır
'satirno var byte 'aktif satır
'artir var byte 'aktif sutun
'karakter_no var byte 'tuşta kayıtlı kullanılacak karakter numarası
'aktif_karakter var byte 'kullanılan tuş 1-10
'k var byte
if sonuc =%00000000 then '1. Tuş
if aktif_karakter<>1 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 1
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus1[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus1[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000001 then '2. Tuş
if aktif_karakter<>2 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 2
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus2[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus2[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000010 then '3. Tuş
if aktif_karakter<>3 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 3
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus3[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus3[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
'Kendime Not : Başlangıca ilk karakter koymayı unutma
if sonuc =%00000011 then '4. Tuş
if aktif_karakter<>4 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 4
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus4[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus4[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000100 then '5. Tuş
if aktif_karakter<>5 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 5
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus5[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus5[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000101 then '6. Tuş
if aktif_karakter<>6 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 6
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus6[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus6[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000110 then '7. Tuş
if aktif_karakter<>7 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 7
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus7[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus7[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00000111 then '8. Tuş
if aktif_karakter<>8 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 8
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus8[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus8[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
if sonuc =%00001000 then '9. Tuş
if aktif_karakter<>9 then 'aktif karakter bu değilse karakter no sıfırlanacak
aktif_karakter = 9
karakter_no=0
endif 'if aktif_karakter
if satirno=1 then
satir1[artir]=tus9[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 1 ise
if satirno=2 then
satir2[artir]=tus9[karakter_no]
karakter_no=karakter_no+1
endif 'satir no 2 ise
if karakter_no>2 then
karakter_no=0
endif 'karakter_no
endif 'if sonuc
'1001 '9
'1010 'A
'1011 'B
'1100 'C 'GERİ
'1101 'D 'ÜST SATIR
'1110 'E 'ALT SATIR
'1111 'F 'İLERİ
if sonuc =%00001100 then 'C. Tuş
artir=artir-1
if artir<1 then
if satirno =1 then
satirno=2
artir=16
endif
if satirno =2 then
satirno=1
artir=16
endif
endif 'artir<1
ENDIF 'GERİ
if sonuc =%00001111 then 'F. Tuş
artir=artir+1
if artir>16 then
if satirno =1 then
satirno=2
artir=1
endif
if satirno =2 then
satirno=1
artir=1
endif
endif 'artir<1
ENDIF 'GERİ
Lcdout $fe, 1, satir1[1],satir1[2],satir1[3],satir1[4],satir1[5],satir1[6],satir1[7],satir1[8],satir1[9],satir1[10],satir1[11],satir1[12],satir1[13],satir1[14],satir1[15],satir1[16]
Lcdout $fe, $C0,satir2[1],satir2[2],satir2[3],satir2[4],satir2[5],satir2[6],satir2[7],satir2[8],satir2[9],satir2[10],satir2[11],satir2[12],satir2[13],satir2[14],satir2[15],satir2[16]
pause 50
goto son
end
Hazırlayanlar : Güngör Köprücü ,Mehmet Ayaz Emeği geçen Kişilere Teşekkürler.




2×14 lcd ekran satan bir yer varmı? [email protected] olduğunu düşündüğünüz bir yer varsa mail atarsanız sevinirim
arkadaşım tuştakımının da varsa pcb sini verirmisin çok zor bulunuyor hazırları ,izmitte
İyi günler,öncelikle emeğinize sağlık üstad.Bilgileriniz çok değerli ve paylaşmaktan çekinmiyorsunuz. Rica etsem benimle irtibata geçer misiniz ? 10 gün içinde teslim etmem gereken bir proje var.Yardımcı olursanız çok sevinirim. Şimdiden teşekkürler …. [email protected]